After upgraded to Spring Boot 3.0 with some minor code modifications, my application can startup and work as before. But when I build native image by nativeCompile Gradle task, It failed with:
``` java.lang.NullPointerException: Cannot invoke "com.oracle.svm.hosted.meta.HostedType.getSingleImplementor()" because the return value of "com.oracle.graal.pointsto.infrastructure.Universe.lookup(jdk.vm.ci.meta.JavaType)" is null
I don't know it's due to my incorrect configuration, or a bug of Spring, or a bug of Graal.
GraalVM: graalvm-ce-java17-darwin-aarch64-22.3.0
Related stacktrace:
...(omitted)
[2/7] Performing analysis... [****] (137.9s @ 6.31GB) 44,734 (94.20%) of 47,490 classes reachable 77,479 (72.20%) of 107,317 fields reachable 213,026 (64.80%) of 328,749 methods reachable 1,753 classes, 2,243 fields, and 16,131 methods registered for reflection 69 classes, 75 fields, and 58 methods registered for JNI access 5 native libraries: -framework CoreServices, -framework Foundation, dl, pthread, z [3/7] Building universe... (25.5s @ 6.59GB)
30.5s (16.4% of total time) in 53 GCs | Peak RSS: 3.37GB | CPU load: 3.24
======================================================================================================================== Failed generating 'pkg-core' after 3m 5s. Fatal error: java.lang.NullPointerException at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:564) at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:591) at java.base/java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:672) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.meta.UniverseBuilder.build(UniverseBuilder.java:177) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:597) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:535) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:403) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:580) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:128) Caused by: java.lang.NullPointerException at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:564) at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:591) at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:689) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:159) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:765) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.meta.UniverseBuilder.buildProfilingInformation(UniverseBuilder.java:348) at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1375) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) Caused by: java.lang.NullPointerException: Cannot invoke "com.oracle.svm.hosted.meta.HostedType.getSingleImplementor()" because the return value of "com.oracle.graal.pointsto.infrastructure.Universe.lookup(jdk.vm.ci.meta.JavaType)" is null at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.SubstrateStrengthenGraphs.getSingleImplementorType(SubstrateStrengthenGraphs.java:58) at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.results.StrengthenGraphs$StrengthenSimplifier.strengthenStamp(StrengthenGraphs.java:633) at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.results.StrengthenGraphs$StrengthenSimplifier.simplify(StrengthenGraphs.java:238) at jdk.internal.vm.compiler/org.graalvm.compiler.phases.common.CanonicalizerPhase.tryCanonicalize(CanonicalizerPhase.java:550) at jdk.internal.vm.compiler/org.graalvm.compiler.phases.common.CanonicalizerPhase.processNode(CanonicalizerPhase.java:469) at jdk.internal.vm.compiler/org.graalvm.compiler.phases.common.CanonicalizerPhase.processWorkSet(CanonicalizerPhase.java:320) at jdk.internal.vm.compiler/org.graalvm.compiler.phases.common.CanonicalizerPhase.run(CanonicalizerPhase.java:220) at jdk.internal.vm.compiler/org.graalvm.compiler.phases.common.CanonicalizerPhase.run(CanonicalizerPhase.java:86) at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:446) at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:334) at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.results.StrengthenGraphs.makeOrApplyResults(StrengthenGraphs.java:137) at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.meta.UniverseBuilder.lambda$buildProfilingInformation$0(UniverseBuilder.java:348) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1850) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:290) at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754) ... 5 more Error: Image build request failed with exit status 1
Task :pkg-core:nativeCompile FAILED
FAILURE: Build failed with an exception. ```
Comment From: wilkinsona
Given that there's no Spring code in the stack and that the NullPointerException is occurring in Graal's code, this looks like a Graal bug to me. If you can provide a minimal example that reproduces the failure, please open a Graal issue.