## 前提
- 使用 GraalVM JDK 21(含 `native-image` 工具)。
- 项目尽量减少运行时反射与动态类加载;必要时提供配置文件。
## 最小示例与打包
# Windows 示例路径
native-image -jar target\app.jar \
-H:Name=app \
--no-fallback \
-H:+ReportExceptionStackTraces
输出:`app.exe`
## 反射与资源配置
- 当使用框架或反射访问类与字段时,需要提供配置文件(`reflect-config.json`、`resource-config.json` 等)。
示例(反射配置片段):
[
{"name":"com.example.Model","allDeclaredFields":true,"allDeclaredConstructors":true}
]
使用:
native-image -jar target\app.jar -H:Name=app --no-fallback \
-H:ReflectionConfigurationFiles=reflect-config.json
## 常用优化参数
- `--no-fallback`:禁用回退到 JVM(更小更快,但需确保配置完整)。
- `--initialize-at-build-time`:在构建期初始化静态状态,减少运行时开销(审慎使用)。
- `-O`:优化级别(Graal 依据场景选择,默认即可)。
## 验证与对比
- 冷启动时间:测量 `app.exe` 与 `java -jar app.jar` 的启动延迟。
- 体积:记录可执行文件大小与 JAR + JRE 方案的镜像体积。
- 功能完整性:覆盖关键路径;若报反射缺失,完善配置后重试。
## 框架提示
- Spring Boot 原生需 AOT 支持(Spring Native/Boot 3 AOT);优先使用官方指南生成配置。
- Quarkus/Micronaut 对原生打包支持更完善;可参考其插件与脚本。
## 注意事项
- 关键词与主题一致:GraalVM、native-image、Java 21 与启动/体积优化。
- 分类匹配:`软件/编程语言/Java`。
- 描述准确:强调原生打包的参数与验证方法。
- 技术参数已验证:`native-image` 常用参数与反射配置方式为官方支持;Windows 生成 `exe` 可直接运行。

发表评论 取消回复