You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.0.6升级后NativeTest出现GraalVM可达性分析错误求助

问题:Spring Boot 3.0.6原生编译nativeTest报错:静态分析后发现新的可达方法

使用Spring Boot、Gradlew 8.0.2、GraalVM CE 22.3.2进行原生编译开发项目,Spring Boot 3.0.5版本时运行正常,升级至3.0.6后执行nativeTest时触发如下错误;移除内部Osm记录后,scope字段出现类似错误。

错误日志

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 it.xxxxxx.reversebox.AppProperties$Osm it.xxxxxx.reversebox.AppProperties.osm()
    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 it.xxxxxx.reversebox.AppProperties$Osm it.xxxxxx.reversebox.AppProperties.osm()
    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
                   36.6s (10.8% of total time) in 56 GCs | Peak RSS: 3.06GB | CPU load: 3.49

AppProperties代码定义

@ConfigurationProperties("app.xxxxx")
public record AppProperties(String baseUrl, String authUrl, String waybillUrl, String pickupUrl, String clientId,String secretId, String scope, Osm osm) {
  public record Osm(String baseUrl, String url, String xApiKey) {
    }
}

解决思路

  • 检查Spring Boot 3.0.6配置属性原生支持变更:Spring Boot 3.0.6可能调整了@ConfigurationProperties对record类型的原生镜像处理逻辑,查看官方release notes确认相关变更点。
  • 手动添加反射元数据配置:创建src/main/resources/META-INF/native-image/reflect-config.json文件,显式声明类的反射访问权限:
[
  {
    "name": "it.xxxxxx.reversebox.AppProperties",
    "allPublicMethods": true
  },
  {
    "name": "it.xxxxxx.reversebox.AppProperties$Osm",
    "allPublicMethods": true
  }
]
  • 升级GraalVM版本:当前使用的GraalVM CE 22.3.2版本较旧,升级到与Spring Boot 3.0.6兼容的版本(如GraalVM CE 23.0.1+),新版本可能修复了静态分析阶段的反射可达性识别问题。
  • 触发Spring Boot自动生成元数据:执行./gradlew processAot命令,让Spring Boot自动生成原生镜像所需的元数据,覆盖手动配置的遗漏项,之后再运行nativeTest。
  • 排查代码中的反射使用:检查项目中是否有通过反射访问AppProperties字段的逻辑,Spring Boot 3.0.6对record的属性访问优化可能导致静态分析未捕获这些路径,需手动标记这些反射调用。

内容的提问来源于stack exchange,提问作者user2210965

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:37:02