对于最新的稳定版本,请使用 Spring Boot 3.4.0spring-doc.cn

提前处理

Spring AOT 是一个在构建时分析您的应用程序并生成其优化版本的过程。 在本机映像中运行 Spring 是一个强制性步骤。ApplicationContextspring-doc.cn

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

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

加工应用

要将应用程序配置为使用此功能,请为目标添加执行,如以下示例所示:process-aotspring-doc.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>

由于在构建时已做好充分准备,因此还会评估条件。 与常规 Spring Boot 应用程序在运行时执行的操作相比,这具有重要区别。 例如,如果要选择使用或选择退出某些功能,则需要配置在构建时使用的环境才能执行此操作。 因此,该目标与 run 目标共享许多属性。BeanFactoryprocess-aotspring-doc.cn

使用 Native Profile

如果您使用 作为项目的 ,则配置文件可用于简化构建本机映像所需的步骤。spring-boot-starter-parentparentnativespring-doc.cn

该配置文件配置以下内容:nativespring-doc.cn

使用原始 Classpath 意味着本机映像不知道生成的 . 如果您需要在本机映像中读取清单的内容,例如要获取应用程序的实现版本,请配置选项以使用常规 jar。MANIFESTclassesDirectoryspring-doc.cn

要从配置文件中受益,表示应用程序的模块应定义两个插件,如以下示例所示:nativespring-doc.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>

单个项目可以使用 Cloud Native BuildpacksNative Image Build Tools 在命令行上触发本机映像的生成。spring-doc.cn

要将配置文件与多模块项目一起使用,您可以创建配置文件的自定义,以便它调用您的首选技术。nativenativespring-doc.cn

要在此阶段绑定 Cloud Native Buildpacks,请将以下内容添加到多模块项目的根 POM 中:packagespring-doc.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.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.cn

$ mvn package -Pnative
“相关”子模块是表示 Spring Boot 应用程序的模块。 这样的模块必须如上所述定义 Native Build Tools 和 Spring Boot 插件。

spring-boot:process-aot

org.springframework.boot:spring-boot-maven-plugin:3.3.6spring-doc.cn

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

必需参数

名字 类型 违约

classes目录spring-doc.cn

Filespring-doc.cn

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

generatedClasses 类spring-doc.cn

Filespring-doc.cn

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

generatedResourcesspring-doc.cn

Filespring-doc.cn

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

generatedSources 的spring-doc.cn

Filespring-doc.cn

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

参数详情

arguments

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

名字spring-doc.cn

argumentsspring-doc.cn

类型spring-doc.cn

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

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

classesDirectory

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

名字spring-doc.cn

classesDirectoryspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

compilerArguments

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

名字spring-doc.cn

compilerArgumentsspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.aot.compilerArgumentsspring-doc.cn

因为spring-doc.cn

excludeGroupIds

要排除的 groupId 名称的逗号分隔列表(完全匹配)。spring-doc.cn

名字spring-doc.cn

excludeGroupIdsspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.excludeGroupIdsspring-doc.cn

因为spring-doc.cn

1.1.0spring-doc.cn

excludes

要排除的项目定义的集合。该元素定义 mandatory 和 components 以及 optional component。当配置为属性时,值应使用冒号分隔的组件进行逗号分隔:ExcludegroupIdartifactIdclassifiergroupId:artifactId,groupId:artifactId:classifierspring-doc.cn

名字spring-doc.cn

excludesspring-doc.cn

类型spring-doc.cn

java.util.Listspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.excludesspring-doc.cn

因为spring-doc.cn

1.1.0spring-doc.cn

generatedClasses

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

名字spring-doc.cn

generatedClassesspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

generatedResources

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

名字spring-doc.cn

generatedResourcesspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

generatedSources

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

名字spring-doc.cn

generatedSourcesspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

includes

要包含的项目定义的集合。该元素定义 mandatory 和 components 以及 optional component。当配置为属性时,值应使用冒号分隔的组件进行逗号分隔:IncludegroupIdartifactIdclassifiergroupId:artifactId,groupId:artifactId:classifierspring-doc.cn

名字spring-doc.cn

includesspring-doc.cn

类型spring-doc.cn

java.util.Listspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.includesspring-doc.cn

因为spring-doc.cn

1.2.0spring-doc.cn

jvmArguments

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

名字spring-doc.cn

jvmArgumentsspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.aot.jvmArgumentsspring-doc.cn

因为spring-doc.cn

mainClass

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

名字spring-doc.cn

mainClassspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

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

因为spring-doc.cn

profiles

