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

打包可执行归档文件

该插件可以创建可执行的归档文件(jar 文件和 war 文件),其中包含应用程序的所有依赖项,然后可以使用 java -jar 运行。spring-doc.cadn.net.cn

打包可执行归档文件由 repackage 目标执行,如下例所示:spring-doc.cadn.net.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>
repackage 目标并不打算在命令行上单独使用,因为它作用于由 package 阶段生成的源代码 jar(或 war)。 要在命令行上使用此目标,您必须包含 package 阶段:mvn package spring-boot:repackage
如果您使用的是 spring-boot-starter-parent,则此类执行已预配置了 repackage 执行 ID,因此只需添加插件定义即可。

上面的示例重新打包了在Maven生命周期的打包阶段构建的jarwar存档,包括项目中定义的任何provided依赖项。 如果需要排除其中一些依赖项,可以使用exclude选项中的一个;有关更多详细信息,请参阅< a t="C4">依赖项排除。spring-doc.cadn.net.cn

原始(即不可执行)的构件默认重命名为 .original,但也可以使用自定义分类器保留原始构件。spring-doc.cadn.net.cn

outputFileNameMapping 功能的 maven-war-plugin 当前不受支持。

spring-boot-devtoolsspring-boot-docker-compose 模块默认会自动被排除(你可以使用 excludeDevtoolsexcludeDockerCompose 属性来控制此行为)。 为了使 war 打包方式正常工作,必须将 spring-boot-devtoolsspring-boot-docker-compose 依赖项设置为 optional 或者使用 provided 范围。 还要注意,可选依赖项默认不会被包含。 如果你将这些模块定义为可选的,还需要将 includeOptional 属性设置为 truespring-doc.cadn.net.cn

该插件会重写您的清单文件,特别是管理 Main-ClassStart-Class 条目。 如果默认值不起作用,您必须在 Spring Boot 插件中配置这些值,而不是在 jar 插件中配置。 清单中的 Main-Class 由 Spring Boot 插件的 layout 属性控制,如下例所示:spring-doc.cadn.net.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>

layout 属性默认为由归档类型(jarwar)决定的值。可用的布局如下:spring-doc.cadn.net.cn

分层 Jar 或 War

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

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

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

模块依赖项是通过查看当前构建中包含的所有模块来确定的。 如果一个模块依赖项只能因为已经安装到 Maven 的本地缓存中,并且它不属于当前构建,那么它将被识别为常规依赖项。spring-doc.cadn.net.cn

层的顺序很重要,因为它决定了当应用程序的部分内容发生变化时,之前的层被缓存的可能性。 默认顺序是 dependenciesspring-boot-loadersnapshot-dependenciesapplication。 最不可能变化的内容应首先添加,然后是更可能变化的层。spring-doc.cadn.net.cn

重新打包的归档文件默认包含 layers.idx 文件。 要禁用此功能,您可以按以下方式操作:spring-doc.cadn.net.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.cadn.net.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>

配置文件描述了如何将一个归档文件拆分为多个层,以及这些层的顺序。 下面的例子显示了如何显式地定义上述默认顺序:spring-doc.cadn.net.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-4.1.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>

layers XML 格式在三个部分中定义:spring-doc.cadn.net.cn

嵌套的 <into> 块在 <application><dependencies> 部分中使用,以声明某一层的内容。 这些块按照定义的顺序从上到下进行求值。 任何未被较早块声明的内容仍可供后续块考虑。spring-doc.cadn.net.cn

<into> 块使用嵌套的 <include><exclude> 元素来声明内容。 <application> 部分使用 Ant 风格的路径匹配来进行包含/排除表达式。 <dependencies> 部分使用 group:artifact[:version] 模式。 它还提供了 <includeModuleDependencies /><excludeModuleDependencies /> 元素,可用于包含或排除本地模块依赖项。spring-doc.cadn.net.cn

如果未定义 <include>,则所有未被先前块占用的内容都将被考虑。spring-doc.cadn.net.cn

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

查看上面的 <dependencies> 示例,我们可以看到第一个 <into> 将声明 application.layer 的所有模块依赖项。 下一个 <into> 将声明 snapshot-dependencies 层的所有 SNAPSHOT 依赖项。 最后一个 <into> 将声明剩余的任何内容(在本例中,任何非 SNAPSHOT 的依赖项)用于 dependencies 层。spring-doc.cadn.net.cn

