完整的 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）形成的，<mark>可支持 “任意” jdk 版本</mark>。即在 v3.7.2 后，solon aot 可以像普通构建一样，无限制使用。



### Solon Native 编译

执行 solon native 编译时，前两阶段会自动执行。

原理：在 Solon Aot 之后（自动的），使用 `org.graalvm.buildtools:native-maven-plugin` （需要 graalvm jdk17+ 支持）编译出二进制可执行文件。

* 启动非常快
* 运行时内存很少（介于 java jvm 和 go 之间）
* 程序自己就可以运行，不需要 jre
* 会有些麻烦的要求

---

项目如何编译？看左侧目录