Hi everyone,
While I was working on our monthly spring boot version upgrade process, I hit an error which is saying "New Method or Constructor found as reachable after static analysis". When I downgrade the boot version to 3.0.5 everything starts to work properly again. This might be related with graalvm itself or spring cloud stream too. I just could not be sure about it. When I track the class, I found out that it's coming from one of the spring-cloud-stream transitive dependencies.
Please redirect me if this is not the right place. Cheers.
Working Set:
<spring-cloud.version>2022.0.1</spring-cloud.version>
<spring.boot.version>3.0.5</spring.boot.version>
Failing Set:
<spring-cloud.version>2022.0.2</spring-cloud.version> -> also fails with 2022.0.1 so that might not be related with cloud stream?
<spring.boot.version>3.0.6</spring.boot.version>
╰─ java -version ─╯
openjdk version "17.0.6" 2023-01-17
OpenJDK Runtime Environment GraalVM CE 22.3.1 (build 17.0.6+10-jvmci-22.3-b13)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.1 (build 17.0.6+10-jvmci-22.3-b13, mixed mode, sharing)
Error message:
[2/7] Performing analysis... [*************] (237.8s @ 3.27GB)
38,771 (91.67%) of 42,295 classes reachable
68,324 (70.54%) of 96,863 fields reachable
179,078 (62.85%) of 284,946 methods reachable
2,569 classes, 1,516 fields, and 20,809 methods registered for reflection
68 classes, 75 fields, and 56 methods registered for JNI access
5 native libraries: -framework CoreServices, -framework Foundation, dl, pthread, z
[3/7] Building universe... (26.3s @ 6.38GB)
[4/7] Parsing methods... [****] (20.9s @ 2.98GB)
[5/7] Inlining methods... [***] (7.2s @ 4.67GB)
[6/7] Compiling methods... [********] (67.3s @ 4.26GB)
[7/7] Creating image...
(0.0s @ 3.31GB)
Fatal error: com.oracle.svm.core.util.VMError$HostedError: com.oracle.svm.core.util.VMError$HostedError: New Method or Constructor found as reachable after static analysis: public java.lang.Object org.springframework.integration.config.ConverterRegistrar$IntegrationConverterRegistration.converter()
at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.shouldNotReachHere(VMError.java:72)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:696)
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: com.oracle.svm.core.util.VMError$HostedError: New Method or Constructor found as reachable after static analysis: public java.lang.Object org.springframework.integration.config.ConverterRegistrar$IntegrationConverterRegistration.converter()
at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.shouldNotReachHere(VMError.java:68)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.reflect.ReflectionFeature.getOrCreateAccessor(ReflectionFeature.java:121)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.target.ExecutableAccessorComputer.transform(ExecutableAccessorComputer.java:43)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.substitute.ComputedValueField.computeValue(ComputedValueField.java:343)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.substitute.ComputedValueField.readValue(ComputedValueField.java:313)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.meta.ReadableJavaField.readFieldValue(ReadableJavaField.java:38)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ameta.AnalysisConstantReflectionProvider.readValue(AnalysisConstantReflectionProvider.java:97)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.meta.HostedField.readValue(HostedField.java:161)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.image.NativeImageHeap.addObjectToImageHeap(NativeImageHeap.java:439)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.image.NativeImageHeap.addObject(NativeImageHeap.java:295)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.image.NativeImageHeap.processAddObjectWorklist(NativeImageHeap.java:598)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.image.NativeImageHeap.addTrailingObjects(NativeImageHeap.java:198)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:678)
... 4 more
Comment From: snicoll
Likely a duplicate of #30407
Comment From: sdeleuze
I can indeed reproduce just by adding Spring Cloud Stream dependency.
Comment From: sdeleuze
This is a duplicate of https://github.com/spring-projects/spring-framework/issues/30383.