AOT 处理时要考虑的 Spring 配置文件。spring-doc.cn

名字spring-doc.cn

profilesspring-doc.cn

类型spring-doc.cn

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

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

skip

跳过执行。spring-doc.cn

名字spring-doc.cn

skipspring-doc.cn

类型spring-doc.cn

booleanspring-doc.cn

默认值spring-doc.cn

falsespring-doc.cn

用户属性spring-doc.cn

spring-boot.aot.skipspring-doc.cn

因为spring-doc.cn

systemPropertyVariables

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

名字spring-doc.cn

systemPropertyVariablesspring-doc.cn

类型spring-doc.cn

java.util.Mapspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

加工测试

AOT 引擎可以应用于使用 Spring 的 Test Context Framework 的 JUnit 5 测试。 AOT 引擎会处理合适的测试,以生成代码。ApplicationContextInitializerspring-doc.cn

要将应用程序配置为使用此功能,请为目标添加执行,如以下示例所示:process-test-aotspring-doc.cn

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<executions>
		<execution>
			<id>process-test-aot</id>
			<goals>
				<goal>process-test-aot</goal>
			</goals>
		</execution>
	</executions>
</plugin>
如果您使用的是 ,则在启用配置文件时会自动配置此执行。spring-boot-starter-parentnativeTest

与应用程序 AOT 处理一样,它在构建时进行了充分准备。BeanFactoryspring-doc.cn

spring-boot:process-test-aot

org.springframework.boot:spring-boot-maven-plugin:3.3.6spring-doc.cn

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

必需参数

名字 类型 违约

classes目录spring-doc.cn

Filespring-doc.cn

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

generatedClasses 类spring-doc.cn

Filespring-doc.cn

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

generatedResourcesspring-doc.cn

Filespring-doc.cn

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

generatedSources 的spring-doc.cn

Filespring-doc.cn

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

generatedTest类spring-doc.cn

Filespring-doc.cn

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

testClasses目录spring-doc.cn

Filespring-doc.cn

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

参数详情

classesDirectory

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

名字spring-doc.cn

classesDirectoryspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

compilerArguments

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

名字spring-doc.cn

compilerArgumentsspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.aot.compilerArgumentsspring-doc.cn

因为spring-doc.cn

excludeGroupIds

要排除的 groupId 名称的逗号分隔列表(完全匹配)。spring-doc.cn

名字spring-doc.cn

excludeGroupIdsspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.excludeGroupIdsspring-doc.cn

因为spring-doc.cn

1.1.0spring-doc.cn

excludes

要排除的项目定义的集合。该元素定义 mandatory 和 components 以及 optional component。当配置为属性时,值应使用冒号分隔的组件进行逗号分隔:ExcludegroupIdartifactIdclassifiergroupId:artifactId,groupId:artifactId:classifierspring-doc.cn

名字spring-doc.cn

excludesspring-doc.cn

类型spring-doc.cn

java.util.Listspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.excludesspring-doc.cn

因为spring-doc.cn

1.1.0spring-doc.cn

generatedClasses

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

名字spring-doc.cn

generatedClassesspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

generatedResources

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

名字spring-doc.cn

generatedResourcesspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

generatedSources

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

名字spring-doc.cn

generatedSourcesspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

generatedTestClasses

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

名字spring-doc.cn

generatedTestClassesspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

includes

要包含的项目定义的集合。该元素定义 mandatory 和 components 以及 optional component。当配置为属性时,值应使用冒号分隔的组件进行逗号分隔:IncludegroupIdartifactIdclassifiergroupId:artifactId,groupId:artifactId:classifierspring-doc.cn

名字spring-doc.cn

includesspring-doc.cn

类型spring-doc.cn

java.util.Listspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.includesspring-doc.cn

因为spring-doc.cn

1.2.0spring-doc.cn

jvmArguments

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

名字spring-doc.cn

jvmArgumentsspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.aot.jvmArgumentsspring-doc.cn

因为spring-doc.cn

skip

跳过执行。spring-doc.cn

名字spring-doc.cn

skipspring-doc.cn

类型spring-doc.cn

booleanspring-doc.cn

默认值spring-doc.cn

falsespring-doc.cn

用户属性spring-doc.cn

spring-boot.aot.skipspring-doc.cn

因为spring-doc.cn

systemPropertyVariables

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

名字spring-doc.cn

systemPropertyVariablesspring-doc.cn

类型spring-doc.cn

java.util.Mapspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

testClassesDirectory

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

名字spring-doc.cn

testClassesDirectoryspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn