Solon AOT & Native 开发
完整的 Solon Native 编译会经过三个阶段(就是三次自动编译),每个阶段都可直接使用:
| 阶段 | 描述 | Maven 编译参考 | JDK 支持 |
|---|---|---|---|
| 1 | Java 编译 | mvn clean -DskipTests=true package | jdk8+ |
| 2 | Solon AOT 编译 | mvn clean -DskipTests=true -P aot package | jdk8+ |
mvn clean -DskipTests=true -P native package | graalvm jdk17+ | ||
| 3 | Solon Native 编译 | mvn clean -DskipTests=true -P native native:compile | graalvm jdk17+ |
Solon AOT(Ahead-of-Time Processing) 编译:
执行 solon aot 编译时,前一阶段会自动执行。可以使用 -P aot(v3.7.2 后支持) 或 -P native 构建配置。
原理:在 mvn package 之后(自动),执行 process-aot 处理。然后:
- 生成 solon 代理类代码文件(运行时,不再需要 ASM 介入)
- 生成 solon 类索引文件(项目类很多时,可以加速启动)
- 生成 graalvm 相关各种索引文件
提醒:-P aot 构建配置,是在native 基础上移除 graalvm.buildtools (限制了 jdk)形成的,可支持 “任意” jdk 版本。即在 v3.7.2 后,solon aot 可以像普通构建一样,无限制使用。
Solon Native 编译
执行 solon native 编译时,前两阶段会自动执行。
原理:在 Solon Aot 之后(自动的),使用 org.graalvm.buildtools:native-maven-plugin (需要 graalvm jdk17+ 支持)编译出二进制可执行文件。
- 启动非常快
- 运行时内存很少(介于 java jvm 和 go 之间)
- 程序自己就可以运行,不需要 jre
- 会有些麻烦的要求
项目如何编译?看左侧目录