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

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)

大概的构建过程(过程为自动):

复制代码
编译(生成 .class 文件) -> Solon AOT(运行->收集->生成补充的 .class 文件) -> 打包

3、使用 solon-parent

xml 复制代码
<parent>
    <groupId>org.noear</groupId>
    <artifactId>solon-parent</artifactId>
    <version>最新版本</version>
</parent>

以 maven 打包为例,启用配置文件 native(会自动启用一批配置),然后使用 maven 的 pakage 命令即可。

补充说明:

  • 使用 maven:pakage 打包,会使用 AOT 编译,生成常规的 jar 包
  • 使用 graalvm:native:build 打包,会使用 AOT 编译,且生成 graalvm image (具体参考专题资料)

4、如果没有使用 solon-parent

以 maven 打包为例,在 pom.xml 手动添加一个 native profile(名字便取,叫 AOT 也挺好的)。之后,参考上面的说明。

xml 复制代码
<profiles>
    <profile>
        <id>native</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.noear</groupId>
                    <artifactId>solon-maven-plugin</artifactId>
                    <version>${solon.version}</version>
                    <executions>
                        <execution>
                            <id>process-aot</id>
                            <goals>
                                <goal>process-aot</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
                <groupId>org.noear</groupId>
                <artifactId>solon-aot</artifactId>
            </dependency>
        </dependencies>
    </profile>
</profiles>

配置内容说明:

  • org.noear:solon-aot 依赖包,封装了 aot 的关键工作:收集类信息,生成补充类
  • solon-maven-plugin:process-aot 则是关联编译行为,在编译后,再进行 Solon AOT 二次编译
相关推荐
Java内核笔记3 分钟前
万字避坑!Spring Boot 3.x 升 4.0 最全升级指南(附 Migration Checklist,建议收藏⭐)
java·后端
cfm_29141 小时前
SpringBoot启动原理
java·spring boot·spring
漫随流水2 小时前
Java——springboot web案例
java·开发语言·spring boot
从此以后自律2 小时前
Java Object 类常用方法全讲解
java·开发语言
念何架构之路2 小时前
Docker 容器状态机 学习
java·学习·docker
你有我备注吗2 小时前
SQL学习之查询
java·sql·学习
xixi09243 小时前
JMeter5.6.3基础使用教程1
java·开发语言
带刺的坐椅3 小时前
用 Solon ReActAgent 落地发票识别与智能报销
java·llm·solon·react-agent
罗超驿3 小时前
15.Java异常处理:从束手无策到从容应对
java·开发语言
Co_Hui3 小时前
Java 基础
java·开发语言