提前处理
Spring AOT 是一个在构建时分析你的应用并生成优化版本的过程。运行 Spring 是必行步骤应用上下文以本地形象。
| 有关 Spring Boot 中 GraalVM 原生映像支持的概述,请查看参考文档。 |
Spring Boot Maven 插件提供了可用于对应用和测试代码进行 AOT 处理的目标。
处理应用
要配置你的应用使用此功能,请添加一个执行进程进攻的进攻目标,如下例所示:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>process-aot</id>
<goals>
<goal>process-aot</goal>
</goals>
</execution>
</executions>
</plugin>
作为豆子工厂在构建时完全准备好,条件也会被评估。这与普通 Spring Boot 应用程序在运行时所做的作有重要区别。例如,如果你想对某些功能选择加入或退出,你需要配置构建时使用的环境来实现这一点。 这进程进攻的进攻因此,Goal与跑目标共享许多属性。
使用 Native 配置文件
如果你使用,Spring靴启动父作为父母你的项目,一个本地配置文件可以用来简化构建原生映像所需的步骤。
这本地配置文件配置如下内容:
-
执行
进程进攻的进攻当 Spring Boot Maven 插件应用于项目时。 -
合适的设置,使构建映像生成原生映像。
-
Native Build Tools Maven插件的合理默认设置,特别是:
-
确保插件使用原始类路径,而不是主 jar 文件,因为它不理解我们重新打包的 jar 格式。
-
验证是否有合适的 GraalVM 版本可用。
-
下载第三方可达性元数据。
-
|
使用原始类路径意味着本地图像无法知道生成的 |
要从中受益本地配置文件,一个表示应用程序的模块应定义两个插件,如下示例所示:
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
使用本地通过多模块项目,你可以创建自定义的本地用轮廓来呼应你喜欢的技巧。
在包阶段,将以下内容添加到你多模块项目的根POM中:
<profile>
<id>native</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>build-image</id>
<goals>
<goal>build-image-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
下面的示例对原生构建工具做了同样的作:
<profile>
<id>native</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<executions>
<execution>
<id>build-image</id>
<goals>
<goal>compile-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
上述步骤就位后,你可以构建多模块项目,并在相关子模块中生成原生图像,如下示例所示:
$ mvn package -Pnative
| “相关”子模块是指代表Spring Boot应用的模块。 该模块必须定义如上所述的原生构建工具和 Spring Boot 插件。 |
Spring Boot:process-aot
org.springframework.boot:spring-boot-maven-plugin:4.0.0
在应用中调用进攻引擎。
所需参数
| 名称 | 类型 | 默认值 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
参数细节
classes目录
包含应打包到归档中的类和资源文件的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
编译器参数
这些参数应当提供给AOT编译进程。在命令行中,确保引号之间包裹多个值。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
exclusionGroupIds
逗号分隔的groupid名称列表,排除(完全匹配)。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
|
排除
排除的工件定义集合。这排除元素定义了强制性组ID和artifactId(遗物ID组件和可选分类元件。当配置为属性时,值应以逗号分隔,并用冒号分隔:groupId:artifactId,groupId:artifactId:分类器
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
|
生成资源
包含生成资源的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
生成的来源
包含生成源的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
包括
包含工件定义的集合。这包括元素定义了强制性组ID和artifactId(遗物ID组件和可选分类元件。当配置为属性时,值应以逗号分隔,并用冒号分隔:groupId:artifactId,groupId:artifactId:分类器
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
|
jvm论证
JVM论证应该与AOT流程相关联。在命令行中,确保引号之间包裹多个值。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
处理测试
AOT引擎可以应用于使用Spring测试上下文框架的JUnit 5测试。 这些测试由AOT引擎处理,然后在原生镜像中执行。
就像生产代码一样,Spring靴启动父定义了nativeTest该配置文件可用于简化在原生镜像中执行测试所需的步骤。
这nativeTest配置文件配置如下内容:
-
执行
过程测试 AOT当 Spring Boot Maven 插件应用于项目时。 -
执行
测试当 Native Build Tools Maven 插件应用到项目时。 执行定义了合理的默认情况,特别是:-
确保插件使用原始类路径,而不是主 jar 文件,因为它不理解我们重新打包的 jar 格式。
-
验证是否有合适的 GraalVM 版本可用。
-
下载第三方可达性元数据。
-
要从中受益nativeTest配置文件,一个表示应用程序的模块应定义两个插件,如下示例所示:
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
上述内容为每个需要此功能的模块都已就位后,你可以构建多模块项目,并在相关子模块的本地镜像中执行测试,如下示例所示:
$ mvn test -PnativeTest
与应用程序AOT处理类似,豆子工厂在构建时已完全准备好。 |
spring-boot:process-test-aot
org.springframework.boot:spring-boot-maven-plugin:4.0.0
测试时调用进攻的引擎。
所需参数
| 名称 | 类型 | 默认值 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
参数细节
classes目录
包含运行测试的类和资源文件的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
编译器参数
这些参数应当提供给AOT编译进程。在命令行中,确保引号之间包裹多个值。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
exclusionGroupIds
逗号分隔的groupid名称列表,排除(完全匹配)。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
|
排除
排除的工件定义集合。这排除元素定义了强制性组ID和artifactId(遗物ID组件和可选分类元件。当配置为属性时,值应以逗号分隔,并用冒号分隔:groupId:artifactId,groupId:artifactId:分类器
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
|
生成类
包含生成测试类的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
生成资源
包含生成测试资源的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
生成的来源
包含生成源的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
生成的测试类
包含生成测试类的目录。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
包括
包含工件定义的集合。这包括元素定义了强制性组ID和artifactId(遗物ID组件和可选分类元件。当配置为属性时,值应以逗号分隔,并用冒号分隔:groupId:artifactId,groupId:artifactId:分类器
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |
|
jvm论证
JVM论证应该与AOT流程相关联。在命令行中,确保引号之间包裹多个值。
名称 |
|
|---|---|
类型 |
|
默认值 |
|
用户属性 |
|
因为 |