i am trying to build a native image for my spring boot application. i am using maven graalvm plugin and maven spring boot plugin for building native-image , i am always getting below error while building the image
[INFO] [creator] [1/8] Initializing... (75.5s @ 0.38GB)
[INFO] [creator] Java version: 17.0.11+10-LTS, vendor version: Liberica-NIK-23.0.4-1
[INFO] [creator] Graal compiler: optimization level: 2, target machine: compatibility
[INFO] [creator] C compiler: gcc (linux, x86_64, 11.4.0)
[INFO] [creator] Garbage collector: Serial GC (max heap size: 80% of RAM)
[INFO] [creator] 3 user-specific feature(s)
[INFO] [creator] - com.oracle.svm.polyglot.scala.ScalaFeature
[INFO] [creator] - com.oracle.svm.thirdparty.gson.GsonFeature
[INFO] [creator] - org.springframework.aot.nativex.feature.PreComputeFieldFeature
[INFO] [creator] Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
[INFO] [creator] Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
[INFO] [creator] SLF4J(W): No SLF4J providers were found.
[INFO] [creator] SLF4J(W): Defaulting to no-operation (NOP) logger implementation
[INFO] [creator] SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.
[INFO] [creator] 09:49:02.475 [ForkJoinPool-2-worker-1] ERROR io.netty.handler.ssl.BouncyCastleAlpnSslUtils -- Unable to initialize BouncyCastleAlpnSslUtils.
[INFO] [creator] java.lang.ClassNotFoundException: org.bouncycastle.jsse.BCSSLEngine
[INFO] [creator] at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
[INFO] [creator] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
[INFO] [creator] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
[INFO] [creator] at java.base/java.lang.Class.forName0(Native Method)
[INFO] [creator] at java.base/java.lang.Class.forName(Class.java:375)
[INFO] [creator] at io.netty.handler.ssl.BouncyCastleAlpnSslUtils.<clinit>(BouncyCastleAlpnSslUtils.java:63)
[INFO] [creator] at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
[INFO] [creator] at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1155)
[INFO] [creator] at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ClassInitializationSupport.ensureClassInitialized(ClassInitializationSupport.java:168)
[INFO] [creator] at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ProvenSafeClassInitializationSupport.computeInitKindAndMaybeInitializeClass(ProvenSafeClassInitializationSupport.java:348)
[INFO] [creator] at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ProvenSafeClassInitializationSupport.computeInitKindAndMaybeInitializeClass(ProvenSafeClassInitializationSupport.java:76)
[INFO] [creator] at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ClassInitializationSupport.shouldInitializeAtRuntime(ClassInitializationSupport.java:144)
[INFO] [creator] at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.SVMHost.isInitialized(SVMHost.java:317)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.isInitialized(AnalysisType.java:894)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.maybeEagerlyInitialize(BytecodeParser.java:4313)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1657)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1650)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBytecode(BytecodeParser.java:5306)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3401)
[INFO] [creator] at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.iterateBytecodesForBlock(SharedGraphBuilderPhase.java:712)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.handleBytecodeBlock(BytecodeParser.java:3361)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3203)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:1134)
[INFO] [creator] at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.build(SharedGraphBuilderPhase.java:152)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:1026)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:97)
[INFO] [creator] at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase.run(SharedGraphBuilderPhase.java:114)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.run(Phase.java:49)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:434)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:42)
[INFO] [creator] at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:38)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.AnalysisParsedGraph.parseBytecode(AnalysisParsedGraph.java:146)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.parseGraph(AnalysisMethod.java:819)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.ensureGraphParsedHelper(AnalysisMethod.java:784)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.ensureGraphParsed(AnalysisMethod.java:767)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:184)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:583)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:165)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureFlowsGraphCreated(MethodTypeFlow.java:152)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.getOrCreateMethodFlowsGraphInfo(MethodTypeFlow.java:110)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.typestate.DefaultVirtualInvokeTypeFlow.onObservedUpdate(DefaultVirtualInvokeTypeFlow.java:113)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.TypeFlow.lambda$addObserver$0(TypeFlow.java:446)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:187)
[INFO] [creator] at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:171)
[INFO] [creator] at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
[INFO] [creator] at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
[INFO] [creator] at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
[INFO] [creator] at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
[INFO] [creator] at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
[INFO] [creator] at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
[INFO] [creator] [2/8] Performing analysis... [] (596.7s @ 2.72GB)
[INFO] [creator] 31,496 (88.43%) of 35,618 types reachable
[INFO] [creator] 50,819 (67.20%) of 75,626 fields reachable
[INFO] [creator] 142,967 (61.62%) of 232,001 methods reachable
[INFO] [creator] 9,424 types, 1,913 fields, and 13,701 methods registered for reflection
[INFO] [creator]
[INFO] [creator] Error: java.util.concurrent.ExecutionException: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: No instances of java.net.Inet4Address are allowed in the image heap as this class should be initialized at image runtime. To see how this object got instantiated use --trace-object-instantiation=java.net.Inet4Address.
[INFO] [creator] Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
[INFO] [creator] --------------------------------------------------------------------------------
[INFO] [creator] 77.2s (11.3% of total time) in 213 GCs | Peak RSS: 5.34GB | CPU load: 4.62
[INFO] [creator] ================================================================================
[INFO] [creator] Finished generating '<fully-quilified-main-class>' in 11m 16s.
[INFO] [creator] unable to invoke layer creator
[INFO] [creator] unable to contribute native-image layer
[INFO] [creator] error running build
[INFO] [creator] exit status 1
[INFO] [creator] ERROR: failed to build: exit status 1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15:12 min
[INFO] Finished at: 2024-05-10T15:19:10+05:30
[INFO] ------------------------------------------------------------------------
based on this stackoverflow answer i thought of initializing java.net.Inet4Address at runtime, i tried different configurations but it didn’t worked so can any one please help me on below
- how to enable debug / verbose logs for native-image build process either by maven plugin configuration or command line option,below is the command i am using which didn’t worked
./mvnw clean spring-boot:build-image -Pnative -DskipTests -Dverbose=true
- how to configure native-image build args like initialize at run time for a particular class
- how to set heap size for native-image build process
- how to specify
-H:+ReportExceptionStackTraces
when i tried below configuration it didn’t worked
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.2.5</version>
</plugin>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.9.28</version>
<configuration>
<verbose>true</verbose> // this didn't worked
<debug>true</debug> // this didn't worked
<buildArgs> // this didn't worked
<arg>--initialize-at-run-time=java.net.Inet4Address</arg>
<buildArg>--initialize-at-run-time=java.net.Inet4Address</buildArg>
</buildArgs>
<jvmArgs> // this didn't worked
<arg>-H:+ReportExceptionStackTraces</arg>
</jvmArgs>
</configuration>
</plugin>
i have gone through graal vm maven plugin documentation and spring maven plugin documentation but those didn’t worked for me may be i haven done something wrong, so can any one please help me what’s wrong with the configuration
Thanks