Solon v4.0.6

aot 项目编译示范

</> markdown
2026年8月12日 上午11:35:38

v3.7.2 后 solon aot 可以像普通构造一样使用(支持任意版本的 jdk)


Solon AOT(Ahead-of-Time Processing)编译,只对主模块(有 main 函数)有效,其它模块要用常规构建方式。

主模块 AOT 时,会通过扩展加载机制合并各模块生成的 reflect-config.json / solon-resource.json(原理见 《native 了解 Aot 技术》)。

1、单模块项目编译

单模块项目(即一个主模块)。AOT 编译比较简单。下面以 solon-native-example 在 IDEA 下为例。

  • 可视化操作:勾选 aot 构建配置,(主模块)执行 mvn package 命令

ps: solon-native-example 的类比较少,使用 aot 编译打包后:启动时间没有提升(macbook pro 2020 款)

  • 或者使用命令
mvn clean -DskipTests=true -P aot package

2、多模块项目编译

多模块项目(一个主模块,加其它多个模块)的编译,略有不同。下面以 snowy-solon 在 IDEA 下为例。

  • 可视化操作:
第一步
所有模块先本地 mvn install
第二步
主模块 mvn -P aot package
不要勾选 aot,(所有模块)执行 mvn install 命令 勾选 aot,(主模块)执行 mvn package 命令

为什么第一步要先 install?因为各子模块也需要先各自生成 AOT 元数据(注册自己的 bean/资源),主模块构建时才能合并加载。只 install 不勾选 aot 也可以(子模块用常规构建即可,元数据由主模块收集)。

ps: snowy-solon 类可能比较多,使用 aot 编译打包后:启动时间从 3.1s 提升到 2.6s(macbook pro 2020 款)

3、构建产物验证

打包后检查主模块 target/classes/META-INF/native-image/<应用包路径>/ 下是否生成各配置文件,以及 target/generated-sources/ 下是否有 Xxx$$SolonAotProxy.java(见 《native 自动化处理清单》)。