Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade to GraalVM 19.3.0 / Java 8 edition #4218

Closed
gsmet opened this issue Sep 26, 2019 · 47 comments
Closed

Upgrade to GraalVM 19.3.0 / Java 8 edition #4218

gsmet opened this issue Sep 26, 2019 · 47 comments
Assignees
Milestone

Comments

@gsmet
Copy link
Member

gsmet commented Sep 26, 2019

I created this issue to gather notes about the next GraalVM upgrade.

Per Codrut Stancu from the GraalVM team on Zulip:

FYI this changeset oracle/graal@fa58e36 introduces a substitution for Field.getAnnotatedType() which conflicts with the Quarkus substitution in https://github.com/quarkusio/quarkus/blob/master/core/runtime/src/main/java/io/quarkus/runtime/graal/FieldReplacement.java. I think the Quarkus substitution for Field.getAnnotatedType() can be removed with the next GraalVM release. In fact, I think that the entire FieldReplacement.java can be removed. DONE!

Per Codrut again

FYI additional changes that Quarkus will need for GraalVM 19.3:

Note that this means an upgrade of Netty to 4.1.43.Final. Or another option is to port this patch https://github.com/netty/netty/pull/9631/files to Quarkus via usage of our reflection registration API but I'm not sure if we have allowUnsafeAccess support right now.

@gsmet gsmet added this to the 0.24.0 milestone Sep 26, 2019
@loicmathieu
Copy link
Contributor

This release should also add support for Java 11 on GraalVM.
So this means we also need to add test for this combination in the CI : Native on 11.

@gsmet
Copy link
Member Author

gsmet commented Sep 26, 2019

Yeah or drop Java 8 and only test Java 11. /cc @dmlloyd

@loicmathieu
Copy link
Contributor

loicmathieu commented Sep 26, 2019

Yeah or drop Java 8 and only test Java 11

As a lot of people still use Java 8 it depends if you are ready to take the risk !

@dmlloyd
Copy link
Member

dmlloyd commented Sep 26, 2019

Hopefully people aren't using Java 8 for new projects :)

@loicmathieu
Copy link
Contributor

Hopefully people aren't using Java 8 for new projects :)

You will be very surprised ... or disapointed :)

@gsmet
Copy link
Member Author

gsmet commented Oct 1, 2019

Reopening, we haven't upgraded yet.

@gsmet gsmet removed this from the 0.24.0 milestone Oct 1, 2019
@gsmet
Copy link
Member Author

gsmet commented Oct 9, 2019

/cc @cescoffier @dmlloyd please have a look at the added elements in the description. @cescoffier especially the Netty upgrade part for you.

@cstancu
Copy link

cstancu commented Oct 12, 2019

Additional patch required for GraalVM 19.3.0:

