此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.4.0spring-doc.cn

打包可执行存档文件

该插件可以创建包含应用程序的所有依赖项的可执行存档(jar 文件和 war 文件),然后可以使用 .java -jarspring-doc.cn

打包可执行存档由 goal 执行,如以下示例所示:repackagespring-doc.cn

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<executions>
				<execution>
					<goals>
						<goal>repackage</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>
该目标不应在命令行上单独使用,因为它在阶段生成的源 (或 ) 上运行。 要在命令行上使用此目标,必须包含阶段:。repackagejarwarpackagepackagemvn package spring-boot:repackage
如果您使用的是 ,则此类执行已预先配置了执行 ID,因此只应添加插件定义。spring-boot-starter-parentrepackage

上面的示例重新打包了在 Maven 生命周期的包阶段构建的 or 存档,包括项目中定义的任何依赖项。 如果需要排除其中一些依赖项,您可以使用以下选项之一;有关更多详细信息,请参阅依赖项排除jarwarprovidedexcludespring-doc.cn

默认情况下,原始(即不可执行)构件已重命名,但也可以使用自定义分类器保留原始构件。.originalspring-doc.cn

目前不支持 的功能。outputFileNameMappingmaven-war-plugin

默认情况下,会自动排除 and 模块(您可以使用 和 属性控制这一点)。 为了使它与打包一起工作,必须将 and dependencies 设置为 scope 或 with the scope。spring-boot-devtoolsspring-boot-docker-composeexcludeDevtoolsexcludeDockerComposewarspring-boot-devtoolsspring-boot-docker-composeoptionalprovidedspring-doc.cn

该插件会重写您的清单,特别是它管理 and 条目。 如果默认值不起作用,则必须在 Spring Boot 插件中配置值,而不是在 jar 插件中配置值。 清单中的由 Spring Boot 插件的属性控制,如以下示例所示:Main-ClassStart-ClassMain-Classlayoutspring-doc.cn

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>
				<mainClass>${start.class}</mainClass>
				<layout>ZIP</layout>
			</configuration>
			<executions>
				<execution>
					<goals>
						<goal>repackage</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

该属性默认为由存档类型( 或 )确定的值。以下布局可用:layoutjarwarspring-doc.cn

  • JAR:常规可执行 JAR 布局。spring-doc.cn

  • WAR:可执行的 WAR 布局。 放置依赖项以避免在 servlet 容器中部署时发生任何冲突。providedWEB-INF/lib-providedwarspring-doc.cn

  • ZIP(别名为 ):类似于使用 的布局。DIRJARPropertiesLauncherspring-doc.cn

  • NONE:捆绑所有依赖项和项目资源。不捆绑 bootstrap 加载程序。spring-doc.cn

分层 Jar 或 War

重新打包的 jar 分别包含 和 中的应用程序的类和依赖项。 同样,可执行 war 包含应用程序的类 in 和依赖项 in 和 。 对于需要从 jar 或 war 的内容构建 docker 镜像的情况,能够进一步分离这些目录以便将它们写入不同的层非常有用。BOOT-INF/classesBOOT-INF/libWEB-INF/classesWEB-INF/libWEB-INF/lib-providedspring-doc.cn

分层存档使用与常规重新打包的 jar 或 war 相同的布局,但包含一个描述每个层的附加元数据文件。spring-doc.cn

默认情况下,定义了以下图层:spring-doc.cn

  • dependencies对于其版本不包含 .SNAPSHOTspring-doc.cn

  • spring-boot-loader对于加载器类。spring-doc.cn

  • snapshot-dependencies对于其版本包含 .SNAPSHOTspring-doc.cn

  • application对于本地模块依赖项、应用程序类和资源。spring-doc.cn

通过查看属于当前版本的所有模块来识别模块依赖项。 如果模块依赖项只能因为它已安装到 Maven 的本地缓存中并且它不是当前构建的一部分而得到解决,则它将被标识为常规依赖项。spring-doc.cn

层顺序非常重要,因为它决定了当应用程序的一部分发生更改时,可以缓存先前层的可能性。 默认顺序为 , , , 。 应首先添加最不可能更改的内容,然后添加更有可能更改的图层。dependenciesspring-boot-loadersnapshot-dependenciesapplicationspring-doc.cn

