Skip to content

BootLoader.hasClassPath() NPE during native image execution with JDK 11 #6089

@gwenneg

Description

@gwenneg

Describe the bug

The following error happens with most (if not all) Quarkus integration tests during the native image startup (after the generation ended successfully):

[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM Version 19.3.0 CE
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] docker run -v /home/git/quarkus/integration-tests/kogito/target/quarkus-integration-test-kogito-999-SNAPSHOT-native-image-source-jar:/project:z --user 0:0 --rm quay.io/quarkus/ubi-quarkus-native-image:19.3.0-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 -jar quarkus-integration-test-kogito-999-SNAPSHOT-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:+AddAllCharsets -H:EnableURLProtocols=http -H:+JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace quarkus-integration-test-kogito-999-SNAPSHOT-runner
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]    classlist:  31,275.92 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]        (cap):   2,406.23 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]        setup:   5,438.86 ms
21:14:11,105 INFO  [org.jbo.threads] JBoss Threads version 3.0.0.Final
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]   (typeflow):  64,753.97 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]    (objects):  39,490.06 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]   (features):   2,174.23 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]     analysis: 111,257.16 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]     (clinit):   1,960.39 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]     universe:   6,119.57 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]      (parse):  12,618.13 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]     (inline):  15,299.03 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]    (compile):  64,538.59 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]      compile: 100,775.67 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]        image:  15,565.41 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]        write:   2,620.39 ms
[quarkus-integration-test-kogito-999-SNAPSHOT-runner:27]      [total]: 273,808.74 ms
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 284609ms
[INFO]
[INFO] --- maven-failsafe-plugin:2.22.1:integration-test (default) @ quarkus-integration-test-kogito ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running io.quarkus.it.kogito.jbpm.OrdersProcessTestIT
Executing [/home/git/quarkus/integration-tests/kogito/target/quarkus-integration-test-kogito-999-SNAPSHOT-runner, -Dquarkus.http.port=8081, -Dtest.url=http://localhost:8081, -Dquarkus.log.file.path=target/quarkus.log]
Exception in thread "main" java.lang.RuntimeException: Failed to start quarkus
        at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:194)
        at io.quarkus.runtime.Application.start(Application.java:87)
        at io.quarkus.runtime.Application.run(Application.java:210)
        at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:41)
Caused by: java.lang.NullPointerException
        at jdk.internal.loader.BootLoader.hasClassPath(BootLoader.java:101)
        at java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1189)
        at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1220)
        at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1264)
        at java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1299)
        at java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1384)
        at org.eclipse.microprofile.config.spi.ConfigProviderResolver.loadSpi(ConfigProviderResolver.java:151)
        at org.eclipse.microprofile.config.spi.ConfigProviderResolver.loadSpi(ConfigProviderResolver.java:146)
        at org.eclipse.microprofile.config.spi.ConfigProviderResolver.loadSpi(ConfigProviderResolver.java:146)
        at org.eclipse.microprofile.config.spi.ConfigProviderResolver.instance(ConfigProviderResolver.java:119)
        at io.quarkus.runtime.generated.Config.readConfig(Config.zig:4497)
        at io.quarkus.runtime.generated.Config.createRunTimeConfig(Config.zig:2830)
        at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:52)
        ... 3 more
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.323 s <<< FAILURE! - in io.quarkus.it.kogito.jbpm.OrdersProcessTestIT
[ERROR] testRuleEvaluation  Time elapsed: 0.024 s  <<< ERROR!
org.junit.jupiter.api.extension.TestInstantiationException: TestInstanceFactory [io.quarkus.test.junit.QuarkusTestExtension] failed to instantiate test class [io.quarkus.it.kogito.jbpm.OrdersProcessTestIT]: Failed to start native image, process has exited
Caused by: java.lang.RuntimeException: Failed to start native image, process has exited

It seems ClassLoaders.bootLoader() returns null which shouldn't be possible from what I can see in the JDK code (but I may read it wrong). This looks like an upstream bug but I'd like some opinions about it here before creating a GraalVM issue.

To Reproduce
Steps to reproduce the behavior:

  1. Build the Quarkus sources using JDK 11.
  2. ./mvnw clean install -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:19.3.0-java11 --projects :quarkus-integration-test-kogito

Environment:

  • Output of uname -a: Linux pc-79.home 4.18.0-80.11.2.el8_0.x86_64 #1 SMP Tue Sep 24 11:32:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • Output of java -version: openjdk version "11.0.5" 2019-10-15 LTS OpenJDK Runtime Environment 18.9 (build 11.0.5+10-LTS) OpenJDK 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode, sharing)
  • GraalVM version (if different from Java): 19.3.0
  • Quarkus version or git rev: master

Additional context
The native image build is done using a Docker image.

Metadata

Metadata

Assignees

Labels

env/graalvm-java11Relating to using GraalVM native image generation on Java 11kind/bugSomething isn't working

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions