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

Bootstrap application - fail with 1.3.0.CR1 in native - substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded #7632

Closed
rsvoboda opened this issue Mar 6, 2020 · 12 comments · Fixed by #7636
Labels
kind/bug Something isn't working
Milestone

Comments

@rsvoboda
Copy link
Member

rsvoboda commented Mar 6, 2020

I see fail with simple bootstrap application based on Quarkus 1.3.0.CR1 in native - substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded

Using GraalVM CE 19.3.1 JDK11 based one.

sdk use java 19.3.1.r11-grl && export GRAALVM_HOME=$JAVA_HOME

rm -rf fooBar
mvn io.quarkus:quarkus-maven-plugin:1.3.0.CR1:create \
    -DprojectGroupId=io.quarkus.qe \
    -DprojectArtifactId=fooBar \
    -DprojectVersion=1.0.0-SNAPSHOT \
    -DplatformArtifactId=quarkus-bom \
    -DclassName="io.quarkus.qe.MyResource"
mvn -f fooBar/pom.xml clean verify -Dnative
[INFO] --- quarkus-maven-plugin:1.3.0.CR1:build (default) @ fooBar ---
[INFO] [org.jboss.threads] JBoss Threads version 3.0.1.Final
[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building native image source jar: /Users/rsvoboda/Downloads/fooBar/target/fooBar-1.0.0-SNAPSHOT-native-image-source-jar/fooBar-1.0.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Building native image from /Users/rsvoboda/Downloads/fooBar/target/fooBar-1.0.0-SNAPSHOT-native-image-source-jar/fooBar-1.0.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM Version 19.3.1 CE
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] /Users/rsvoboda/.sdkman/candidates/java/19.3.1.r11-grl/bin/native-image -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=1 --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -H:+JNI -jar fooBar-1.0.0-SNAPSHOT-runner.jar -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:-AddAllCharsets -H:-IncludeAllTimeZones -H:EnableURLProtocols=http --no-server -H:-UseServiceLoaderFeature -H:+StackTrace fooBar-1.0.0-SNAPSHOT-runner
[fooBar-1.0.0-SNAPSHOT-runner:7565]    classlist:   3,882.79 ms
[fooBar-1.0.0-SNAPSHOT-runner:7565]        setup:     314.73 ms
Error: substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded. Use field `onlyWith` in the `TargetClass` annotation to make substitution only active when needed.
com.oracle.svm.core.util.UserError$UserException: substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded. Use field `onlyWith` in the `TargetClass` annotation to make substitution only active when needed.
	at com.oracle.svm.core.util.UserError.abort(UserError.java:65)
	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.findTargetClass(AnnotationSubstitutionProcessor.java:823)
	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.handleClass(AnnotationSubstitutionProcessor.java:252)
	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.init(AnnotationSubstitutionProcessor.java:230)
	at com.oracle.svm.hosted.NativeImageGenerator.createDeclarativeSubstitutionProcessor(NativeImageGenerator.java:876)
	at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:825)
	at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:528)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
	at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Error: Image build request failed with exit status 1
@rsvoboda rsvoboda added the kind/bug Something isn't working label Mar 6, 2020
@rsvoboda
Copy link
Member Author

rsvoboda commented Mar 6, 2020

Just tried the sample app with JDK8 based GraalVM and it passes ...

sdk use java 19.3.1.r8-grl && export GRAALVM_HOME=$JAVA_HOME
mvn -f fooBar/pom.xml clean verify -Dnative

@gemmellr
Copy link
Contributor

gemmellr commented Mar 6, 2020

I just came to raise the same issue:

I am seeing the error in the native build for a JDK 11 CI job for an extension. The CI jobs run on ubuntu-18.04, and it was using GraalVM 19.3.1 Java 11 via container build with quay.io/quarkus/ubi-quarkus-native-image:19.3.1-java11

It started failing with a nightly build last night against Quarkus master:
https://github.com/amqphub/quarkus-qpid-jms/runs/489289503?check_suite_focus=true

The same failure occurred when updating the extension to build agaisnt 1.3.0.CR1:
https://github.com/amqphub/quarkus-qpid-jms/runs/489778475?check_suite_focus=true

PR #7587 seems to have touched in this area yesterday afternoon for use on Windows + JDK11, which could be related.

2020-03-06T09:11:18.5234222Z [INFO] --- quarkus-maven-plugin:1.3.0.CR1:build (default) @ quarkus-qpid-jms-integration-tests ---
2020-03-06T09:11:19.2931399Z [INFO] [org.jboss.threads] JBoss Threads version 3.0.1.Final
2020-03-06T09:11:20.2493287Z [INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building native image source jar: /home/runner/work/quarkus-qpid-jms/quarkus-qpid-jms/integration-tests/target/quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-native-image-source-jar/quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-runner.jar
2020-03-06T09:11:20.2906376Z [INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Building native image from /home/runner/work/quarkus-qpid-jms/quarkus-qpid-jms/integration-tests/target/quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-native-image-source-jar/quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-runner.jar
2020-03-06T09:11:20.3351176Z [INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Pulling image quay.io/quarkus/ubi-quarkus-native-image:19.3.1-java11
2020-03-06T09:11:20.4803231Z 19.3.1-java11: Pulling from quarkus/ubi-quarkus-native-image
2020-03-06T09:11:20.4805677Z Digest: sha256:b18b701bd6f9d0a7778129f63b9f2dd666be2a2574854b56cd60e3cbd42b73d3
2020-03-06T09:11:20.4807331Z Status: Image is up to date for quay.io/quarkus/ubi-quarkus-native-image:19.3.1-java11
2020-03-06T09:11:20.4809245Z quay.io/quarkus/ubi-quarkus-native-image:19.3.1-java11
2020-03-06T09:11:21.0737377Z [INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM Version 19.3.1 CE
2020-03-06T09:11:21.0738987Z [INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] docker run -v /home/runner/work/quarkus-qpid-jms/quarkus-qpid-jms/integration-tests/target/quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-native-image-source-jar:/project:z --user 1001:115 --rm quay.io/quarkus/ubi-quarkus-native-image:19.3.1-java11 -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=1 --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -H:+JNI -jar quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-runner.jar -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:-AddAllCharsets -H:-IncludeAllTimeZones -H:EnableURLProtocols=http,https --enable-all-security-services --no-server -H:-UseServiceLoaderFeature -H:+StackTrace quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-runner
2020-03-06T09:11:27.1491168Z [quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-runner:24]    classlist:   5,106.24 ms
2020-03-06T09:11:27.5293052Z [quarkus-qpid-jms-integration-tests-0.12.0-SNAPSHOT-runner:24]        setup:     372.30 ms
2020-03-06T09:11:27.5331517Z Error: substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded. Use field `onlyWith` in the `TargetClass` annotation to make substitution only active when needed.
2020-03-06T09:11:27.5360567Z com.oracle.svm.core.util.UserError$UserException: substitution target for io.quarkus.vertx.core.runtime.graal.Target_sun_nio_ch_Iocp is not loaded. Use field `onlyWith` in the `TargetClass` annotation to make substitution only active when needed.
2020-03-06T09:11:27.5362214Z 	at com.oracle.svm.core.util.UserError.abort(UserError.java:65)
2020-03-06T09:11:27.5363144Z 	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.findTargetClass(AnnotationSubstitutionProcessor.java:823)
2020-03-06T09:11:27.5364749Z 	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.handleClass(AnnotationSubstitutionProcessor.java:252)
2020-03-06T09:11:27.5365741Z 	at com.oracle.svm.hosted.substitute.AnnotationSubstitutionProcessor.init(AnnotationSubstitutionProcessor.java:230)
2020-03-06T09:11:27.5366678Z 	at com.oracle.svm.hosted.NativeImageGenerator.createDeclarativeSubstitutionProcessor(NativeImageGenerator.java:876)
2020-03-06T09:11:27.5367264Z 	at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:825)
2020-03-06T09:11:27.5367670Z 	at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:528)
2020-03-06T09:11:27.5367953Z 	at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
2020-03-06T09:11:27.5368459Z 	at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
2020-03-06T09:11:27.5368810Z 	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
2020-03-06T09:11:27.5369336Z 	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
2020-03-06T09:11:27.5369613Z 	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
2020-03-06T09:11:27.5371361Z 	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
2020-03-06T09:11:27.5373575Z 	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
2020-03-06T09:11:27.5590622Z Error: Image build request failed with exit status 1

@geoand
Copy link
Contributor

geoand commented Mar 6, 2020

cc @gwenneg

@gemmellr
Copy link
Contributor

gemmellr commented Mar 6, 2020

Just for completeness, the same occurs locally with Graal 20.0.0 native container based builds - works with 8, fails with 11 (via quay.io/quarkus/ubi-quarkus-native-image:20.0.0-java11)

@SR-Lut3t1um
Copy link
Contributor

Same issue with gradle:

 Running with gitlab-runner 12.5.0 (1564076b)
   on un1qu3 ZWVsohmK
Using Docker executor with image oracle/graalvm-ce:19.3.1-java11 ...
00:02
 Authenticating with credentials from /root/.docker/config.json
 Pulling docker image oracle/graalvm-ce:19.3.1-java11 ...
 Using docker image sha256:1515e8e21105b90a95016ab1964c141eb21384ef75dba5d9d829724be303c420 for oracle/graalvm-ce:19.3.1-java11 ...
Authenticating with credentials from /root/.docker/config.json
00:02
 Running on runner-ZWVsohmK-project-21268-concurrent-0 via un1qu3...
Authenticating with credentials from /root/.docker/config.json
00:02
 Fetching changes with git depth set to 50...
 Reinitialized existing Git repository in /builds/tobias5/aut0m4t0n/.git/
 From https://gitlab.informatik.uni-bremen.de/tobias5/aut0m4t0n
  * [new ref]         refs/pipelines/94442 -> refs/pipelines/94442
    041aff3..7a37a00  master               -> origin/master
 Checking out 7a37a00c as master...
 Removing .gradle/
 Removing build/
 Skipping Git submodules setup
Authenticating with credentials from /root/.docker/config.json
00:01
Authenticating with credentials from /root/.docker/config.json
00:02
Authenticating with credentials from /root/.docker/config.json
01:54
 $ chmod +x gradlew
 $ export GRADLE_USER_HOME=`pwd`/.gradle
 $ gu install native-image
 Downloading: Component catalog from www.graalvm.org
 Processing Component: Native Image
 Downloading: Component native-image: Native Image  from github.com
 [                    ]����������������������[#                   ]����������������������[##                  ]����������������������[###                 ]����������������������[####                ]����������������������[#####               ]����������������������[######              ]����������������������[#######             ]����������������������[########            ]����������������������[#########           ]����������������������[##########          ]����������������������[###########         ]����������������������[############        ]����������������������[#############       ]����������������������[##############      ]����������������������[###############     ]����������������������[################    ]����������������������[#################   ]����������������������[##################  ]����������������������[################### ]����������������������[####################]����������������������Installing new component: Native Image (org.graalvm.native-image, version 19.3.1)
 Refreshed alternative links in /usr/bin/
 $ ./gradlew buildNative --build-cache --stacktrace --additional-build-args=--static
 Downloading https://services.gradle.org/distributions/gradle-6.2.2-bin.zip
 .........10%.........20%.........30%..........40%.........50%.........60%..........70%.........80%.........90%..........100%
 Welcome to Gradle 6.2.2!
 Here are the highlights of this release:
  - Dependency checksum and signature verification
  - Shareable read-only dependency cache
  - Documentation links in deprecation messages
 For more details see https://docs.gradle.org/6.2.2/release-notes.html
 To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/6.2.2/userguide/gradle_daemon.html.
 Daemon will be stopped at the end of the build stopping after processing
 > Task :compileJava
 > Task :processResources
 > Task :classes
 > Task :jar
 > Task :quarkusBuild
 building quarkus runner
 > Task :assemble
 > Task :buildNative
 building native image
 > Task :buildNative FAILED
 FAILURE: Build failed with an exception.
 * What went wrong:
 Execution failed for task ':buildNative'.
 > io.quarkus.builder.BuildException: Build failure: Build failed due to errors
   	[error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: java.lang.RuntimeException: Failed to build native image
   	at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:342)
   	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 java.base/java.lang.reflect.Method.invoke(Method.java:566)
   	at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:938)
   	at io.quarkus.builder.BuildContext.run(BuildContext.java:273)
   	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
   	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2027)
   	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1551)
   	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1442)
   	at java.base/java.lang.Thread.run(Thread.java:834)
   	at org.jboss.threads.JBossThread.run(JBossThread.java:479)
   Caused by: java.lang.RuntimeException: Image generation failed. Exit code: 1
   	at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:332)
   	... 12 more
 * Try:
 Run with --info or --debug option to get more log output. Run with --scan to get full insights.
 * Exception is:
 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':buildNative'.
 	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:114)
 	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.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
 	[error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: java.lang.RuntimeException: Failed to build native image
 	at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:342)
 	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 java.base/java.lang.reflect.Method.invoke(Method.java:566)
 	at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:938)
 	at io.quarkus.builder.BuildContext.run(BuildContext.java:273)
 	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
 	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2027)
 	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1551)
 	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1442)
 	at java.base/java.lang.Thread.run(Thread.java:834)
 	at org.jboss.threads.JBossThread.run(JBossThread.java:479)
 Caused by: java.lang.RuntimeException: Image generation failed. Exit code: 1
 	at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:332)
 	... 12 more
 	at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:206)
 	at io.quarkus.runner.bootstrap.AugmentActionImpl.createProductionApplication(AugmentActionImpl.java:77)
 	at io.quarkus.gradle.tasks.QuarkusNative.buildNative(QuarkusNative.java:385)
 	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:67)
 	at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:36)
 	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
 Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
 	[error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: java.lang.RuntimeException: Failed to build native image
 	at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:342)
 	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 java.base/java.lang.reflect.Method.invoke(Method.java:566)
 	at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:938)
 	at io.quarkus.builder.BuildContext.run(BuildContext.java:273)
 	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
 	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2027)
 	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1551)
 	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1442)
 	at java.base/java.lang.Thread.run(Thread.java:834)
 	at org.jboss.threads.JBossThread.run(JBossThread.java:479)
 Caused by: java.lang.RuntimeException: Image generation failed. Exit code: 1
 	at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:332)
 	... 12 more
 	at io.quarkus.builder.Execution.run(Execution.java:115)
 	at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
 	at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:135)
 	at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:204)
 	... 97 more
 Caused by: java.lang.RuntimeException: Failed to build native image
 	at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:342)
 	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 io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:938)
 	at io.quarkus.builder.BuildContext.run(BuildContext.java:273)
 	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
 	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2027)
 	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1551)
 	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1442)
 	at org.jboss.threads.JBossThread.run(JBossThread.java:479)
 Caused by: java.lang.RuntimeException: Image generation failed. Exit code: 1
 	at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:332)
 	... 10 more
 * Get more help at https://help.gradle.org
 BUILD FAILED in 1m 48s
 5 actionable tasks: 5 executed
Authenticating with credentials from /root/.docker/config.json
00:02
 ERROR: Job failed: exit code 1

@cescoffier cescoffier added this to the 1.3.0.Final milestone Mar 6, 2020
@cescoffier
Copy link
Member

These classes are only available on Windows, the onlyIf must be adapted.

@jaikiran
Copy link
Member

jaikiran commented Mar 6, 2020

I've a fix coming up for this one.

@cescoffier
Copy link
Member

Me too :-)

@cescoffier
Copy link
Member

cescoffier commented Mar 6, 2020

@jaikiran ping me when you have your PR, so we can compare.

You just need something like:


public class JDK11OrLaterAndOnWindows implements BooleanSupplier {
    @Override
    public boolean getAsBoolean() {
        String os = System.getProperty("os.name");
        return new JDK11OrLater().getAsBoolean() &&
                os.toLowerCase().startsWith("windows");
    }
}

and isolate the Windows only substitutions.

@jaikiran
Copy link
Member

jaikiran commented Mar 6, 2020

Hello @cescoffier, I've this:

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 62fd2e6cb..86da3a3c1 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
@@ -5,6 +5,9 @@ import java.net.URL;
 import java.nio.channels.spi.AsynchronousChannelProvider;
 import java.util.function.Function;
 
+import org.graalvm.nativeimage.Platform;
+import org.graalvm.nativeimage.Platforms;
+
 import com.oracle.svm.core.annotate.Alias;
 import com.oracle.svm.core.annotate.InjectAccessors;
 import com.oracle.svm.core.annotate.Substitute;
@@ -92,6 +95,7 @@ final class Package_jdk_internal_loader implements Function<TargetClass, String>
 
 @Substitute
 @TargetClass(className = "sun.nio.ch.WindowsAsynchronousFileChannelImpl", innerClass = "DefaultIocpHolder", onlyWith = JDK11OrLater.class)
+@Platforms({ Platform.WINDOWS.class })
 final class Target_sun_nio_ch_WindowsAsynchronousFileChannelImpl_DefaultIocpHolder {
 
     @Alias
@@ -100,6 +104,7 @@ final class Target_sun_nio_ch_WindowsAsynchronousFileChannelImpl_DefaultIocpHold
 }
 
 @TargetClass(className = "sun.nio.ch.Iocp", onlyWith = JDK11OrLater.class)
+@Platforms({ Platform.WINDOWS.class })
 final class Target_sun_nio_ch_Iocp {
 
     @Alias

Of course testing is still in progress (build takes a while).

@cescoffier
Copy link
Member

I didn't know Platforms ! Much better. And yes, testing is going to take a while as we would need feedback on the 3 OS.

@jaikiran
Copy link
Member

jaikiran commented Mar 6, 2020

I've opened #7636. My local (basic) testing went fine with this change (I was seeing the same failure as noted in this issue on my *nix system without this change).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants