I created this issue to gather notes about the next GraalVM upgrade.
Per Codrut Stancu from the GraalVM team on Zulip:
FYI this changeset https://github.com/oracle/graal/commit/fa58e36e0b8337b5e9d9dcc136d60095da3d90a8 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:
- Update Netty version to include https://github.com/netty/netty/pull/9631
- Additional command-line options --initialize-at-run->time=org.wildfly.common.net.CidrAddress,org.wildfly.common.net.Inet. This is needed due to a new restriction that prohibits the presence of java.net.Inet4Address in the image heap.
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.
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.
Yeah or drop Java 8 and only test Java 11. /cc @dmlloyd
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 !
Hopefully people aren't using Java 8 for new projects :)
Hopefully people aren't using Java 8 for new projects :)
You will be very surprised ... or disapointed :)
Reopening, we haven't upgraded yet.
/cc @cescoffier @dmlloyd please have a look at the added elements in the description. @cescoffier especially the Netty upgrade part for you.
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.
@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.
@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.
@gsmet Yes, I'll take care of it.
@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?
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.
@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 :)
@gwenneg let's wait a bit. CI is sufficiently unstable right now. Let's do that mid next week.
@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!
FYI it seems that graalvm 19.3.0 is available now.
FYI the version road map for GraalVM is here https://www.graalvm.org/docs/release-notes/version-roadmap/
Thanks for the info @jabby!
Thanks for volunteering @gwenneg ! I was having a look too (was too curious... ) and noticed this isn't a small task; feel free to delegate / ask help for some aspects?
Noticed you will likely need also : b64b92ea3
@Sanne Thanks for mentioning the groupId
change, I've already included it in #5358 which should be merged soon into master
. I also submitted #5500 and #5353 which have already been merged. AFAIK, Quarkus is ready for GraalVM 19.3.0
with these three PRs :)
Awesome, eager to try it out :100:
I forgot to mention that @galderz also did a part of the GraalVM 19.3.0
compatibility job with #5336
@cescoffier Does it seem reasonnable to upgrade netty to
4.1.43.Final
for the GraalVM19.3.0
compatibility or should we try to port (assuming that's possible) this patch into Quarkus?
@cescoffier the Netty upgrade is the main blocker now. Please suggest if we should assume you're getting us that upgrade soon, or if we should rather re-package the same rules to allow reflective access on unsafe?
ah, ignore my previous comment, that was already done as well via #5500
There's some more work necessary; The code generated by io.quarkus.deployment.steps.NativeImageAutoFeatureStep
can no longer access the internal API of import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport
; I guess it should be updated to use the static methods on org.graalvm.nativeimage.hosted.RuntimeClassInitialization
instead.
@Sanne How did you see that? I ran 19.3.0
tests with runtime-intialized classes and the runtime initalization seemed to work well. Edit: I tested this from the GraalVM master
branch, it might be an important detail.
@gwenneg ah, I guess you're testing with the JDK8 distribution? I was using the JDK11 powered version, which enforces modularity via Jigsaw: the classes in package org.graalvm.nativeimage.impl.
are not accessible.
If it works with "GraalVM 19.3 / JDK8" I guess we could merge this and work on the support for JDK11 as a separate issue?
You're right, I don't have the machine I used for the tests of #5353 at hand right now, but I'm almost sure they were run using the JDK8 distribution of GraalVM.
I can work on the JDK11 runtime initialization tonight (Paris time) or you can do it earlier if you'd like to :) I agree this can be treated in a separate issue.
@cescoffier mentioned that supporting JDK 11 would require more work regarding the build images.
So I think we could move to GraalVM 19.3/JDK 8 and create another issue for JDK 11 support as it will require some other changes anyway.
Cool, opened #5682 then.
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.
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.
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.
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?
Question asked in the GraalVM native-image Slack channel.
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
.
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.
Thanks @dmlloyd, I'll do that in #5358.
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.
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
Thanks @cescoffier! I'll run the Quarkus CI with GraalVM 19.3.0-java8
in a few hours.
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 :-)
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
.
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 :)
this can be closed @gwenneg @gsmet ?
I think so.
Most helpful comment
Yeah or drop Java 8 and only test Java 11. /cc @dmlloyd