diff --git a/core/deployment/src/main/java/io/quarkus/deployment/steps/SubstrateAutoFeatureStep.java b/core/deployment/src/main/java/io/quarkus/deployment/steps/SubstrateAutoFeatureStep.java
index 2f32e0d39..7da7aacd1 100644
--- a/core/deployment/src/main/java/io/quarkus/deployment/steps/SubstrateAutoFeatureStep.java
+++ b/core/deployment/src/main/java/io/quarkus/deployment/steps/SubstrateAutoFeatureStep.java
@@ -44,7 +44,7 @@ public class SubstrateAutoFeatureStep {
     static final String RUNTIME_REFLECTION = RuntimeReflection.class.getName();
     static final String BEFORE_ANALYSIS_ACCESS = Feature.BeforeAnalysisAccess.class.getName();
     static final String DYNAMIC_PROXY_REGISTRY = "com.oracle.svm.core.jdk.proxy.DynamicProxyRegistry";
-    static final String LOCALIZATION_SUPPORT = "com.oracle.svm.core.jdk.LocalizationSupport";
+    static final String LOCALIZATION_FEATURE = "com.oracle.svm.core.jdk.LocalizationFeature";
 
     @BuildStep
     SubstrateOutputBuildItem generateFeature(ClassOutputBuildItem output,
@@ -138,7 +138,7 @@ public class SubstrateAutoFeatureStep {
         }
 
         if (!resourceBundles.isEmpty()) {
-            ResultHandle locClass = overallCatch.loadClass(LOCALIZATION_SUPPORT);
+            ResultHandle locClass = overallCatch.loadClass(LOCALIZATION_FEATURE);
 
             ResultHandle params = overallCatch.marshalAsArray(Class.class, overallCatch.loadClass(String.class));
             ResultHandle registerMethod = overallCatch.invokeVirtualMethod(
diff --git a/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java b/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java
index 14afde0c9..612ecaa99 100644
--- a/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java
+++ b/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java
@@ -8,8 +8,9 @@ import java.util.function.BooleanSupplier;
 import com.oracle.svm.core.annotate.Alias;
 import com.oracle.svm.core.annotate.Substitute;
 import com.oracle.svm.core.annotate.TargetClass;
+import com.oracle.svm.core.jdk.JDK8OrEarlier;
 
-@TargetClass(className = "sun.misc.URLClassPath$Loader")
+@TargetClass(className = "sun.misc.URLClassPath$Loader", onlyWith = JDK8OrEarlier.class)
 final class Target_sun_misc_URLClassPath$Loader {
 
     @Alias
@@ -17,7 +18,7 @@ final class Target_sun_misc_URLClassPath$Loader {
     }
 }
 
-@TargetClass(className = "sun.misc.URLClassPath$FileLoader")
+@TargetClass(className = "sun.misc.URLClassPath$FileLoader", onlyWith = JDK8OrEarlier.class)
 final class Target_sun_misc_URLClassPath$FileLoader {
 
     @Alias
@@ -25,7 +26,7 @@ final class Target_sun_misc_URLClassPath$FileLoader {
     }
 }
 
-@TargetClass(className = "sun.misc.URLClassPath")
+@TargetClass(className = "sun.misc.URLClassPath", onlyWith = JDK8OrEarlier.class)
 final class Target_sun_misc_URLClassPath {
 
     @Substitute

The onlyWith = JDK8OrEarlier.class is necessary for classes that Quarkus has substitutions for but have been removed on JDK11.

The LocalizationSupport -> LocalizationFeature change will be necessary due to some changes in GraalVM internals wich Quarkus depends on. You should try to avoid depending on non-API internals. Currently the supported way to register resource bundles is either via resource configuration file or the -H:IncludeResourceBundles option. If you need a programatic API we could provide that.

@cstancu
Copy link

cstancu commented Oct 31, 2019

@gsmet the onlyWith = JDK8OrEarlier.class changes that I mentioned above could be integrated before the 19.3.0 release and I think it should be enough to allow us to enable the Quarkus integration tests for JDK11.

@gsmet
Copy link
Member Author

gsmet commented Nov 8, 2019

@gwenneg would you be interested in leading this effort? @cstancu provided some interesting feedback and patches. We would need to integrate them and check we can build Quarkus/run the tests with the current master of GraalVM.

@gwenneg
Copy link
Member

gwenneg commented Nov 8, 2019

@gsmet Yes, I'll take care of it.

@gwenneg gwenneg self-assigned this Nov 8, 2019
@gwenneg gwenneg added the env/graalvm-java11 Relating to using GraalVM native image generation on Java 11 label Nov 8, 2019
@gwenneg
Copy link
Member

gwenneg commented Nov 13, 2019

@cescoffier Does it seem reasonnable to upgrade netty to 4.1.43.Final for the GraalVM 19.3.0 compatibility or should we try to port (assuming that's possible) this patch into Quarkus?

@gwenneg
Copy link
Member

gwenneg commented Nov 14, 2019

I just submitted a PR that should make the netty upgrade optional by introducing the GraalVM allowUnsafeAccess support for fields through the Quarkus reflection registration API. See #5500.

@gwenneg
Copy link
Member

gwenneg commented Nov 14, 2019

@gsmet Can I safely create a PR that would introduce the JDK 11 native build in the CI? I don't want to disturb the CI because of additional artifacts or jobs right before the 1.0.0.Final release :)

@gsmet
Copy link
Member Author

gsmet commented Nov 15, 2019

@gwenneg let's wait a bit. CI is sufficiently unstable right now. Let's do that mid next week.

@gsmet
Copy link
Member Author

gsmet commented Nov 15, 2019

@cstancu btw, I wanted to apologize for us not having been very reactive on that one. We were all busy preparing 1.0. As you can see, it's in good hands now and we are making good progress.

Thanks for raising all these issues and your advice on how to fix them!

@jabby
Copy link
Contributor

jabby commented Nov 20, 2019

FYI it seems that graalvm 19.3.0 is available now.

@cstancu
Copy link

cstancu commented Nov 20, 2019

FYI the version road map for GraalVM is here https://www.graalvm.org/docs/release-notes/version-roadmap/

@gwenneg
Copy link
Member

gwenneg commented Nov 20, 2019

Thanks for the info @jabby!

@Sanne
Copy link
Member

Sanne commented Nov 22, 2019

Cool, opened #5682 then.

@Sanne Sanne changed the title Upgrade to GraalVM 19.3.0 when it's available Upgrade to GraalVM 19.3.0 / Java 8 edition Nov 22, 2019
@Sanne
Copy link
Member

Sanne commented Nov 22, 2019

I've tested it with:

openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-20191008104205.buildslave.jdk8u-src-tar--b07)
OpenJDK 64-Bit GraalVM CE 19.3.0 (build 25.232-b07-jvmci-19.3-b05, mixed mode)

and there's still other issues:

Error: Support for JNI is not enabled. The option -H:JNI must be set.
com.oracle.svm.core.util.UserError$UserException: Support for JNI is not enabled. The option -H:JNI must be set.
	at com.oracle.svm.core.util.UserError.abort(UserError.java:65)
	at com.oracle.svm.core.jni.JNIRuntimeAccess.getSupport(JNIRuntimeAccess.java:68)
	at com.oracle.svm.core.jni.JNIRuntimeAccess.register(JNIRuntimeAccess.java:51)
	at com.oracle.svm.core.jdk.JNIRegistrationUtil.registerForThrowNew(JNIRegistrationUtil.java:94)
	at com.oracle.svm.hosted.jdk.JNIRegistrationJava.beforeAnalysis(JNIRegistrationJava.java:108)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$7(NativeImageGenerator.java:669)
	at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:63)
	at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:669)
	at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:530)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
	at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Image build request failed with exit status 1

That's by building the first integration test building native images: quarkus-integration-test-hibernate-validator.

I did rebase this PR on master, not sure if that changes things.

@gwenneg
Copy link
Member

gwenneg commented Nov 22, 2019

I saw that one during a test with GraalVM master before 19.3.0 was released. I had to force the JNI activation in Quarkus to make the test work and then completely forgot to test it again with 19.3.0, sorry about that.

@gwenneg gwenneg removed the env/graalvm-java11 Relating to using GraalVM native image generation on Java 11 label Nov 22, 2019
@gwenneg
Copy link
Member

gwenneg commented Nov 22, 2019

From https://www.graalvm.org/docs/release-notes/19_3/ :

Native Image
GraalVM 19.3 switched to using the JDK native code instead of manual substitutions. For GraalVM Native Image this switch to Java Native Interface (JNI) platform enabled the possibility to provide support for JDK 11 and extended support for Windows OS. It has no impact on startup time or memory footprint, and eliminates the need for shipping JDK libraries such as libsunec.so along with native images that use Java crypto services. GraalVM now ships with statically linkable version of the JDK libraries.

I suppose the NativeConfig.enableJni config key is no longer required in Quarkus and we need to use -H:+JNI while building the native image all the time now.

@Sanne Does it seem OK to you to deprecate NativeConfig.enableJni in #5358? I'm not sure if we can remove it completely without a deprecation phase before that.

@Sanne
Copy link
Member

Sanne commented Nov 22, 2019

That seems odd to have to require JNI support for all extensions - it certainly doesn't come for free?

I hope someone could at least investigate why we'd need that. @bobmcwhirter might have some clues?

@gwenneg
Copy link
Member

gwenneg commented Nov 22, 2019

Question asked in the GraalVM native-image Slack channel.

@cescoffier
Copy link
Member

I've finally made progress on the docker images. It required duplicating all our images to support both java8 and java11. They are getting built by the CI right now (but due to the number of images, it is taking lot of time).

Hopefully tonight we will get them.

So, the images are slightly different in the sense their versions explicitly say java8 or java11. To it would be 19.3.0-java8.

@dmlloyd
Copy link
Member

dmlloyd commented Nov 22, 2019

JNI is required for GraalVM 19.3.0. We'll want to change the enableJni default to true - but don't remove it (yet).

That seems odd to have to require JNI support for all extensions - it certainly doesn't come for free?

Indeed. But we've been looking into it.

@gwenneg
Copy link
Member

gwenneg commented Nov 22, 2019

Thanks @dmlloyd, I'll do that in #5358.

@Sanne
Copy link
Member

Sanne commented Nov 22, 2019

thanks @cescoffier - I assume the weird naming is temporary as it seems we'll want to switch to java11 as exclusive choice as soon as we consider it "mature enough"?

I'd suggest to not go overboard with solutions to handle multiple lines of docker images. We'll probably consider java8 as default for a little longer, then switch and be back to single images.

@dmlloyd dmlloyd mentioned this issue Nov 22, 2019
18 tasks
@cescoffier
Copy link
Member

it's been a ride... but here it is:
https://quay.io/repository/quarkus/ubi-quarkus-native-image?tab=tags

So the full name of the image is: quay.io/quarkus/ubi-quarkus-native-image:19.3.0-java8

@gwenneg
Copy link
Member

gwenneg commented Nov 22, 2019

Thanks @cescoffier! I'll run the Quarkus CI with GraalVM 19.3.0-java8 in a few hours.

@cescoffier
Copy link
Member

thanks @cescoffier - I assume the weird naming is temporary as it seems we'll want to switch to java11 as exclusive choice as soon as we consider it "mature enough"?

Yes, we can revert to single image whenever we want.

I'd suggest to not go overboard with solutions to handle multiple lines of docker images. We'll probably consider java8 as default for a little longer, then switch and be back to single images.

Yes, but for testing, we need both images :-)

@breandan
Copy link

breandan commented Nov 29, 2019

Using GraalVM 19.3.0/JDK 11.0.5, Kotlin 1.3.61, Gradle 6.1-20191126230035 with the Quarkus Gradle plugin 1.0.1.Final on OS X 10.15.1, I encountered the following error when running ./gradlew buildNative --stacktrace:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':quarkusBuild'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:205)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:203)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:184)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.quarkus.deployment.steps.NativeImageAutoFeatureStep
        at io.quarkus.deployment.util.ServiceUtil.classesNamedIn(ServiceUtil.java:31)
        at io.quarkus.deployment.ExtensionLoader.loadStepsFrom(ExtensionLoader.java:248)
        at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:85)
        at io.quarkus.creator.phase.augment.AugmentTask.run(AugmentTask.java:181)
        at io.quarkus.creator.phase.augment.AugmentTask.run(AugmentTask.java:48)
        at io.quarkus.creator.CuratedApplicationCreator.runTask(CuratedApplicationCreator.java:139)
        at io.quarkus.gradle.tasks.QuarkusBuild.buildQuarkus(QuarkusBuild.java:168)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:49)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:727)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:694)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:568)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:553)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:536)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:276)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:265)
        at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:63)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:49)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:34)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:43)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
        at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:34)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:44)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:54)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:38)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
        at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:153)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:67)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:41)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:44)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:33)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:92)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:85)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:94)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:79)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
        at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:192)
        ... 30 more

I followed the instruction for getting started here using brew cask install graalvm/tap/graalvm-ce-java11.

@gwenneg
Copy link
Member

gwenneg commented Nov 30, 2019

Hi @breandan! Quarkus currently supports GraalVM 19.2.1 which is also limited to JDK 8.

We are working on the integration of GraalVM 19.3.0 (which supports JDK 8 and 11) into Quarkus as we speak and it could be part of Quarkus 1.1.0. We reported a few issues including a blocking one to the GraalVM team so we may have to wait for GraalVM 19.3.1, that's still unsure for now.

So for now, please use GraalVM 19.2.1 and your Quarkus project should build just fine. If that's not the case, don't hesitate to open a Quarkus issue :)

@Sanne
Copy link
Member

Sanne commented Dec 5, 2019

this can be closed @gwenneg @gsmet ?

@gsmet gsmet added this to the 1.1.0 milestone Dec 5, 2019
@gsmet
Copy link
Member Author

gsmet commented Dec 5, 2019

I think so.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants