启用 Java AOT 编译打包 Solon 项目(Solon AOT)

笔记哥 / 05-28 / 45点赞 / 0评论 / 917阅读
### 1、Java 的 AOT(Ahead-Of-Time) AOT(Ahead-Of-Time)编译是与 JIT(Just-In-Time)相对的一种编译方式。 在 AOT 模式下,Java 字节码(Bytecode)在程序运行之前,就被提前编译为目标平台的本地机器代码。 ### 2、Solon AOT Solon AOT 是 Java AOT 的增强模式。可借助容器在运行时收集相关的类信息,然后在打包时为有 “动态代理需求的类” 生成对应具体类(类名风格,Xxx$$SolonAotProxy.class)。 使用条件要求: - 使用 solon-maven-plugin 打包方式 - 要求 java 17+ (java 17 后才支持 AOT) 大概的构建过程(过程为自动): ```csharp 编译(生成 .class 文件) -> Solon AOT(运行->收集->生成补充的 .class 文件) -> 打包 ``` ### 3、使用 solon-parent ```xml org.noear solon-parent 最新版本 ``` 以 maven 打包为例,启用配置文件 native(会自动启用一批配置),然后使用 maven 的 pakage 命令即可。 补充说明: - 使用 maven:pakage 打包,会使用 AOT 编译,生成常规的 jar 包 - 使用 graalvm:native:build 打包,会使用 AOT 编译,且生成 graalvm image (具体参考专题资料) ![](https://cdn.res.knowhub.vip/c/2505/28/df6ae20b.png?Gz8AAGRwXmyTWqP%2fUCkAL%2f9%2fPgPht8deYO1oH9gvwzozDEITKmxURGOmvVLIck4TZcoyRTQGZ2U%3d) ### 4、如果没有使用 solon-parent 以 maven 打包为例,在 pom.xml 手动添加一个 native profile(名字便取,叫 AOT 也挺好的)。之后,参考上面的说明。 ```xml native org.noear solon-maven-plugin ${solon.version} process-aot process-aot org.noear solon-aot ``` 配置内容说明: - `org.noear:solon-aot` 依赖包,封装了 aot 的关键工作:收集类信息,生成补充类 - `solon-maven-plugin:process-aot` 则是关联编译行为,在编译后,再进行 Solon AOT 二次编译