---
title: "aot 项目编译示范"
---

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 命令

<img src="/img/1999207f296e43e1965252b0327dca41.png" width="300" />


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

* 或者使用命令

```
mvn clean -DskipTests=true -P aot package
```

### 2、多模块项目编译

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


* 可视化操作：

<table>
  <tr>
       <th>第一步<br/>所有模块先本地 mvn install</th>
       <th>第二步<br/>主模块 mvn -P aot package</th>
  </tr>
  <tr>
        <td>不要勾选 aot，（所有模块）执行 mvn install 命令</td>
        <td>勾选 aot，（主模块）执行 mvn package 命令</td>
   </tr>
  <tr>
      <td><img src="/img/e26ed150a93c493ba6decf5604a565d1.png" width="300" /></td>
      <td><img src="/img/8f6b072b126d44fdaa2b1cf78fbeac31.png" width="300" /></td>
  </tr>
</table>


> 为什么第一步要先 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 自动化处理清单》）。





