此版本仍在开发中,尚未视为稳定版。如需最新稳定版本,请使用 Spring Boot 4.0.4spring-doc.cadn.net.cn

预先处理(Ahead-of-Time Processing)

Spring AOT 是一个在构建时分析您的应用程序并生成其优化版本的过程。 这是在原生镜像(native image)中运行 Spring ApplicationContext 的必要步骤。spring-doc.cadn.net.cn

有关 Spring Boot 中 GraalVM 原生镜像支持的概述,请参阅参考文档

Spring Boot Maven 插件提供了可用于对应用程序代码和测试代码执行 AOT(提前编译)处理的目标。spring-doc.cadn.net.cn

处理应用程序

要配置您的应用程序以使用此功能,请添加一个 process-aot 目标的执行,如下例所示:spring-doc.cadn.net.cn

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

由于BeanFactory在构建时已完全准备就绪,因此条件也会在此时进行评估。 这与常规的 Spring Boot 应用程序在运行时的行为存在一个重要区别。 例如,如果您希望启用或禁用某些功能,则需要配置构建时所使用的环境来实现这一点。 出于这一原因,process-aot目标与run goal共享许多属性。spring-doc.cadn.net.cn

使用原生配置(Native Profile)

如果你将 spring-boot-starter-parent 用作项目的 parent,可以使用 native 配置文件来简化构建原生镜像所需的步骤。spring-doc.cadn.net.cn

native 配置文件会配置以下内容:spring-doc.cadn.net.cn

使用原始类路径意味着原生镜像(native image)无法识别生成的 MANIFEST.MF 文件。 如果你需要在原生镜像中读取清单文件的内容(例如获取应用程序的实现版本),请配置 classesDirectory 选项以使用常规的 JAR 文件。spring-doc.cadn.net.cn

为了充分利用 native 配置文件,代表应用程序的模块应定义两个插件,如下例所示:spring-doc.cadn.net.cn

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

要在多模块项目中使用 native 配置文件,您可以对 native 配置文件进行自定义,使其调用您偏好的技术。spring-doc.cadn.net.cn

要在 package 阶段绑定云原生构建包(Cloud Native Buildpacks),请将以下内容添加到您的多模块项目的根 POM 中:spring-doc.cadn.net.cn

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

下面的示例对 Native Build Tools 执行了相同的操作:spring-doc.cadn.net.cn

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

一旦完成上述配置,您就可以构建多模块项目,并在相应的子模块中生成原生镜像,如下例所示:spring-doc.cadn.net.cn

$ mvn package -Pnative
“相关”子模块是指代表 Spring Boot 应用程序的模块。 此类模块必须按照上述说明定义 Native Build Tools 和 Spring Boot 插件。

spring-boot:process-aot

org.springframework.boot:spring-boot-maven-plugin:4.0.5-SNAPSHOTspring-doc.cadn.net.cn

在应用程序上调用 AOT 引擎。spring-doc.cadn.net.cn

必需参数

姓名 类型 默认

类目录spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.outputDirectory}spring-doc.cadn.net.cn

生成的类spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.directory}/spring-aot/main/classesspring-doc.cadn.net.cn

生成的资源spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.directory}/spring-aot/main/resourcesspring-doc.cadn.net.cn

生成的源代码spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.directory}/spring-aot/main/sourcesspring-doc.cadn.net.cn

参数详情

arguments

应纳入AOT处理考虑的应用程序参数。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

argumentsspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.String[]spring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

classesDirectory

包含应打包到归档文件中的类和资源文件的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

classesDirectoryspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.outputDirectory}spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

compilerArguments

应提供给 AOT 编译过程的参数。在命令行中,请确保将多个值用引号括起来。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

compilerArgumentsspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.Stringspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.aot.compilerArgumentsspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

excludeGroupIds

要排除的 groupId 名称的逗号分隔列表(精确匹配)。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

excludeGroupIdsspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.Stringspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.excludeGroupIdsspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

1.1.0spring-doc.cadn.net.cn

excludes

要排除的构件定义集合。Exclude 元素定义了必需的 groupIdartifactId 组件,以及一个可选的 classifier 组件。当将其配置为属性时,值应以逗号分隔,各组件之间用冒号分隔: groupId:artifactId,groupId:artifactId:classifierspring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

excludesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.util.Listspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.excludesspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

1.1.0spring-doc.cadn.net.cn

generatedClasses

包含生成类的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

generatedClassesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.directory}/spring-aot/main/classesspring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

generatedResources

包含生成资源的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

generatedResourcesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.directory}/spring-aot/main/resourcesspring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

generatedSources

包含生成源代码的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

generatedSourcesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.directory}/spring-aot/main/sourcesspring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

includes

要包含的构件定义集合。Include 元素定义了必需的 groupIdartifactId 组件,以及一个可选的 classifier 组件。当配置为属性时,值应以逗号分隔,各组件之间用冒号分隔: groupId:artifactId,groupId:artifactId:classifierspring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

includesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.util.Listspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.includesspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

1.2.0spring-doc.cadn.net.cn

jvmArguments

应与 AOT 进程关联的 JVM 参数。在命令行中,请确保将多个值用引号括起来。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

jvmArgumentsspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.Stringspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.aot.jvmArgumentsspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

mainClass

用作 AOT(提前编译)过程源的主类名称。如果未指定,则将使用找到的第一个包含 'main' 方法的已编译类。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

mainClassspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.Stringspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.aot.main-classspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

profiles

用于AOT处理时需考虑的Spring配置文件。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

profilesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.String[]spring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

systemPropertyVariables

要传递给 AOT 进程的 JVM 系统属性列表。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

systemPropertyVariablesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.util.Mapspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

处理测试

AOT 引擎可应用于使用 Spring 测试上下文框架的 JUnit 5 测试。 这些测试由 AOT 引擎处理,然后在原生镜像中执行。spring-doc.cadn.net.cn

当使用 maven.test.skip 属性跳过常规测试时,这些测试不会被执行。

生产代码一样,spring-boot-starter-parent 定义了一个 nativeTest 配置文件,可用于简化在原生镜像中执行测试所需的步骤。spring-doc.cadn.net.cn

nativeTest 配置文件会配置以下内容:spring-doc.cadn.net.cn

为了充分利用 nativeTest 配置文件,代表应用程序的模块应定义两个插件,如下例所示:spring-doc.cadn.net.cn

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

一旦上述配置在每个需要此功能的模块中完成,你就可以构建你的多模块项目,并在相关子模块中以原生镜像(native image)方式执行测试,如下例所示:spring-doc.cadn.net.cn

$ mvn test -PnativeTest
与应用程序的AOT处理一样,BeanFactory在构建时已完全准备就绪。

spring-boot:process-test-aot

org.springframework.boot:spring-boot-maven-plugin:4.0.5-SNAPSHOTspring-doc.cadn.net.cn

在测试中调用 AOT 引擎。spring-doc.cadn.net.cn

必需参数

姓名 类型 默认

类目录spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.outputDirectory}spring-doc.cadn.net.cn

生成的类spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.directory}/spring-aot/main/classesspring-doc.cadn.net.cn

生成的资源spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.directory}/spring-aot/test/resourcesspring-doc.cadn.net.cn

生成的源代码spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.directory}/spring-aot/test/sourcesspring-doc.cadn.net.cn

生成的测试类spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.directory}/spring-aot/test/classesspring-doc.cadn.net.cn

testClassesDirectoryspring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

${project.build.testOutputDirectory}spring-doc.cadn.net.cn

参数详情

classesDirectory

包含用于运行测试的类和资源文件的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

classesDirectoryspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.outputDirectory}spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

compilerArguments

应提供给 AOT 编译过程的参数。在命令行中,请确保将多个值用引号括起来。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

compilerArgumentsspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.Stringspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.aot.compilerArgumentsspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

excludeGroupIds

要排除的 groupId 名称的逗号分隔列表(精确匹配)。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

excludeGroupIdsspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.Stringspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.excludeGroupIdsspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

1.1.0spring-doc.cadn.net.cn

excludes

要排除的构件定义集合。Exclude 元素定义了必需的 groupIdartifactId 组件,以及一个可选的 classifier 组件。当将其配置为属性时,值应以逗号分隔,各组件之间用冒号分隔: groupId:artifactId,groupId:artifactId:classifierspring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

excludesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.util.Listspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.excludesspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

1.1.0spring-doc.cadn.net.cn

generatedClasses

包含生成的测试类的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

generatedClassesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.directory}/spring-aot/main/classesspring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

generatedResources

包含生成的测试资源的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

generatedResourcesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.directory}/spring-aot/test/resourcesspring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

generatedSources

包含生成源代码的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

generatedSourcesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.directory}/spring-aot/test/sourcesspring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

generatedTestClasses

包含生成的测试类的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

generatedTestClassesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.directory}/spring-aot/test/classesspring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

includes

要包含的构件定义集合。Include 元素定义了必需的 groupIdartifactId 组件,以及一个可选的 classifier 组件。当配置为属性时,值应以逗号分隔,各组件之间用冒号分隔: groupId:artifactId,groupId:artifactId:classifierspring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

includesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.util.Listspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.includesspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

1.2.0spring-doc.cadn.net.cn

jvmArguments

应与 AOT 进程关联的 JVM 参数。在命令行中,请确保将多个值用引号括起来。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

jvmArgumentsspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.lang.Stringspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

spring-boot.aot.jvmArgumentsspring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

systemPropertyVariables

要传递给 AOT 进程的 JVM 系统属性列表。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

systemPropertyVariablesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.util.Mapspring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn

testClassesDirectory

包含应打包到归档文件中的类和资源文件的目录。spring-doc.cadn.net.cn

姓名spring-doc.cadn.net.cn

testClassesDirectoryspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

java.io.Filespring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

${project.build.testOutputDirectory}spring-doc.cadn.net.cn

用户属性spring-doc.cadn.net.cn

Sincespring-doc.cadn.net.cn