打包可执行档案

该插件可以创建包含应用程序所有依赖项的可执行存档(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>
repackagegoal 并不意味着在命令行上单独使用,因为它在源代码上运行jar(或war) 由package阶段。 要在命令行上使用此目标,您必须包含package阶段:mvn package spring-boot:repackage.
如果您正在使用spring-boot-starter-parent,此类执行已经预先配置了repackage执行 ID,以便仅添加插件定义。

上面的示例重新打包了一个jarwar在 Maven 生命周期的包阶段构建的存档,包括任何provided项目中定义的依赖项。 如果需要排除其中一些依赖项,您可以使用exclude选项;有关更多详细信息,请参阅依赖项排除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-composedependencies 必须设置为optional或使用provided范围。spring-doc.cadn.net.cn

该插件重写您的清单,特别是它管理Main-ClassStart-Class条目。 如果默认值不起作用,则必须在 Spring Boot 插件中配置值,而不是在 jar 插件中配置值。 这Main-Class在清单中由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 包含应用程序的类和依赖项BOOT-INF/classesBOOT-INF/lib分别。 同样,可执行 war 包含应用程序的类WEB-INF/classesWEB-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

层顺序很重要,因为它决定了当应用程序的一部分发生更改时缓存先前层的可能性。 默认顺序为dependencies,spring-boot-loader,snapshot-dependencies,application. 应首先添加最不可能更改的内容,然后添加更有可能更改的图层。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-3.5.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>

layersXML 格式分为三个部分: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层。 决赛<into>将声明剩余的任何内容(在本例中,是任何不是 SNAPSHOT 的依赖项)dependencies层。spring-doc.cadn.net.cn

<application>block 也有类似的规则。 首次认领org/springframework/boot/loader/**内容spring-boot-loader层。 然后为application层。spring-doc.cadn.net.cn

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

spring-boot:repackage

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

重新打包现有的 JAR 和 WAR 存档,以便可以使用java -jar.跟layout=NONE也可以简单地用于打包具有嵌套依赖项的 JAR(并且没有主类,因此不可执行)。spring-doc.cadn.net.cn

必填参数

名称 类型 默认值

输出目录spring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

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

可选参数

名称 类型 默认值

附加spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

分类spring-doc.cadn.net.cn

Stringspring-doc.cadn.net.cn

embeddedLaunchScriptspring-doc.cadn.net.cn

Filespring-doc.cadn.net.cn

embeddedLaunchScript属性spring-doc.cadn.net.cn

Propertiesspring-doc.cadn.net.cn

excludeDevtoolsspring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

excludeDockerComposespring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

excludeGroupIdsspring-doc.cadn.net.cn

Stringspring-doc.cadn.net.cn

排除spring-doc.cadn.net.cn

Listspring-doc.cadn.net.cn

可执行spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

include系统范围spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

include工具spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

truespring-doc.cadn.net.cn

包括spring-doc.cadn.net.cn

Listspring-doc.cadn.net.cn

spring-doc.cadn.net.cn

Layersspring-doc.cadn.net.cn

布局spring-doc.cadn.net.cn

LayoutTypespring-doc.cadn.net.cn

布局工厂spring-doc.cadn.net.cn

LayoutFactoryspring-doc.cadn.net.cn

loader实现spring-doc.cadn.net.cn

LoaderImplementationspring-doc.cadn.net.cn

main类spring-doc.cadn.net.cn

Stringspring-doc.cadn.net.cn

输出时间戳spring-doc.cadn.net.cn

Stringspring-doc.cadn.net.cn

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

要求解包spring-doc.cadn.net.cn

Listspring-doc.cadn.net.cn

spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

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

embeddedLaunchScript

如果jar完全可执行,则嵌入到jar前面的启动脚本。如果未指定,将使用“Spring Boot”默认脚本。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

embeddedLaunchScriptspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

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

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

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

因为spring-doc.cadn.net.cn

1.3.0spring-doc.cadn.net.cn

embeddedLaunchScriptProperties

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

名称spring-doc.cadn.net.cn

embeddedLaunchScriptPropertiesspring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

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

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

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

因为spring-doc.cadn.net.cn

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

executable

通过在 jar 前面添加启动脚本,为 *nix 机器创建一个完全可执行的 jar。目前,某些工具不接受此格式,因此您可能并不总是能够使用此技术。例如jar -xf可能无法以静默方式提取已完全可执行的 jar 或 war。建议仅在打算直接执行此选项时启用此选项,而不是使用java -jar或将其部署到 servlet 容器。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

executablespring-doc.cadn.net.cn

类型spring-doc.cadn.net.cn

booleanspring-doc.cadn.net.cn

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

falsespring-doc.cadn.net.cn

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

因为spring-doc.cadn.net.cn

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

存档的类型(对应于依赖项在其中的布局方式)。可能的值为JAR,WAR,ZIP,DIR,NONE.默认为基于存档类型的猜测。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) 或int表示自纪元以来的秒数。spring-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 jar 中解压缩才能运行的库列表。将每个库指定为<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目标将原始工件替换为重新打包的工件。 对于表示应用程序的模块来说,这是一种合理的行为,但如果您的模块被用作另一个模块的依赖项,则需要为重新打包的模块提供分类器。 原因是应用程序类被打包在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-parentrepackage目标在 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>

此配置将生成两个工件:原始工件和重新打包目标生成的重新打包的对应物。 两者都将透明地安装/部署。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 插件(以便它在重新打包目标之前运行)。 同样,如果您使用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属性,请使用 standardfinalName,如以下示例所示: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

本地重新打包的工件

默认情况下,repackagegoal 将原始工件替换为可执行工件。 如果您只需要部署原始 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文件,该文件作为构建插件的依赖项提供: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 项目应该考虑provideddependencies 作为运行应用程序所需的“容器”依赖项。 一般来说,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-toolsjar 将作为依赖项添加到您的存档中。 在类路径上使用这个 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-3.5.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.acmegroupId 中。spring-doc.cadn.net.cn