此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1Spring中文文档

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

打包可执行存档由目标执行,如以下示例所示:repackageSpring中文文档

<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>
如果您使用的是 ,则此类执行已预先配置了执行 ID,因此只应添加插件定义。spring-boot-starter-parentrepackage

上面的示例重新打包了在 Maven 生命周期的包阶段构建的 OR 存档,包括项目中定义的任何依赖项。 如果需要排除其中一些依赖项,则可以使用其中一个选项;有关详细信息,请参阅依赖项排除项。jarwarprovidedexcludeSpring中文文档

默认情况下,原始(即不可执行的)项目重命名为,但也可以使用自定义分类器保留原始项目。.originalSpring中文文档

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

默认情况下,会自动排除 和 模块(您可以使用 和 属性进行控制)。 为了使它适用于打包,必须将 和 依赖项设置为 scope 或 scope。spring-boot-devtoolsspring-boot-docker-composeexcludeDevtoolsexcludeDockerComposewarspring-boot-devtoolsspring-boot-docker-composeoptionalprovidedSpring中文文档

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

<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中文文档

  • JAR:常规可执行 JAR 布局。Spring中文文档

  • WAR:可执行的 WAR 布局。 放置依赖项是为了避免在 servlet 容器中部署时发生任何冲突。providedWEB-INF/lib-providedwarSpring中文文档

  • ZIP(别名 ):类似于使用 的布局。DIRJARPropertiesLauncherSpring中文文档

  • NONE:捆绑所有依赖项和项目资源。不捆绑引导加载程序。Spring中文文档

如果您使用的是 ,则此类执行已预先配置了执行 ID,因此只应添加插件定义。spring-boot-starter-parentrepackage
目前不支持该功能。outputFileNameMappingmaven-war-plugin

分层罐子或战争

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

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

默认情况下,定义以下层:Spring中文文档

模块依赖关系是通过查看当前构建中的所有模块来识别的。 如果模块依赖关系只能解析,因为它已安装到 Maven 的本地缓存中,并且它不是当前构建的一部分,则它将被标识为常规依赖关系。Spring中文文档

图层顺序很重要,因为它决定了当应用程序的某些部分发生更改时,缓存先前图层的可能性。 默认顺序为 、 、 、 。 应首先添加最不可能更改的内容,然后添加更有可能更改的内容。dependenciesspring-boot-loadersnapshot-dependenciesapplicationSpring中文文档

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

<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中文文档

<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中文文档

<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
	                      layers-xsd: 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中文文档

嵌套块在 和 部分内用于声明图层的内容。 这些块按照定义的顺序从上到下进行计算。 任何未被先前区块声明的内容仍可供后续区块考虑。<into><application><dependencies>Spring中文文档

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

如果定义了 no,则考虑所有内容(未由先前的块声明)。<include>Spring中文文档

如果定义了 no,则不应用任何排除项。<exclude>Spring中文文档

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

该区块也有类似的规则。 首先声明图层的内容。 然后声明图层的任何剩余类和资源。<application>org/springframework/boot/loader/**spring-boot-loaderapplicationSpring中文文档

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

spring-boot:repackage

org.springframework.boot:spring-boot-maven-plugin:3.3.2-SNAPSHOTSpring中文文档

重新打包现有的 JAR 和 WAR 归档文件,以便可以使用 从命令行执行它们。With 也可以简单地用于打包具有嵌套依赖项的 JAR(并且没有主类,因此不可执行)。java -jarlayout=NONESpring中文文档

必需参数

名字 类型 违约

输出目录Spring中文文档

FileSpring中文文档

${project.build.directory}Spring中文文档

参数详细信息

attach

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

名字Spring中文文档

attachSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

trueSpring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.4.0Spring中文文档

classifier

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

名字Spring中文文档

classifierSpring中文文档

类型Spring中文文档

java.lang.StringSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.0.0Spring中文文档

embeddedLaunchScript

嵌入的启动脚本,如果它是完全可执行的,则将其放在 jar 的前面。如果未指定,将使用“Spring Boot”默认脚本。Spring中文文档

名字Spring中文文档

embeddedLaunchScriptSpring中文文档

类型Spring中文文档

java.io.FileSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.3.0Spring中文文档

embeddedLaunchScriptProperties

应在嵌入式启动脚本中展开的属性。Spring中文文档

名字Spring中文文档

embeddedLaunchScriptPropertiesSpring中文文档

类型Spring中文文档

java.util.PropertiesSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.3.0Spring中文文档

excludeDevtools

从重新打包的存档中排除 Spring Boot devtools。Spring中文文档

名字Spring中文文档

excludeDevtoolsSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

trueSpring中文文档

User 属性Spring中文文档

spring-boot.repackage.excludeDevtoolsSpring中文文档

因为Spring中文文档

1.3.0Spring中文文档

excludeDockerCompose

从重新打包的存档中排除 Spring Boot 开发服务。Spring中文文档

名字Spring中文文档

excludeDockerComposeSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

trueSpring中文文档

User 属性Spring中文文档

spring-boot.repackage.excludeDockerComposeSpring中文文档

因为Spring中文文档

3.1.0Spring中文文档

excludeGroupIds

要排除的 groupId 名称的逗号分隔列表(完全匹配)。Spring中文文档

名字Spring中文文档

excludeGroupIdsSpring中文文档

类型Spring中文文档

java.lang.StringSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

spring-boot.excludeGroupIdsSpring中文文档

因为Spring中文文档

1.1.0Spring中文文档

excludes

要排除的项目定义的集合。该元素定义必需组件和组件以及可选组件。配置为属性时,值应以逗号分隔,并用冒号分隔的组件分隔:ExcludegroupIdartifactIdclassifiergroupId:artifactId,groupId:artifactId:classifierSpring中文文档

名字Spring中文文档

excludesSpring中文文档

类型Spring中文文档

java.util.ListSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

spring-boot.excludesSpring中文文档

因为Spring中文文档

1.1.0Spring中文文档

executable

通过在 jar 前面附加启动脚本,为 *nix 机器创建一个完全可执行的 jar。<p> 目前,某些工具不接受此格式,因此您可能并不总是能够使用此技术。例如,可能会默默地无法提取已完全可执行的 jar 或 war。建议仅在打算直接执行此选项时才启用此选项,而不是与 Servlet 容器一起运行或将其部署到 Servlet 容器。jar -xfjava -jarSpring中文文档

名字Spring中文文档

executableSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

falseSpring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.3.0Spring中文文档

includeSystemScope

包括系统范围的依赖项。Spring中文文档

名字Spring中文文档

includeSystemScopeSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

falseSpring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.4.0Spring中文文档

includes

要包含的项目定义的集合。该元素定义必需组件和组件以及可选组件。配置为属性时,值应以逗号分隔,并用冒号分隔的组件分隔:IncludegroupIdartifactIdclassifiergroupId:artifactId,groupId:artifactId:classifierSpring中文文档

名字Spring中文文档

includesSpring中文文档

类型Spring中文文档

java.util.ListSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

spring-boot.includesSpring中文文档

因为Spring中文文档

1.2.0Spring中文文档

layers

图层配置,包含禁用图层创建、排除图层工具 jar 和提供自定义图层配置文件的选项。Spring中文文档

名字Spring中文文档

layersSpring中文文档

类型Spring中文文档

org.springframework.boot.maven.LayersSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

2.3.0Spring中文文档

layout

存档的类型(对应于依赖项在其中的布局方式)。可能的值为 、 、 、 。默认为基于存档类型的猜测。JARWARZIPDIRNONESpring中文文档

名字Spring中文文档

layoutSpring中文文档

类型Spring中文文档

org.springframework.boot.maven.AbstractPackagerMojo$LayoutTypeSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

spring-boot.repackage.layoutSpring中文文档

因为Spring中文文档

1.0.0Spring中文文档

layoutFactory

如果未设置显式布局,则将用于创建可执行存档的布局工厂。替代布局实现可以由第三方提供。Spring中文文档

名字Spring中文文档

layoutFactorySpring中文文档

类型Spring中文文档

org.springframework.boot.loader.tools.LayoutFactorySpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.5.0Spring中文文档

mainClass

主类的名称。如果未指定,则将使用找到的第一个包含方法的已编译类。mainSpring中文文档

名字Spring中文文档

mainClassSpring中文文档

类型Spring中文文档

java.lang.StringSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.0.0Spring中文文档

outputDirectory

包含生成的存档的目录。Spring中文文档

名字Spring中文文档

outputDirectorySpring中文文档

类型Spring中文文档

java.io.FileSpring中文文档

默认值Spring中文文档

${project.build.directory}Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.0.0Spring中文文档

outputTimestamp

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

名字Spring中文文档

outputTimestampSpring中文文档

类型Spring中文文档

java.lang.StringSpring中文文档

默认值Spring中文文档

${project.build.outputTimestamp}Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

2.3.0Spring中文文档

requiresUnpack

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

名字Spring中文文档

requiresUnpackSpring中文文档

类型Spring中文文档

java.util.ListSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.1.0Spring中文文档

名字 类型 违约

输出目录Spring中文文档

FileSpring中文文档

${project.build.directory}Spring中文文档

名字 类型 违约

附加Spring中文文档

booleanSpring中文文档

trueSpring中文文档

分类Spring中文文档

StringSpring中文文档

embeddedLaunchScriptSpring中文文档

FileSpring中文文档

embeddedLaunchScriptPropertiesSpring中文文档

PropertiesSpring中文文档

排除DevtoolsSpring中文文档

booleanSpring中文文档

trueSpring中文文档

excludeDockerComposeSpring中文文档

booleanSpring中文文档

trueSpring中文文档

排除GroupIdsSpring中文文档

StringSpring中文文档

排除Spring中文文档

ListSpring中文文档

可执行Spring中文文档

booleanSpring中文文档

falseSpring中文文档

includeSystemScopeSpring中文文档

booleanSpring中文文档

falseSpring中文文档

include工具Spring中文文档

booleanSpring中文文档

trueSpring中文文档

包括Spring中文文档

ListSpring中文文档

Spring中文文档

LayersSpring中文文档

布局Spring中文文档

LayoutTypeSpring中文文档

布局工厂Spring中文文档

LayoutFactorySpring中文文档

loader实现Spring中文文档

LoaderImplementationSpring中文文档

mainClassSpring中文文档

StringSpring中文文档

输出时间戳Spring中文文档

StringSpring中文文档

${project.build.outputTimestamp}Spring中文文档

requires解包Spring中文文档

ListSpring中文文档

Spring中文文档

booleanSpring中文文档

falseSpring中文文档

名字Spring中文文档

attachSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

trueSpring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.4.0Spring中文文档

名字Spring中文文档

classifierSpring中文文档

类型Spring中文文档

java.lang.StringSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.0.0Spring中文文档

名字Spring中文文档

embeddedLaunchScriptSpring中文文档

类型Spring中文文档

java.io.FileSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.3.0Spring中文文档

名字Spring中文文档

embeddedLaunchScriptPropertiesSpring中文文档

类型Spring中文文档

java.util.PropertiesSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.3.0Spring中文文档

名字Spring中文文档

excludeDevtoolsSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

trueSpring中文文档

User 属性Spring中文文档

spring-boot.repackage.excludeDevtoolsSpring中文文档

因为Spring中文文档

1.3.0Spring中文文档

名字Spring中文文档

excludeDockerComposeSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

trueSpring中文文档

User 属性Spring中文文档

spring-boot.repackage.excludeDockerComposeSpring中文文档

因为Spring中文文档

3.1.0Spring中文文档

名字Spring中文文档

excludeGroupIdsSpring中文文档

类型Spring中文文档

java.lang.StringSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

spring-boot.excludeGroupIdsSpring中文文档

因为Spring中文文档

1.1.0Spring中文文档

名字Spring中文文档

excludesSpring中文文档

类型Spring中文文档

java.util.ListSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

spring-boot.excludesSpring中文文档

因为Spring中文文档

1.1.0Spring中文文档

名字Spring中文文档

executableSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

falseSpring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.3.0Spring中文文档

名字Spring中文文档

includeSystemScopeSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

falseSpring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.4.0Spring中文文档

名字Spring中文文档

includeToolsSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

trueSpring中文文档

User 属性Spring中文文档

因为Spring中文文档

3.3.0Spring中文文档

名字Spring中文文档

includesSpring中文文档

类型Spring中文文档

java.util.ListSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

spring-boot.includesSpring中文文档

因为Spring中文文档

1.2.0Spring中文文档

名字Spring中文文档

layersSpring中文文档

类型Spring中文文档

org.springframework.boot.maven.LayersSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

2.3.0Spring中文文档

名字Spring中文文档

layoutSpring中文文档

类型Spring中文文档

org.springframework.boot.maven.AbstractPackagerMojo$LayoutTypeSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

spring-boot.repackage.layoutSpring中文文档

因为Spring中文文档

1.0.0Spring中文文档

名字Spring中文文档

layoutFactorySpring中文文档

类型Spring中文文档

org.springframework.boot.loader.tools.LayoutFactorySpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.5.0Spring中文文档

名字Spring中文文档

loaderImplementationSpring中文文档

类型Spring中文文档

org.springframework.boot.loader.tools.LoaderImplementationSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

3.2.0Spring中文文档

名字Spring中文文档

mainClassSpring中文文档

类型Spring中文文档

java.lang.StringSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.0.0Spring中文文档

名字Spring中文文档

outputDirectorySpring中文文档

类型Spring中文文档

java.io.FileSpring中文文档

默认值Spring中文文档

${project.build.directory}Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.0.0Spring中文文档

名字Spring中文文档

outputTimestampSpring中文文档

类型Spring中文文档

java.lang.StringSpring中文文档

默认值Spring中文文档

${project.build.outputTimestamp}Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

2.3.0Spring中文文档

名字Spring中文文档

requiresUnpackSpring中文文档

类型Spring中文文档

java.util.ListSpring中文文档

默认值Spring中文文档

User 属性Spring中文文档

因为Spring中文文档

1.1.0Spring中文文档

名字Spring中文文档

skipSpring中文文档

类型Spring中文文档

booleanSpring中文文档

默认值Spring中文文档

falseSpring中文文档

User 属性Spring中文文档

spring-boot.repackage.skipSpring中文文档

因为Spring中文文档

1.2.0Spring中文文档

例子

自定义分类器

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

如果是这种情况,或者您希望保留原始工件并使用其他分类器附加重新打包的工件,请配置插件,如以下示例所示:Spring中文文档

<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中文文档

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

此配置将生成两个工件:原始工件和重新打包目标生成的重新打包的对应部件。 两者都将透明地安装/部署。Spring中文文档

如果要以与替换主工件相同的方式重新打包辅助工件,也可以使用相同的配置。 以下配置使用重新打包的应用程序安装/部署单个分类项目:taskSpring中文文档

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

由于 和 在同一阶段运行,因此首先定义 jar 插件很重要(以便它在重新打包目标之前运行)。 同样,如果您正在使用 ,则可以简化如下:maven-jar-pluginspring-boot-maven-pluginspring-boot-starter-parentSpring中文文档

<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 具有与项目属性定义的本地名称不同的本地名称,请使用标准 ,如以下示例所示:artifactIdfinalNameSpring中文文档

<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中文文档

本地重新打包的工件

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

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

此配置生成两个工件:原始工件和目标生成的可执行对应部件。 只会安装/部署原始的。repackageSpring中文文档

自定义布局

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

<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 ) 的实现提供。 如果插件类路径上只有一个自定义,并且它列在 中,则无需在插件配置中显式设置它。LayoutFactoryspring-boot-loader-toolsLayoutFactoryMETA-INF/spring.factoriesSpring中文文档

如果设置了显式布局,则始终忽略布局工厂。Spring中文文档

依赖项排除

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

其中一些依赖项可能根本不需要,应从可执行 jar 中排除。 为了保持一致性,在运行应用程序时也不应存在它们。Spring中文文档

有两种方法可以在运行时将依赖项排除在打包/使用之外:Spring中文文档

以下示例排除 ,仅排除该工件:com.example:module1Spring中文文档

<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中文文档

<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 或战争时,jar 将作为依赖项添加到您的存档中。 在类路径上使用此 jar,您可以在特殊模式下启动应用程序,该模式允许引导代码运行与应用程序完全不同的内容,例如,提取层的内容。 如果要排除此依赖关系,可以通过以下方式执行此操作:spring-boot-jarmode-toolsSpring中文文档

<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中文文档

<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
						  layers-xsd: 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中文文档