默认情况下,重新打包的存档包含该文件。 要禁用此功能,您可以通过以下方式执行此操作:layers.idxspring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<layers>
						<enabled>false</enabled>
					</layers>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

自定义图层配置

根据您的应用程序,您可能希望调整层的创建方式并添加新层。 这可以使用一个单独的配置文件来完成,该文件应该被注册,如下所示:spring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<layers>
						<enabled>true</enabled>
						<configuration>${project.basedir}/src/layers.xml</configuration>
					</layers>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

配置文件描述了如何将档案分离为多个层,以及这些层的顺序。 以下示例显示了如何显式定义上述默认 Sequences:spring-doc.cn

<layers xmlns="http://www.springframework.org/schema/boot/layers"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://www.springframework.org/schema/boot/layers
	                      https://www.springframework.org/schema/boot/layers/layers-3.3.xsd">
	<application>
		<into layer="spring-boot-loader">
			<include>org/springframework/boot/loader/**</include>
		</into>
		<into layer="application" />
	</application>
	<dependencies>
		<into layer="application">
			<includeModuleDependencies />
		</into>
		<into layer="snapshot-dependencies">
			<include>*:*:*SNAPSHOT</include>
		</into>
		<into layer="dependencies" />
	</dependencies>
	<layerOrder>
		<layer>dependencies</layer>
		<layer>spring-boot-loader</layer>
		<layer>snapshot-dependencies</layer>
		<layer>application</layer>
	</layerOrder>
</layers>

XML 格式分为三个部分:layersspring-doc.cn

  • 该块定义应用程序类和资源的分层方式。<application>spring-doc.cn

  • 该块定义了依赖项应该如何分层。<dependencies>spring-doc.cn

  • 该块定义层的写入顺序。<layerOrder>spring-doc.cn

嵌套块在 和 部分中用于声明图层的内容。 这些块按照定义的顺序从上到下进行评估。 任何未被先前区块认领的内容仍可供后续区块考虑。<into><application><dependencies>spring-doc.cn

该块使用 nested 和 元素声明内容。 该部分对包含/排除表达式使用 Ant 样式路径匹配。 该部分使用模式。 它还提供了可用于包含或排除本地模块依赖项的 and 元素。<into><include><exclude><application><dependencies>group:artifact[:version]<includeModuleDependencies /><excludeModuleDependencies />spring-doc.cn

如果定义了 no,则考虑所有内容(未被先前的块声明)。<include>spring-doc.cn

如果未定义 no,则不应用任何排除项。<exclude>spring-doc.cn

查看上面的示例,我们可以看到第一个将声明 . 下一个将声明该层的所有 SNAPSHOT 依赖项。 final 将声明该层的剩余任何内容(在本例中为非 SNAPSHOT 的任何依赖项)。<dependencies><into>application.layer<into>snapshot-dependencies<into>dependenciesspring-doc.cn

该区块也有类似的规则。 首先声明图层的内容。 然后声明该层的所有剩余类和资源。<application>org/springframework/boot/loader/**spring-boot-loaderapplicationspring-doc.cn

块的定义顺序通常与层的写入顺序不同。 因此,必须始终包含该元素,并且必须覆盖块引用的所有层。<into><layerOrder><into>

spring-boot:repackage

org.springframework.boot:spring-boot-maven-plugin:3.3.7-SNAPSHOTspring-doc.cn

重新打包现有的 JAR 和 WAR 存档,以便可以使用 .With 也可以简单地用于打包具有嵌套依赖项的 JAR(并且没有主类,因此不是可执行文件)。java -jarlayout=NONEspring-doc.cn

必需参数

名字 类型 违约

outputDirectory (输出目录)spring-doc.cn

Filespring-doc.cn

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

参数详情

attach

将重新打包的存档附加到本地 Maven 存储库或部署到远程存储库。如果未配置分类器,它将替换普通的 jar。如果已配置 a 使得普通 jar 和重新打包的 jar 不同,它将与普通 jar 一起附加。当该属性设置为 时,将不会安装或部署重新打包的存档。classifierfalsespring-doc.cn

名字spring-doc.cn

attachspring-doc.cn

类型spring-doc.cn

booleanspring-doc.cn

默认值spring-doc.cn

truespring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.4.0spring-doc.cn

classifier

Classifier 添加到重新打包的存档中。如果未给出,则 main artifact 将被 repackaged archive 替换。如果给定,则分类器也将用于确定要重新打包的源存档:如果已经存在具有该分类器的工件,则它将被用作源并替换。如果不存在此类工件,则主工件将用作源,并且重新打包的档案将作为该分类器的补充工件附加。附加工件允许将其与原始工件一起部署,有关更多详细信息,请参阅 Maven 文档。spring-doc.cn

名字spring-doc.cn

classifierspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.0.0spring-doc.cn

embeddedLaunchScript

嵌入式启动脚本,如果 jar 是完全可执行的,则将其预置到 jar 的前面。如果未指定,则将使用 'Spring Boot' 默认脚本。spring-doc.cn

名字spring-doc.cn

embeddedLaunchScriptspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.3.0spring-doc.cn

embeddedLaunchScriptProperties

应在嵌入式启动脚本中展开的属性。spring-doc.cn

名字spring-doc.cn

embeddedLaunchScriptPropertiesspring-doc.cn

类型spring-doc.cn

java.util.Propertiesspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.3.0spring-doc.cn

excludeDevtools

从重新打包的存档中排除 Spring Boot devtools。spring-doc.cn

名字spring-doc.cn

excludeDevtoolsspring-doc.cn

类型spring-doc.cn

booleanspring-doc.cn

默认值spring-doc.cn

truespring-doc.cn

用户属性spring-doc.cn

spring-boot.repackage.excludeDevtoolsspring-doc.cn

因为spring-doc.cn

1.3.0spring-doc.cn

excludeDockerCompose

从重新打包的存档中排除 Spring Boot 开发服务。spring-doc.cn

名字spring-doc.cn

excludeDockerComposespring-doc.cn

类型spring-doc.cn

booleanspring-doc.cn

默认值spring-doc.cn

truespring-doc.cn

用户属性spring-doc.cn

spring-boot.repackage.excludeDockerComposespring-doc.cn

因为spring-doc.cn

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

executable

通过在 jar 中预置启动脚本,为 *nix 计算机创建一个完全可执行的 jar。<p> 目前,某些工具不接受这种格式,因此您可能无法始终使用这种技术。例如,可能会静默地无法提取已完全可执行的 jar 或 war。建议您仅在打算直接执行此选项时启用此选项,而不是使用 servlet 容器运行此选项或将其部署到 servlet 容器。jar -xfjava -jarspring-doc.cn

名字spring-doc.cn

executablespring-doc.cn

类型spring-doc.cn

booleanspring-doc.cn

默认值spring-doc.cn

falsespring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.3.0spring-doc.cn

includeSystemScope

包括系统范围的依赖项。spring-doc.cn

名字spring-doc.cn

includeSystemScopespring-doc.cn

类型spring-doc.cn

booleanspring-doc.cn

默认值spring-doc.cn

falsespring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.4.0spring-doc.cn

includeTools

包括 JAR 工具。spring-doc.cn

名字spring-doc.cn

includeToolsspring-doc.cn

类型spring-doc.cn

booleanspring-doc.cn

默认值spring-doc.cn

truespring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

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

layers

图层配置,其中包含用于禁用图层创建、排除图层工具 jar 和提供自定义图层配置文件的选项。spring-doc.cn

名字spring-doc.cn

layersspring-doc.cn

类型spring-doc.cn

org.springframework.boot.maven.Layersspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

2.3.0spring-doc.cn

layout

存档的类型(对应于其中依赖项的布局方式)。可能的值为 、 、 、 、 。默认为基于存档类型的猜测。JARWARZIPDIRNONEspring-doc.cn

名字spring-doc.cn

layoutspring-doc.cn

类型spring-doc.cn

org.springframework.boot.maven.AbstractPackagerMojo$LayoutTypespring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

spring-boot.repackage.layoutspring-doc.cn

因为spring-doc.cn

1.0.0spring-doc.cn

layoutFactory

如果未设置显式布局,则将用于创建可执行存档的布局工厂。替代布局实现可由第三方提供。spring-doc.cn

名字spring-doc.cn

layoutFactoryspring-doc.cn

类型spring-doc.cn

org.springframework.boot.loader.tools.LayoutFactoryspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.5.0spring-doc.cn

loaderImplementation

应该使用的 loader 实现。spring-doc.cn

名字spring-doc.cn

loaderImplementationspring-doc.cn

类型spring-doc.cn

org.springframework.boot.loader.tools.LoaderImplementationspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

3.2.0spring-doc.cn

mainClass

主类的名称。如果未指定,则将使用找到的第一个包含方法的编译类。mainspring-doc.cn

名字spring-doc.cn

mainClassspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.0.0spring-doc.cn

outputDirectory

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

名字spring-doc.cn

outputDirectoryspring-doc.cn

类型spring-doc.cn

java.io.Filespring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

1.0.0spring-doc.cn

outputTimestamp

可重现输出存档条目的时间戳,格式为 ISO 8601 () 或表示自纪元以来的秒数。yyyy-MM-dd’T’HH:mm:ssXXXintspring-doc.cn

名字spring-doc.cn

outputTimestampspring-doc.cn

类型spring-doc.cn

java.lang.Stringspring-doc.cn

默认值spring-doc.cn

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

用户属性spring-doc.cn

因为spring-doc.cn

2.3.0spring-doc.cn

requiresUnpack

必须从 uber jar 中解压缩才能运行的库列表。将每个库指定为 a 和 a,它们将在运行时解压缩。<dependency><groupId><artifactId>spring-doc.cn

名字spring-doc.cn

requiresUnpackspring-doc.cn

类型spring-doc.cn

java.util.Listspring-doc.cn

默认值spring-doc.cn

用户属性spring-doc.cn

因为spring-doc.cn

1.1.0spring-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.repackage.skipspring-doc.cn

因为spring-doc.cn

1.2.0spring-doc.cn

例子

自定义分类器

默认情况下,该目标将原始构件替换为重新打包的构件。 对于代表应用程序的模块来说,这是一种合理的行为,但如果您的模块用作另一个模块的依赖项,则需要为重新打包的模块提供分类器。 这样做的原因是应用程序类被打包进来,因此依赖模块无法加载重新打包的 jar 的类。repackageBOOT-INF/classesspring-doc.cn

如果是这种情况,或者您更喜欢保留原始构件并将重新打包的构件与其他分类器附加,请配置插件,如以下示例所示:spring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>repackage</id>
						<goals>
							<goal>repackage</goal>
						</goals>
						<configuration>
							<classifier>exec</classifier>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

如果您使用的是 ,则目标将在 id 为的执行中自动执行。 在该设置中,只应指定配置,如以下示例所示:spring-boot-starter-parentrepackagerepackagespring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>repackage</id>
						<configuration>
							<classifier>exec</classifier>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

此配置将生成两个工件:原始工件和由 repackage 目标生成的 repackaged 对应部分。 两者都将以透明方式安装/部署。spring-doc.cn

如果要以与替换主构件相同的方式重新打包辅助构件,也可以使用相同的配置。 以下配置使用重新打包的应用程序安装/部署单个分类构件:taskspring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>jar</goal>
						</goals>
						<phase>package</phase>
						<configuration>
							<classifier>task</classifier>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>repackage</id>
						<goals>
							<goal>repackage</goal>
						</goals>
						<configuration>
							<classifier>task</classifier>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

由于 the 和 the 都在同一阶段运行,因此首先定义 jar 插件非常重要(以便它在 repackage 目标之前运行)。 同样,如果您使用的是 ,则可以将其简化如下:maven-jar-pluginspring-boot-maven-pluginspring-boot-starter-parentspring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<executions>
					<execution>
						<id>default-jar</id>
						<configuration>
							<classifier>task</classifier>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>repackage</id>
						<configuration>
							<classifier>task</classifier>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

自定义名称

如果需要重新打包的 jar 具有与项目属性定义的本地名称不同的本地名称,请使用 standard ,如以下示例所示:artifactIdfinalNamespring-doc.cn

<project>
	<build>
		<finalName>my-app</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>repackage</id>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

此配置将在 中生成重新打包的工件。target/my-app.jarspring-doc.cn

本地重新打包的工件

默认情况下,该目标将原始工件替换为可执行工件。 如果您只需要部署原始 jar,但能够使用常规文件名运行您的应用程序,请按如下方式配置插件:repackagespring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>repackage</id>
						<goals>
							<goal>repackage</goal>
						</goals>
						<configuration>
							<attach>false</attach>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

此配置会生成两个工件:原始工件和目标生成的可执行对应部件。 将仅安装/部署原始 ID。repackagespring-doc.cn

自定义布局

Spring Boot 使用附加 jar 文件中定义的自定义布局工厂重新打包此项目的 jar 文件,该工厂作为构建插件的依赖项提供:spring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>repackage</id>
						<goals>
							<goal>repackage</goal>
						</goals>
						<configuration>
							<layoutFactory implementation="com.example.CustomLayoutFactory">
								<customProperty>value</customProperty>
							</layoutFactory>
						</configuration>
					</execution>
				</executions>
				<dependencies>
					<dependency>
						<groupId>com.example</groupId>
						<artifactId>custom-layout</artifactId>
						<version>0.0.1.BUILD-SNAPSHOT</version>
					</dependency>
				</dependencies>
			</plugin>
		</plugins>
	</build>
</project>

布局工厂作为 pom 中显式指定的 (from ) 的实现提供。 如果插件 Classpath 上只有一个自定义,并且它被列出,则无需在插件配置中显式设置它。LayoutFactoryspring-boot-loader-toolsLayoutFactoryMETA-INF/spring.factoriesspring-doc.cn

如果设置了显式布局,则始终忽略布局工厂。spring-doc.cn

依赖项排除

默认情况下,和 the goals 都将包含在项目中定义的任何依赖项。 Spring Boot 项目应将依赖项视为运行应用程序所需的“容器”依赖项。 一般来说,Spring Boot 项目不用作依赖项,因此不太可能有任何依赖项。 当项目确实具有可选依赖项时,它们也将包含在 和 目标中。repackagerunprovidedprovidedoptionalrepackagerunspring-doc.cn

其中一些依赖项可能根本不是必需的,应该从可执行 jar 中排除。 为了保持一致性,在运行应用程序时也不应存在它们。spring-doc.cn

有两种方法可以在运行时排除依赖项的打包/使用:spring-doc.cn

  • 排除由 和 标识的特定对象,如果需要,可以选择使用 。groupIdartifactIdclassifierspring-doc.cn

  • 排除属于给定 .groupIdspring-doc.cn

以下示例排除 ,并且仅排除该工件:com.example:module1spring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>com.example</groupId>
							<artifactId>module1</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

此示例不包括属于该组的任何工件:com.examplespring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludeGroupIds>com.example</excludeGroupIds>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

JAR 工具

创建分层 jar 或 war 时,该 jar 将作为依赖项添加到您的存档中。 在 Classpath 上使用此 jar,您可以以特殊模式启动应用程序,该模式允许引导代码运行与应用程序完全不同的东西,例如,提取层的东西。 如果您希望排除此依赖项,可以通过以下方式进行:spring-boot-jarmode-toolsspring-doc.cn

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<includeTools>false</includeTools>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

自定义图层配置

默认设置将依赖项拆分为快照和非快照,但是,您可能有更复杂的规则。 例如,您可能希望将项目的公司特定依赖项隔离在专用层中。 以下配置显示了一种这样的设置:layers.xmlspring-doc.cn

<layers xmlns="http://www.springframework.org/schema/boot/layers"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://www.springframework.org/schema/boot/layers
						  https://www.springframework.org/schema/boot/layers/layers-3.3.xsd">
	<application>
		<into layer="spring-boot-loader">
			<include>org/springframework/boot/loader/**</include>
		</into>
		<into layer="application" />
	</application>
	<dependencies>
		<into layer="snapshot-dependencies">
			<include>*:*:*SNAPSHOT</include>
		</into>
		<into layer="company-dependencies">
			<include>com.acme:*</include>
		</into>
		<into layer="dependencies"/>
	</dependencies>
	<layerOrder>
		<layer>dependencies</layer>
		<layer>spring-boot-loader</layer>
		<layer>snapshot-dependencies</layer>
		<layer>company-dependencies</layer>
		<layer>application</layer>
	</layerOrder>
</layers>

上面的配置创建了一个额外的层,其中包含所有具有 groupId 的库。company-dependenciescom.acmespring-doc.cn