如何在Spring Native Gradle项目中运行GraalVM native image tracing agent
Spring Native Gradle 项目运行 GraalVM Tracing Agent 实操指南
方案一:官方插件内置集成(推荐)
这是和Spring生态适配度最高的方式,不需要手动查找agent路径、手动维护输出目录:
- 提前确认项目完成基础配置:
- 已在
build.gradle中引入org.springframework.boot插件、org.graalvm.buildtools.native官方原生构建插件 - 本地
JAVA_HOME已指向可用的GraalVM安装路径,且已安装native-image组件
- 已在
- 直接在项目根目录执行启动命令,内置的插件会自动注入tracing agent参数:
gradle bootRun -Pagent - 应用启动后,完整触发所有会涉及动态类加载、反射调用、资源访问、动态代理生成的业务流程(比如逐一点击接口调用、触发定时任务、加载配置文件)
- 所有触发操作完成后,正常终止应用进程
- 收集到的元数据会自动输出到
build/native/agent-output/main路径,后续构建native镜像时,插件会自动加载这些配置,无需手动拷贝
方案二:手动配置兜底方案(适配自定义启动流程)
如果你的项目不是用默认的bootRun任务启动,而是自定义了JavaExec类型的启动任务,可按以下步骤手动挂载agent:
- 定位本地GraalVM目录下的agent组件,路径通常为
$JAVA_HOME/lib/svm/agent.jar - 在自定义启动任务的JVM参数列表中,添加agent挂载配置:
-agentlib:native-image-agent=config-output-dir=build/native/agent-output/main - 执行自定义启动任务,完成业务流程触发、元数据收集的全流程即可
关键注意事项
- 首次收集配置时使用
config-output-dir参数,重复收集新场景时要替换为config-merge-dir参数,避免覆盖之前已收集的有效配置 - 元数据收集完成后,可将
build/native/agent-output/main下的所有配置文件,拷贝到项目源码路径src/main/resources/META-INF/native-image下固化版本,后续构建镜像时无需重复执行收集流程 - 收集过程中要尽可能覆盖全量业务分支,漏收集的动态逻辑会导致native镜像在运行时抛出类加载失败、方法找不到等异常
内容的提问来源于stack exchange,提问作者Magnus Larsson
相关产品推荐
相关产品推荐

