graalvm构建jar运行获取可达性元数据resource-config.json

在较新版本的 GraalVM(特别是 GraalVM For JDK 17/21/22+ 以及与之配套的 Native Image Agent)中,输出结构做出了重大优化。

为什么只有这一个文件(resource-config.json)?

以前的 Agent 会分开生成 resource-config.jsonreflect-config.json 等独立文件。而新版 GraalVM 引入了 Reachability Metadata(可达性元数据) 的统一规范。

你看到的 reachability-metadata.json 实际上是一个合体文件(或者是包含多类配置的统一元数据描述)。

  • 打开这个文件,你会发现它内部已经包含了 resourcesreflectionserialization 等不同维度的配置段落。
  • GraalVM 编译器同样能完全识别并正确读取它。
java -agentlib:native-image-agent=config-output-dir=/path/to/your/output -jar target/valuation-engine-runtime.jar

如果想要标准的 resource-config.json

如果你希望生成传统的分离式配置文件(包含独立的 resource-config.json),你只需要在启动命令的 agentlib 参数中加入 experimental-configuration-with-origins 或者是显式指定输出格式。

直接让 Agent 切换回旧版的多文件输出模式

1
java -agentlib:native-image-agent=config-output-dir=/path/to/your/output,format=experimental-modern -jar target/valuation-engine-runtime.jar

注意末尾的 ,format=experimental-modern 或者是直接不指定高级格式,在新版中如果默认生成了单文件,通常可以在该目录下寻找或直接把 reachability-metadata.json 放到对应的位置。