Hello team,
I just downloaded the latest 3.3.0-RC1, and wanted to build a native image out of it, with GraalVM 22.
With the simple maven command mvn -Pnative spring-boot:build-image with this pom
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<BP_JVM_VERSION>22</BP_JVM_VERSION>
</env>
</image>
</configuration>
</plugin>
I am able to reproduce this 100%:
[INFO] [creator] [2/8] Performing analysis... [] (30.6s @ 0.82GB)
[INFO] [creator] 10,667 reachable types (74.8% of 14,256 total)
[INFO] [creator] 14,669 reachable fields (50.2% of 29,204 total)
[INFO] [creator] 43,373 reachable methods (46.3% of 93,752 total)
[INFO] [creator] 4,399 types, 848 fields, and 6,558 methods registered for reflection
[INFO] [creator]
[INFO] [creator] Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: An object of type 'org.springframework.boot.loader.nio.file.NestedFileSystemProvider' was found in the image heap. This type, however, is marked for initialization at image run time for the following reason: classes are initialized at run time by default.
[INFO] [creator] This is not allowed for correctness reasons: All objects that are stored in the image heap must be initialized at build time.
[INFO] [creator]
[INFO] [creator] You now have two options to resolve this:
[INFO] [creator]
[INFO] [creator] 1) If it is intended that objects of type 'org.springframework.boot.loader.nio.file.NestedFileSystemProvider' are persisted in the image heap, add
[INFO] [creator]
[INFO] [creator] '--initialize-at-build-time=org.springframework.boot.loader.nio.file.NestedFileSystemProvider'
[INFO] [creator]
[INFO] [creator] to the native-image arguments. Note that initializing new types can store additional objects to the heap. It is advised to check the static fields of 'org.springframework.boot.loader.nio.file.NestedFileSystemProvider' to see if they are safe for build-time initialization, and that they do not contain any sensitive data that should not become part of the image.
[INFO] [creator]
[INFO] [creator] 2) If these objects should not be stored in the image heap, you can use
[INFO] [creator]
[INFO] [creator] '--trace-object-instantiation=org.springframework.boot.loader.nio.file.NestedFileSystemProvider'
[INFO] [creator]
[INFO] [creator] to find classes that instantiate these objects. Once you found such a class, you can mark it explicitly for run time initialization with
[INFO] [creator]
[INFO] [creator] '--initialize-at-run-time=<culprit>'
[INFO] [creator]
[INFO] [creator] to prevent the instantiation of the object.
[INFO] [creator]
[INFO] [creator] If you are seeing this message after upgrading to a new GraalVM release, this means that some objects ended up in the image heap without their type being marked with --initialize-at-build-time.
[INFO] [creator] To fix this, include '--initialize-at-build-time=org.springframework.boot.loader.nio.file.NestedFileSystemProvider' in your configuration. If the classes do not originate from your code, it is advised to update all library or framework dependencies to the latest version before addressing this error.
[INFO] [creator]
[INFO] [creator] The following detailed trace displays from which field in the code the object was reached.
[INFO] [creator] Object was reached by
[INFO] [creator] manually created constant
[INFO] [creator] Error: java.util.concurrent.ExecutionException: com.oracle.graal.pointsto.util.AnalysisError: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: An object of type 'org.springframework.boot.loader.nio.file.NestedFileSystemProvider' was found in the image heap. This type, however, is marked for initialization at image run time for the following reason: classes are initialized at run time by default.
[INFO] [creator] This is not allowed for correctness reasons: All objects that are stored in the image heap must be initialized at build time.
[INFO] [creator]
[INFO] [creator] You now have two options to resolve this:
[INFO] [creator]
[INFO] [creator] 1) If it is intended that objects of type 'org.springframework.boot.loader.nio.file.NestedFileSystemProvider' are persisted in the image heap, add
[INFO] [creator]
[INFO] [creator] '--initialize-at-build-time=org.springframework.boot.loader.nio.file.NestedFileSystemProvider'
[INFO] [creator]
[INFO] [creator] to the native-image arguments. Note that initializing new types can store additional objects to the heap. It is advised to check the static fields of 'org.springframework.boot.loader.nio.file.NestedFileSystemProvider' to see if they are safe for build-time initialization, and that they do not contain any sensitive data that should not become part of the image.
[INFO] [creator]
[INFO] [creator] 2) If these objects should not be stored in the image heap, you can use
[INFO] [creator]
[INFO] [creator] '--trace-object-instantiation=org.springframework.boot.loader.nio.file.NestedFileSystemProvider'
[INFO] [creator]
[INFO] [creator] to find classes that instantiate these objects. Once you found such a class, you can mark it explicitly for run time initialization with
[INFO] [creator]
[INFO] [creator] '--initialize-at-run-time=<culprit>'
[INFO] [creator]
[INFO] [creator] to prevent the instantiation of the object.
[INFO] [creator]
[INFO] [creator] If you are seeing this message after upgrading to a new GraalVM release, this means that some objects ended up in the image heap without their type being marked with --initialize-at-build-time.
[INFO] [creator] To fix this, include '--initialize-at-build-time=org.springframework.boot.loader.nio.file.NestedFileSystemProvider' in your configuration. If the classes do not originate from your code, it is advised to update all library or framework dependencies to the latest version before addressing this error.
[INFO] [creator]
[INFO] [creator] The following detailed trace displays from which field in the code the object was reached.
[INFO] [creator] Object was reached by
[INFO] [creator] manually created constant
[INFO] [creator] --------------------------------------------------------------------------------
[INFO] [creator] 3.6s (9.4% of total time) in 73 GCs | Peak RSS: 1.99GB | CPU load: 6.20
[INFO] [creator] ================================================================================
[INFO] [creator] Failed generating 'com.Application' after 37.7s.
[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] ------------------------------------------------------------------------
Could you please help on this UnsupportedFeatureException issue?
Comment From: mhalbritter
I can reproduce this. However, building the image without buildpacks and Java 22 works fine. It's Java 22 + buildpacks, which is causing this issue. Please report this issue against https://github.com/paketo-buildpacks/native-image, thanks!
Comment From: KafkaProServerless
https://github.com/paketo-buildpacks/native-image/issues/321
Comment From: KafkaProServerless
Thank you