<application> 块具有类似的规则。 首先为 spring-boot-loader 层声明 org/springframework/boot/loader/** 内容。 然后为 application 层声明任何剩余的类和资源。spring-doc.cadn.net.cn

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

spring-boot:repackage

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

重新打包现有的 JAR 和 WAR 归档文件,以便可以使用 java -jar 从命令行执行它们。layout=NONE 也可仅用于打包具有嵌套依赖项的 JAR(没有主类,因此不可执行)。spring-doc.cadn.net.cn

必需参数

名称 类型 默认

outputDirectoryspring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

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

参数详情

attach

将重新打包的归档文件附加到本地Maven仓库或部署到远程仓库。如果没有配置分类器,它将替换正常的jar。如果已配置classifier,使得正常jar和重新打包的jar不同,它将与正常jar一起附加。当该属性设置为false时,重新打包的归档文件将不会被安装或部署。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

attachspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

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

truespring-doc.cadn.net.cn

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

自从spring-doc.cadn.net.cn

1.4.0spring-doc.cadn.net.cn

classifier

要添加到重新打包的存档中的分类器。如果没有指定,主工件将被重新打包的存档替换。如果指定了分类器,该分类器还将用于确定要重新打包的源存档:如果已存在具有该分类器的工件,它将被用作源并被替换。如果不存在这样的工件,主工件将被用作源,重新打包的存档将作为带有该分类器的补充工件附加。附加工件允许将其与原始工件一起部署,有关更多详细信息,请参阅 Maven 文档spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

classifierspring-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-doc.cadn.net.cn

1.0.0spring-doc.cadn.net.cn

excludeDevtools

从重新打包的归档文件中排除 Spring Boot devtools。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

excludeDevtoolsspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

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

truespring-doc.cadn.net.cn

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

spring-boot.repackage.excludeDevtoolsspring-doc.cadn.net.cn

自从spring-doc.cadn.net.cn

1.3.0spring-doc.cadn.net.cn

excludeDockerCompose

从重新打包的归档文件中排除 Spring Boot 开发服务。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

excludeDockerComposespring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

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

truespring-doc.cadn.net.cn

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

spring-boot.repackage.excludeDockerComposespring-doc.cadn.net.cn

自从spring-doc.cadn.net.cn

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

自从spring-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

自从spring-doc.cadn.net.cn

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

自从spring-doc.cadn.net.cn

1.2.0spring-doc.cadn.net.cn

layers

层配置,提供禁用层创建、排除层工具 jar 包以及提供自定义层配置文件的选项。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

layersspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

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

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

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

自从spring-doc.cadn.net.cn

2.3.0spring-doc.cadn.net.cn

layout

归档文件的类型(对应于其中依赖项的布局方式)。可能的值为 JARWARZIPDIRNONE。默认值是根据归档文件类型猜测得出的。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

layoutspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

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

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

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

spring-boot.repackage.layoutspring-doc.cadn.net.cn

自从spring-doc.cadn.net.cn

1.0.0spring-doc.cadn.net.cn

layoutFactory

如果未设置显式布局,则将使用此布局工厂来创建可执行归档文件。第三方可以提供替代的布局实现。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

layoutFactoryspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

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

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

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

自从spring-doc.cadn.net.cn

1.5.0spring-doc.cadn.net.cn

mainClass

主类的名称。如果未指定,将使用找到的第一个包含 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-doc.cadn.net.cn

1.0.0spring-doc.cadn.net.cn

outputDirectory

包含生成的归档文件的目录。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

outputDirectoryspring-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-doc.cadn.net.cn

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

自从spring-doc.cadn.net.cn

1.0.0spring-doc.cadn.net.cn

outputTimestamp

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

名称spring-doc.cadn.net.cn

outputTimestampspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

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

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

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

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

自从spring-doc.cadn.net.cn

2.3.0spring-doc.cadn.net.cn

requiresUnpack

必须从 uber jars 中解包以运行的库列表。将每个库指定为 <dependency>,并带有 <groupId><artifactId>,它们将在运行时被解包。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

requiresUnpackspring-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-doc.cadn.net.cn

1.1.0spring-doc.cadn.net.cn

示例

自定义分类器

默认情况下,repackage 目标会用重新打包后的构件替换原始构件。 这对于代表应用程序的模块来说是一种合理的行为,但如果你的模块被用作另一个模块的依赖项,则需要为重新打包后的构件提供一个分类器(classifier)。 这样做的原因是,应用程序类被打包在 BOOT-INF/classes 中,以便依赖模块无法加载重新打包后的 jar 文件中的类。spring-doc.cadn.net.cn

如果是这种情况,或者您希望保留原始构件并将重新打包的构件以不同的分类器附加,请按照以下示例配置插件:spring-doc.cadn.net.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>

如果您使用的是 spring-boot-starter-parent,则 repackage 目标会在 ID 为 repackage 的执行中自动执行。 在该设置中,只需指定配置,如下例所示:spring-doc.cadn.net.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 目标生成的重新打包的对应工件。 两者都将被透明地安装/部署。spring-doc.cadn.net.cn

如果您希望以与替换主构件相同的方式重新打包次要构件,也可以使用相同的配置。 以下配置安装/部署单个带有 task 分类器的重新打包后的应用程序构件:spring-doc.cadn.net.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>

由于 maven-jar-pluginspring-boot-maven-plugin 都在同一阶段运行,因此务必先定义 jar 插件(以便它在 repackage 目标之前运行)。 同样,如果您使用的是 spring-boot-starter-parent,则可以简化如下:spring-doc.cadn.net.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 文件具有与项目的 artifactId 属性所定义的名称不同的本地名称,请使用标准的 finalName,如下例所示:spring-doc.cadn.net.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.jar 中生成重新打包的构件。spring-doc.cadn.net.cn

本地重新打包的构件

默认情况下,repackage 目标会用可执行构件替换原始构件。 如果您只需要部署原始 jar 文件,同时仍能够使用常规文件名运行您的应用程序,请按如下方式配置插件:spring-doc.cadn.net.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>

此配置会生成两个构件:原始构件以及由 repackage 目标生成的可执行对应构件。 只有原始构件会被安装/部署。spring-doc.cadn.net.cn

自定义布局

Spring Boot 使用在附加 jar 文件中定义的自定义布局工厂重新打包该项目的 jar 文件,该附加 jar 文件作为构建插件的依赖项提供:spring-doc.cadn.net.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>

布局工厂作为 LayoutFactory(来自 spring-boot-loader-tools)的实现提供,并在 pom 中显式指定。 如果插件类路径上只有一个自定义的 LayoutFactory,并且它已在 META-INF/spring.factories 中列出,则无需在插件配置中显式设置它。spring-doc.cadn.net.cn

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

依赖排除

默认情况下,repackagerun 目标都会包含项目中定义的任何 provided 依赖项。 Spring Boot 项目应将 provided 依赖项视为运行应用程序所必需的“容器”依赖项。 一般来说,Spring Boot 项目不作为依赖项使用,因此不太可能有任何 optional 依赖项。 当项目确实存在可选依赖项时,它们也会被 repackagerun 目标包含。spring-doc.cadn.net.cn

其中一些依赖可能根本不需要,应该从可执行的jar文件中排除。 为了保持一致性,运行应用程序时也不应存在这些依赖。spring-doc.cadn.net.cn

有两种方法可以排除某个依赖项,使其不被打包或在运行时使用:spring-doc.cadn.net.cn

以下示例仅排除 com.example:module1 这个构件:spring-doc.cadn.net.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.example 组的任何构件:spring-doc.cadn.net.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 时,spring-boot-jarmode-tools jar 将作为依赖项添加到您的归档文件中。 通过将此 jar 放在类路径上,您可以以特殊模式启动应用程序,该模式允许引导代码运行与您的应用程序完全不同的内容,例如提取层的内容。 如果您希望排除此依赖项,可以通过以下方式进行:spring-doc.cadn.net.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.xml 配置展示了这样一种设置:spring-doc.cadn.net.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-4.1.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>

上述配置创建了一个额外的 company-dependencies 层,包含所有具有 com.acme groupId 的库。spring-doc.cadn.net.cn