1、介绍

Spring Boot Maven 插件在Apache Maven 中提供 Spring Boot 支持。它允许您打包可执行的 jar 或 war 档案、运行 Spring Boot 应用程序、生成构建信息并在运行集成测试之前启动您的 Spring Boot 应用程序。

2. 入门

要使用 Spring Boot Maven 插件,请在plugins您的部分包含适当的 XML pom.xml,如以下示例所示:

<project>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>getting-started</artifactId>
    <!-- ... -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

如果您使用里程碑或快照版本,您还需要添加适当的pluginRepository元素,如下面的清单所示:

<pluginRepositories>
    <pluginRepository>
        <id>spring-snapshots</id>
        <url>https://repo.spring.io/snapshot</url>
    </pluginRepository>
    <pluginRepository>
        <id>spring-milestones</id>
        <url>https://repo.spring.io/milestone</url>
    </pluginRepository>
</pluginRepositories>

3. 使用插件

Maven 用户可以从spring-boot-starter-parent项目继承以获得合理的默认值。父项目提供以下功能:

  • Java 1.8 作为默认编译器级别。

  • UTF-8 源编码。

  • -parameters.

  • spring-boot-dependenciesPOM继承的依赖项管理部分,用于管理公共依赖项的版本。<version>当在您自己的 POM 中使用这些依赖项时,此依赖项管理允许您省略这些依赖项的标记。

  • 具有执行 ID的repackage目标repackage执行。

  • 明智的资源过滤

  • 合理的插件配置(Git 提交 IDshade)。

  • 对特定于配置文件的文件(例如,和)进行合理的资源过滤application.propertiesapplication.yml包括在内application-dev.propertiesapplication-dev.yml

3.1. 继承 Starter Parent POM

要将您的项目配置为从 继承spring-boot-starter-parent,请parent进行如下设置:

<!-- Inherit defaults from Spring Boot -->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.5.6</version>
</parent>

通过该设置,您还可以通过覆盖自己项目中的属性来覆盖各个依赖项。例如,要使用不同版本的 SLF4J 库和 Spring Data 发布系列,您需要将以下内容添加到您的pom.xml:

<properties>
    <slf4j.version>1.7.30</slf4j.version>
    <spring-data-releasetrain.version>Moore-SR6</spring-data-releasetrain.version>
</properties>

3.2. 在没有父 POM 的情况下使用 Spring Boot

您可能有理由不从spring-boot-starter-parentPOM继承。您可能有自己需要使用的公司标准父级,或者您可能更喜欢显式声明所有 Maven 配置。

如果您不想使用spring-boot-starter-parent,您仍然可以通过使用import作用域依赖来保持依赖管理(但不是插件管理)的好处,如下所示:

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.5.6</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

前面的示例设置不允许您通过使用属性覆盖各个依赖项,如上所述。要达到相同的结果,您需要在条目之前dependencyManagement项目部分中添加条目。例如,要使用不同版本的 SLF4J 库和 Spring Data 发布系列,您可以将以下元素添加到您的:spring-boot-dependenciespom.xml

<dependencyManagement>
    <dependencies>
        <!-- Override SLF4J provided by Spring Boot -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>2020.0.0-SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.5.6</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


3.3. 覆盖命令行上的设置

该插件提供了许多用户属性,以 开头spring-boot,让您可以从命令行自定义配置。

例如,您可以在运行应用程序时调整配置文件以启用,如下所示:

$ mvn spring-boot:run -Dspring-boot.run.profiles=dev,local

如果您希望在允许在命令行上覆盖它的同时具有默认值,则应结合使用用户提供的项目属性和 MOJO 配置。

<project>
    <properties>
        <app.profiles>local,dev</app.profiles>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <profiles>${app.profiles}</profiles>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

以上确保默认情况下启用localdev。现在已经公开了一个专用属性,这也可以在命令行上覆盖:

$ mvn spring-boot:run -Dapp.profiles=test

4. 目标

Spring Boot 插件有以下目标:

目标描述
spring-boot:build-image使用 buildpack 将应用程序打包到 OCI 映像中。
spring-boot:build-infobuild-info.properties根据当前的内容生成文件MavenProject
spring-boot:help显示有关 spring-boot-maven-plugin 的帮助信息。调用mvn spring-boot:help -Ddetail=true -Dgoal=<goal-name>以显示参数详细信息
spring-boot:repackage重新打包现有的 JAR 和 WAR 存档,以便可以使用java -jar. Withlayout=NONE也可以简单地用于打包具有嵌套依赖项的 JAR(没有主类,因此不可执行)。
spring-boot:run就地运行应用程序
spring-boot:start启动一个 spring 应用程序。与run目标相反,这不会阻止并允许其他目标对应用程序进行操作。此目标通常用于集成测试场景,其中应用程序在测试套件之前启动并在测试套件之后停止。
spring-boot:stop停止由“开始”目标启动的应用程序。通常在测试套件完成后调用

5. 打包可执行文件

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

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

<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>
如果您正在使用spring-boot-starter-parent,这样的执行已经预先配置了repackage执行 ID,因此只应添加插件定义。

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

.original默认情况下,原始(即不可执行的)工件被重命名为,但也可以使用自定义分类器保留原始工件。

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

默认情况下会自动排除 Devtools(您可以使用该excludeDevtools属性控制它)。为了使其与war打包一起工作,spring-boot-devtools必须将依赖项设置为范围optional或与provided范围一起设置。

该插件重写您的清单,特别是它管理Main-ClassStart-Class条目。如果默认值不起作用,您必须在 Spring Boot 插件中配置值,而不是在 jar 插件中。所述Main-Class清单中的由控制layout所述弹簧引导插件的属性,如显示在下面的例子:

<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)确定的值。可以使用以下布局:

  • JAR: 常规的可执行 JAR 布局。

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

  • ZIP(别名DIR):类似于JAR使用的布局PropertiesLauncher

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

5.1. 分层罐或战争

重新打包的 jar分别在BOOT-INF/classes和 中包含应用程序的类和依赖项BOOT-INF/lib。同样的,可执行的战争包含了应用程序的类WEB-INF/classes和依赖关系WEB-INF/libWEB-INF/lib-provided。对于需要从 jar 或 war 的内容构建 docker 映像的情况,能够进一步分离这些目录以便将它们写入不同的层会很有用。

分层存档使用与常规重新打包的 jar 或 war 相同的布局,但包括一个额外的元数据文件来描述每一层。

默认情况下,定义了以下层:

  • dependencies对于任何版本不包含SNAPSHOT.

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

  • snapshot-dependencies对于任何版本包含SNAPSHOT.

  • application 用于本地模块依赖项、应用程序类和资源。

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

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

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

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

[[packaging.layers.configuration=]] === 自定义层配置 根据您的应用程序,您可能想要调整层的创建方式并添加新层。这可以使用一个单独的配置文件来完成,该文件应该如下所示进行注册:

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

配置文件描述了档案如何被分成层,以及这些层的顺序。以下示例显示了如何显式定义上述默认排序:

<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-2.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格式在三节中介绍:

  • <application>块定义了应用程序类和资源应如何分层。

  • <dependencies>块定义了依赖项应该如何分层。

  • <layerOrder>块定义了应写入层的顺序。

嵌套<into>块用于内部<application><dependencies>部分以声明图层的内容。这些块按照它们定义的顺序从上到下进行评估。先前块未声明的任何内容仍然可供后续块考虑。

<into>块使用嵌套<include><exclude>元素声明内容。该<application>部分对包含/排除表达式使用 Ant 样式的补丁匹配。本<dependencies>节使用group:artifact[:version]模式。它还提供了<includeModuleDependencies /><excludeModuleDependencies />可以使用的包括或排除本地模块依赖关系的元素。

如果<include>定义了no ,则考虑所有内容(未由较早的块声明)。

如果<exclude>定义了no ,则不应用排除项。

查看<dependencies>上面的示例,我们可以看到第一个<into>将声明application.layer. 下一个<into>将声明该snapshot-dependencies层的所有 SNAPSHOT 依赖项。final<into>将声明该dependencies层剩下的任何东西(在这种情况下,任何不是 SNAPSHOT 的依赖项)。

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

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

5.2. spring-boot:repackage

org.springframework.boot:spring-boot-maven-plugin:2.5.6

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

5.2.1. 所需参数

姓名类型默认

输出目录

File

${project.build.directory}

5.2.2. 可选参数

姓名类型默认

boolean

true

分类器

String

嵌入式启动脚本

File

嵌入式LaunchScript属性

Properties

排除开发工具

boolean

true

excludeGroupIds

String

排除

List

可执行

boolean

false

包括系统范围

boolean

false

包括

List

Layers

布局

LayoutType

布局工厂

LayoutFactory

主类

String

输出时间戳

String

${project.build.outputTimestamp}

需要解包

List

跳过

boolean

false

5.2.3. 参数详情

attach

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

姓名

attach

类型

boolean

默认值

true

用户属性

自从

1.4.0

classifier

添加到重新打包存档的分类器。如果没有给出,主要工件将被重新打包的存档替换。如果给定,分类器也将用于确定要重新打包的源存档:如果具有该分类器的工件已经存在,它将用作源并替换。如果不存在此类工件,则主工件将用作源,重新打包的存档将作为该分类器的补充工件附加。附加工件允许将其与原始工件一起部署,参见 $1[$2]。

姓名

classifier

类型

java.lang.String

默认值

用户属性

自从

1.0.0

embeddedLaunchScript

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

姓名

embeddedLaunchScript

类型

java.io.File

默认值

用户属性

自从

1.3.0

embeddedLaunchScriptProperties

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

姓名

embeddedLaunchScriptProperties

类型

java.util.Properties

默认值

用户属性

自从

1.3.0

excludeDevtools

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

姓名

excludeDevtools

类型

boolean

默认值

true

用户属性

spring-boot.repackage.excludeDevtools

自从

1.3.0

excludeGroupIds

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

姓名

excludeGroupIds

类型

java.lang.String

默认值

用户属性

spring-boot.excludeGroupIds

自从

1.1.0

excludes

要排除的工件定义的集合。该Exclude元素定义强制性groupIdartifactId性质和可选classifier性。

姓名

excludes

类型

java.util.List

默认值

用户属性

spring-boot.excludes

自从

1.1.0

executable

通过在 jar 中添加启动脚本,为 *nix 机器制作一个完全可执行的 jar。<p> 目前,一些工具不接受这种格式,因此您可能并不总是能够使用这种技术。例如,jar -xf可能会默默地无法提取已完全可执行的 jar 或 war。建议您仅在打算直接执行时才启用此选项,而不是使用java -jarservlet 容器运行它或将其部署到 servlet 容器。

姓名

executable

类型

boolean

默认值

false

用户属性

自从

1.3.0

includeSystemScope

包括系统范围的依赖项。

姓名

includeSystemScope

类型

boolean

默认值

false

用户属性

自从

1.4.0

includes

要包含的工件定义的集合。该Include元素定义了强制groupIdartifactId属性以及可选的强制groupIdartifactId属性和一个可选classifier属性。

姓名

includes

类型

java.util.List

默认值

用户属性

spring-boot.includes

自从

1.2.0

layers

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

姓名

layers

类型

org.springframework.boot.maven.Layers

默认值

用户属性

自从

2.3.0

layout

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

姓名

layout

类型

org.springframework.boot.maven.AbstractPackagerMojo$LayoutType

默认值

用户属性

spring-boot.repackage.layout

自从

1.0.0

layoutFactory

如果未设置显式布局,将用于创建可执行存档的布局工厂。3rd 方可以提供替代布局实现。

姓名

layoutFactory

类型

org.springframework.boot.loader.tools.LayoutFactory

默认值

用户属性

自从

1.5.0

mainClass

主类的名称。如果未指定,main将使用找到的第一个包含方法的编译类。

姓名

mainClass

类型

java.lang.String

默认值

用户属性

自从

1.0.0

outputDirectory

包含生成的存档的目录。

姓名

outputDirectory

类型

java.io.File

默认值

${project.build.directory}

用户属性

自从

1.0.0

outputTimestamp

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

姓名

outputTimestamp

类型

java.lang.String

默认值

${project.build.outputTimestamp}

用户属性

自从

2.3.0

requiresUnpack

必须从胖罐中解压才能运行的库列表。各指定库作为<dependency>一个<groupId><artifactId>他们将在运行时解压。

姓名

requiresUnpack

类型

java.util.List

默认值

用户属性

自从

1.1.0

skip

跳过执行。

姓名

skip

类型

boolean

默认值

false

用户属性

spring-boot.repackage.skip

自从

1.2.0

5.3. 例子

5.3.1. 自定义分类器

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

如果是这种情况,或者如果您更喜欢保留原始工件并使用不同的分类器附加重新打包的工件,请按以下示例配置插件:

<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。在该设置中,只应指定配置,如以下示例所示:

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

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

如果您想以替换主工件的相同方式重新打包辅助工件,您也可以使用相同的配置。以下配置task使用重新打包的应用程序安装/部署单个分类工件:

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

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

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

5.3.2. 自定义名称

如果您需要重新打包的 jar 具有artifactId与项目属性定义的本地名称不同的本地名称,请使用标准finalName,如以下示例所示:

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

5.3.3. 本地重新包装的工件

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

<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目标生成的可执行计数器部分。只会安装/部署原始的。

5.3.4. 自定义布局

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

<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(from spring-boot-loader-tools) 在 pom.xml 文件中明确指定的实现提供。如果LayoutFactory插件类路径上只有一个自定义并且它被列出,META-INF/spring.factories那么就没有必要在插件配置中显式设置它。

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

5.3.5. 依赖排除

默认情况下,目标repackagerun目标都将包含provided项目中定义的任何依赖项。Spring Boot 项目应将provided依赖项视为运行应用程序所需的“容器”依赖项。

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

有两种方法可以在运行时从打包/使用中排除依赖项:

  • 排除由groupId和标识的特定工件artifactIdclassifier如果需要,可以选择使用。

  • 排除属于给定groupId.

以下示例排除com.example:module1,并且仅排除该工件:

<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组的任何工件:

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

5.3.6. 分层归档工具

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

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

5.3.7. 自定义图层配置

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

<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-2.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 的库。

6. 包装 OCI 图像

该插件可以使用Cloud Native Buildpacks (CNB)从 jar 或 war 文件创建OCI 映像。可以使用目标构建图像。build-image

出于安全原因,图像以非 root 用户身份构建和运行。有关更多详细信息,请参阅CNB 规范

最简单的入门方法是调用mvn spring-boot:build-image一个项目。可以在package调用阶段时自动创建图像,如下例所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>build-image</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
虽然 buildpack 从可执行存档运行,但没有必要先执行repackage目标,因为如有必要,可执行存档会自动创建。当build-image重新打包应用程序时,它应用与repackage目标相同的设置,即可以使用排除选项之一排除依赖项,并且默认情况下会自动排除 Devtools(您可以使用该excludeDevtools属性控制它)。

6.1. Docker 守护进程

build-image目标需要访问 Docker 守护进程。默认情况下,它将通过本地连接与 Docker 守护进程通信。这适用于所有支持平台上的Docker 引擎,无需配置。

可以设置环境变量来配置build-image目标以使用minikube 提供Docker 守护进程。下表显示了环境变量及其值:

环境变量描述

DOCKER_HOST

包含 Docker 守护程序的主机和端口的 URL - 例如 tcp://192.168.99.100:2376

DOCKER_TLS_VERIFY

设置为1(可选)时启用安全 HTTPS 协议

DOCKER_CERT_PATH

HTTPS 证书和密钥文件的路径(如果 是必需的DOCKER_TLS_VERIFY=1,否则忽略)

在 Linux 和 macOS 上,可以eval $(minikube docker-env)在 minikube 启动后使用命令设置这些环境变量。

Docker 守护进程连接信息也可以使用docker插件配置中的参数提供。下表总结了可用参数:

范围描述

host

包含 Docker 守护程序的主机和端口的 URL - 例如 tcp://192.168.99.100:2376

tlsVerify

设置为true(可选)时启用安全 HTTPS 协议

certPath

Path to certificate and key files for HTTPS (required if tlsVerify is true, ignored otherwise)

For more details, see also examples.

6.2. Docker Registry

If the Docker images specified by the builder or runImage parameters are stored in a private Docker image registry that requires authentication, the authentication credentials can be provided using docker.builderRegistry parameters.

If the generated Docker image is to be published to a Docker image registry, the authentication credentials can be provided using docker.publishRegistry parameters.

Parameters are provided for user authentication or identity token authentication. Consult the documentation for the Docker registry being used to store images for further information on supported authentication methods.

The following table summarizes the available parameters for docker.builderRegistry and docker.publishRegistry:

ParameterDescription

username

Username for the Docker image registry user. Required for user authentication.

password

Password for the Docker image registry user. Required for user authentication.

url

Address of the Docker image registry. Optional for user authentication.

email

E-mail address for the Docker image registry user. Optional for user authentication.

token

Identity token for the Docker image registry user. Required for token authentication.

For more details, see also examples.

6.3. Image Customizations

该插件调用构建器来协调图像的生成。助洗剂包括多个buildpacks可以检查该应用程序以影响所产生的图像。默认情况下,插件会选择构建器映像。生成的图像的名称是从项目属性中推导出来的。

image参数允许配置构建器以及它应该如何在项目上运行。下表总结了可用参数及其默认值:

参数/(用户属性)描述默认值

builder
spring-boot.build-image.builder)

要使用的构建器图像的名称。

paketobuildpacks/builder:base

runImage
spring-boot.build-image.runImage)

要使用的运行映像的名称。

无默认值,表示应使用 Builder 元数据中指定的运行映像。

name
spring-boot.build-image.imageName)

生成的图像的图像名称

docker.io/library/
${project.artifactId}:${project.version}

pullPolicy
spring-boot.build-image.pullPolicy)

策略用于确定何时从注册表中拉建设者和运行图像。可接受的值是ALWAYSNEVERIF_NOT_PRESENT

ALWAYS

env

应该传递给构建器的环境变量。

buildpacks

构建器在构建映像时应使用的构建包。只会使用指定的构建包,覆盖构建器中包含的默认构建包。Buildpack 引用必须采用以下形式之一:

  • 构建器中的 Buildpack - [urn:cnb:builder:]<buildpack ID>[@<version>]

  • Buildpack 在文件系统上的目录中 - [file://]<path>

  • Buildpack 在文件系统上的 gzip tar (.tgz) 文件中 - [file://]<path>/<file name>

  • OCI 映像中的 Buildpack - [docker://]<host>/<repo>[:<tag>][@<digest>]

无,表示构建器应使用其中包含的构建包。

bindings

构建映像时应安装到构建器容器的卷绑定安装。创建构建器容器时,绑定将未经解析和未经验证传递给 Docker。绑定必须采用以下形式之一:

  • <host source path>:<container destination path>[:<options>]

  • <host volume name>:<container destination path>[:<options>]

哪里<options>可以包含:

  • ro 在容器中将卷挂载为只读

  • rw 将卷安装为在容器中可读可写

  • volume-opt=key=value 指定由选项名称及其值组成的键值对

cleanCache
spring-boot.build-image.cleanCache)

是否在构建前清理缓存。

false

verboseLogging

启用构建器操作的详细日志记录。

false

publish
spring-boot.build-image.publish)

是否将生成的镜像发布到 Docker 注册中心。

false

该插件使用编译器的插件配置或maven.compiler.target属性来检测项目的目标 Java 兼容性。当使用默认的 Paketo 构建器和构建包时,插件会指示构建包安装相同的 Java 版本。您可以覆盖此行为,如构建器配置示例中所示。

有关更多详细信息,另请参见示例

6.4. spring-boot:build-image

org.springframework.boot:spring-boot-maven-plugin:2.5.6

使用 buildpack 将应用程序打包到 OCI 映像中。

6.4.1. 所需参数

姓名类型默认

源目录

File

${project.build.directory}

6.4.2. 可选参数

姓名类型默认

分类器

String

码头工人

Docker

排除开发工具

boolean

true

excludeGroupIds

String

排除

List

图片

Image

包括系统范围

boolean

false

包括

List

Layers

布局

LayoutType

布局工厂

LayoutFactory

主类

String

跳过

boolean

false

6.4.3. 参数详情

classifier

查找源存档时使用的分类器。

姓名

classifier

类型

java.lang.String

默认值

用户属性

自从

2.3.0

docker

Docker 配置选项。

姓名

docker

类型

org.springframework.boot.maven.Docker

默认值

用户属性

自从

2.4.0

excludeDevtools

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

姓名

excludeDevtools

类型

boolean

默认值

true

用户属性

spring-boot.repackage.excludeDevtools

自从

1.3.0

excludeGroupIds

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

姓名

excludeGroupIds

类型

java.lang.String

默认值

用户属性

spring-boot.excludeGroupIds

自从

1.1.0

excludes

要排除的工件定义的集合。该Exclude元素定义强制性groupIdartifactId性质和可选classifier性。

姓名

excludes

类型

java.util.List

默认值

用户属性

spring-boot.excludes

自从

1.1.0

image

图像的配置,与builderrunImagenameenvcleanCacheverboseLoggingpullPolicy,和publish选项。

姓名

image

类型

org.springframework.boot.maven.Image

默认值

用户属性

自从

2.3.0

includeSystemScope

包括系统范围的依赖项。

姓名

includeSystemScope

类型

boolean

默认值

false

用户属性

自从

1.4.0

includes

要包含的工件定义的集合。该Include元素定义了强制groupIdartifactId属性以及可选的强制groupIdartifactId属性和一个可选classifier属性。

姓名

includes

类型

java.util.List

默认值

用户属性

spring-boot.includes

自从

1.2.0

layers

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

姓名

layers

类型

org.springframework.boot.maven.Layers

默认值

用户属性

自从

2.3.0

layout

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

姓名

layout

类型

org.springframework.boot.maven.AbstractPackagerMojo$LayoutType

默认值

用户属性

自从

2.3.11

layoutFactory

如果未设置显式布局,将用于创建可执行存档的布局工厂。3rd 方可以提供替代布局实现。

姓名

layoutFactory

类型

org.springframework.boot.loader.tools.LayoutFactory

默认值

用户属性

自从

2.3.11

mainClass

主类的名称。如果未指定,main将使用找到的第一个包含方法的编译类。

姓名

mainClass

类型

java.lang.String

默认值

用户属性

自从

1.0.0

skip

跳过执行。

姓名

skip

类型

boolean

默认值

false

用户属性

spring-boot.build-image.skip

自从

2.3.0

sourceDirectory

包含源存档的目录。

姓名

sourceDirectory

类型

java.io.File

默认值

${project.build.directory}

用户属性

自从

2.3.0

6.5. 例子

6.5.1. 自定义图像生成器

如果您需要自定义用于创建镜像的构建器或用于启动构建镜像的运行镜像,请按以下示例配置插件:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>mine/java-cnb-builder</builder>
                        <runImage>mine/java-cnb-run</runImage>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

该配置将使用一个建设者形象的名称mine/java-cnb-builder和标记latest,并命名为连串图像mine/java-cnb-run和标签latest

构建器和运行映像也可以在命令行上指定,如下例所示:

$ mvn spring-boot:build-image -Dspring-boot.build-image.builder=mine/java-cnb-builder -Dspring-boot.build-image.runImage=mine/java-cnb-run

6.5.2. 构建器配置

如果构建器使用环境变量公开配置选项,则可以使用env属性设置这些选项。

以下是在构建时配置Paketo Java buildpacks 使用的 JVM 版本的示例:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <env>
                            <BP_JVM_VERSION>8.*</BP_JVM_VERSION>
                        </env>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

如果构建器运行所在的 Docker 守护进程与构建包从中下载工件的网络位置之间存在网络代理,则您需要配置构建器以使用该代理。使用 Paketo 构建器时,这可以通过设置HTTPS_PROXY和/或HTTP_PROXY环境变量来完成,如下例所示:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <env>
                            <HTTP_PROXY>http://proxy.example.com</HTTP_PROXY>
                            <HTTPS_PROXY>https://proxy.example.com</HTTPS_PROXY>
                        </env>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

6.5.3. 运行时 JVM 配置

Paketo Java 构建包通过设置环境变量来配置 JVM 运行时环境JAVA_TOOL_OPTIONSJAVA_TOOL_OPTIONS当应用程序映像在容器中启动时,可以修改buildpack 提供的值以自定义 JVM 运行时行为。

应该存储在映像中并应用于每个部署的环境变量修改可以按照Paketo 文档中的描述进行设置,并在以下示例中显示:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <env>
                            <BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS>
                            <BPE_APPEND_JAVA_TOOL_OPTIONS>-XX:+HeapDumpOnOutOfMemoryError</BPE_APPEND_JAVA_TOOL_OPTIONS>
                        </env>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

6.5.4. 自定义图像名称

默认情况下,图像名称是从项目的artifactId和推断出来的version,类似于docker.io/library/${project.artifactId}:${project.version}. 您可以控制名称,如以下示例所示:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <name>example.com/library/${project.artifactId}</name>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

也可以在命令行上指定图像名称,如下例所示:

$ mvn spring-boot:build-image -Dspring-boot.build-image.imageName=example.com/library/my-app:v1

6.5.5. 构建包

默认情况下,构建器将使用构建器映像中包含的构建包,并以预定义的顺序应用它们。可以提供一组替代的构建包来应用构建器中未包含的构建包,或更改包含的构建包的顺序。当提供一个或多个 buildpack 时,只会应用指定的 buildpack。

以下示例指示构建器使用打包在.tgz文件中的自定义构建包,然后是构建器中包含的构建包。

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <buildpacks>
                            <buildpack>file:///path/to/example-buildpack.tgz</buildpack>
                            <buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack>
                        </buildpacks>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Buildpacks 可以以下面显示的任何形式指定。

位于 CNB Builder 中的构建包(如果构建器中只有一个与 匹配的构建包,则可以省略版本buildpack-id):

  • urn:cnb:builder:buildpack-id

  • urn:cnb:builder:buildpack-id@0.0.1

  • buildpack-id

  • buildpack-id@0.0.1

包含 buildpack 内容的目录的路径(Windows 不支持):

  • file:///path/to/buildpack/

  • /path/to/buildpack/

包含 buildpack 内容的 gzip tar 文件的路径:

  • file:///path/to/buildpack.tgz

  • /path/to/buildpack.tgz

包含打包 buildpack的 OCI 映像:

  • docker://example/buildpack

  • docker:///example/buildpack:latest

  • docker:///example/buildpack@sha256:45b23dee08…​

  • example/buildpack

  • example/buildpack:latest

  • example/buildpack@sha256:45b23dee08…​

6.5.6. 图片出版

通过启用publish选项并使用docker.publishRegistry参数配置注册表的身份验证,可以将生成的映像发布到 Docker 注册表。

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">image</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">name</span>></span>docker.example.com/library/${project.artifactId}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">name</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">publish</span>></span>true<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">publish</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">image</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">docker</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">publishRegistry</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">username</span>></span>user<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">username</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">password</span>></span>secret<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">password</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">url</span>></span>https://docker.example.com/v1/<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">url</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">email</span>></span>user@example.com<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">email</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">publishRegistry</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">docker</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

The publish option can be specified on the command line as well, as shown in this example:

$ mvn spring-boot:build-image -Dspring-boot.build-image.imageName=docker.example.com/library/my-app:v1 -Dspring-boot.build-image.publish=true

6.5.7. Docker Configuration

If you need the plugin to communicate with the Docker daemon using a remote connection instead of the default local connection, the connection details can be provided using docker parameters as shown in the following example:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">docker</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">host</span>></span>tcp://192.168.99.100:2376<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">host</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">tlsVerify</span>></span>true<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">tlsVerify</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">certPath</span>></span>/home/user/.minikube/certs<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">certPath</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">docker</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

如果构建器或运行映像存储在支持用户身份验证的私有 Docker 注册表中,则可以使用docker.builderRegistry参数提供身份验证详细信息,如下例所示:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">docker</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">builderRegistry</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">username</span>></span>user<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">username</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">password</span>></span>secret<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">password</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">url</span>></span>https://docker.example.com/v1/<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">url</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">email</span>></span>user@example.com<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">email</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">builderRegistry</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">docker</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

如果构建器或运行映像存储在支持令牌身份验证的私有 Docker 注册表中,则可以使用docker.builderRegistry参数提供令牌值,如下例所示:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">docker</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">builderRegistry</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">token</span>></span>9cbaf023786cd7...<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">token</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">builderRegistry</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">docker</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

7. 使用 Maven 运行您的应用程序

该插件包含一个运行目标,可用于从命令行启动您的应用程序,如以下示例所示:

$ mvn spring-boot:run

可以使用arguments参数指定应用程序参数,有关更多详细信息,请参阅使用应用程序参数

默认情况下,应用程序在分叉进程中执行,在命令行上设置属性不会影响应用程序。如果您需要指定一些 JVM 参数(即用于调试目的),您可以使用该jvmArguments参数,有关更多详细信息,请参阅调试应用程序。还明确支持系统属性环境变量

由于启用配置文件非常普遍,因此有专门的profiles属性为 提供快捷方式-Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev",请参阅指定活动配置文件

虽然不推荐这样做,但可以通过禁用该fork属性直接从 Maven JVM 执行应用程序。这样做意味着的jvmArgumentssystemPropertyVariablesenvironmentVariablesagents选项都将被忽略。

Spring Bootdevtools是一个用于改善 Spring Boot 应用程序开发时体验的模块。要启用它,只需将以下依赖项添加到您的项目中:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">dependencies</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">dependency</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-devtools<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">optional</span>></span>true<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">optional</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">dependency</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">dependencies</span>></span></code></span></span>

devtools运行时,它检测到的变化,当你重新编译应用程序,并自动刷新它。这不仅适用于资源,也适用于代码。它还提供了一个 LiveReload 服务器,以便在情况发生变化时自动触发浏览器刷新。

Devtools 还可以配置为仅在静态资源发生更改时才刷新浏览器(并忽略代码中的任何更改)。只需在您的项目中包含以下属性:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-properties"><span style="color:var(--highlight-meta-font-color)">spring.devtools.remote.restart.enabled</span>=<span style="color:var(--highlight-string-font-color)">false</span></code></span></span>

在 之前devtools,插件默认支持热刷新资源,现在已禁用以支持上述解决方案。您可以随时通过配置项目来恢复它:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">addResources</span>></span>true<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">addResources</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span></code></span></span>

addResources启用时,任何src/main/resources当你运行应用程序,并在任何重复found目录将被添加到应用程序类路径target/classes将被删除。这允许热刷新资源,这在开发 Web 应用程序时非常有用。例如,您可以处理 HTML、CSS 或 JavaScript 文件并立即查看您的更改,而无需重新编译您的应用程序。这也是一种允许前端开发人员无需下载和安装 Java IDE 即可工作的有用方式。

使用此功能的一个副作用是在构建时过滤资源将不起作用。

为了与repackage目标保持一致,目标run以这样一种方式构建类路径,即插件配置中排除的任何依赖项也从类路径中排除。有关更多详细信息,请参阅专用示例

有时在运行应用程序时包含测试依赖项很有用。例如,如果您想在使用存根类的测试模式下运行您的应用程序。如果您希望这样做,您可以将useTestClasspath参数设置为 true。

这仅在您运行应用程序时应用:repackage目标不会向生成的 JAR/WAR 添加测试依赖项。

7.1. spring-boot:run

org.springframework.boot:spring-boot-maven-plugin:2.5.6

就地运行应用程序。

7.1.1. 所需参数

姓名类型默认

类目录

File

${project.build.outputDirectory}

7.1.2. 可选参数

姓名类型默认

添加资源

boolean

false

代理商

File[]

争论

String[]

命令行参数

String

目录

String[]

环境变量

Map

excludeGroupIds

String

排除

List

叉子

boolean

true

包括

List

jvm参数

String

主类

String

更新

boolean

优化启动

boolean

true

简介

String[]

跳过

boolean

false

系统属性变量

Map

使用测试类路径

Boolean

false

工作目录

File

7.1.3. 参数详情

addResources

直接将 Maven 资源添加到类路径,这允许对资源进行实时就地编辑。target/classes如果ClassLoader.getResources()被调用,重复的资源将被删除以防止它们出现两次。请考虑添加spring-boot-devtools到您的项目中,因为它提供了此功能以及更多功能。

姓名

addResources

类型

boolean

默认值

false

用户属性

spring-boot.run.addResources

自从

1.0.0

agents

代理罐子的路径。注意:使用此功能需要一个分叉的进程。

姓名

agents

类型

java.io.File[]

默认值

用户属性

spring-boot.run.agents

自从

2.2.0

arguments

应传递给应用程序的参数。

姓名

arguments

类型

java.lang.String[]

默认值

用户属性

自从

1.0.0

classesDirectory

包含应打包到存档中的类和资源文件的目录。

姓名

classesDirectory

类型

java.io.File

默认值

${project.build.outputDirectory}

用户属性

自从

1.0.0

commandlineArguments

命令行中应该传递给应用程序的参数。使用空格分隔多个参数,并确保在引号之间包含多个值。指定时,优先于#arguments

姓名

commandlineArguments

类型

java.lang.String

默认值

用户属性

spring-boot.run.arguments

自从

2.2.3

directories

除了应添加到类路径的类目录之外的其他目录。

姓名

directories

类型

java.lang.String[]

默认值

用户属性

spring-boot.run.directories

自从

1.0.0

environmentVariables

应与用于运行应用程序的分叉进程关联的环境变量列表。注意:使用此功能需要一个分叉的进程。

姓名

environmentVariables

类型

java.util.Map

默认值

用户属性

自从

2.1.0

excludeGroupIds

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

姓名

excludeGroupIds

类型

java.lang.String

默认值

用户属性

spring-boot.excludeGroupIds

自从

1.1.0

excludes

要排除的工件定义的集合。该Exclude元素定义强制性groupIdartifactId性质和可选classifier性。

姓名

excludes

类型

java.util.List

默认值

用户属性

spring-boot.excludes

自从

1.1.0

fork

用于指示是否应分叉运行进程的标志。禁用分叉将禁用某些功能,例如代理、自定义 JVM 参数、开发工具或指定要使用的工作目录。

姓名

fork

类型

boolean

默认值

true

用户属性

spring-boot.run.fork

自从

1.2.0

includes

要包含的工件定义的集合。该Include元素定义了强制groupIdartifactId属性以及可选的强制groupIdartifactId属性和一个可选classifier属性。

姓名

includes

类型

java.util.List

默认值

用户属性

spring-boot.includes

自从

1.2.0

jvmArguments

应该与用于运行应用程序的分叉进程相关联的 JVM 参数。在命令行上,确保在引号之间包含多个值。注意:使用此功能需要一个分叉的进程。

姓名

jvmArguments

类型

java.lang.String

默认值

用户属性

spring-boot.run.jvmArguments

自从

1.1.0

mainClass

主类的名称。如果未指定,将使用找到的第一个包含“main”方法的编译类。

姓名

mainClass

类型

java.lang.String

默认值

用户属性

spring-boot.run.main-class

自从

1.0.0

noverify

标记表示代理需要 -noverify。

姓名

noverify

类型

boolean

默认值

用户属性

spring-boot.run.noverify

自从

1.0.0

optimizedLaunch

JVM 的启动是否应该优化。

姓名

optimizedLaunch

类型

boolean

默认值

true

用户属性

spring-boot.run.optimizedLaunch

自从

2.2.0

profiles

要激活的弹簧轮廓。指定 'spring.profiles.active' 参数的便捷快捷方式。在命令行上使用逗号分隔多个配置文件。

姓名

profiles

类型

java.lang.String[]

默认值

用户属性

spring-boot.run.profiles

自从

1.3.0

skip

跳过执行。

姓名

skip

类型

boolean

默认值

false

用户属性

spring-boot.run.skip

自从

1.3.2

systemPropertyVariables

要传递给进程的 JVM 系统属性列表。注意:使用此功能需要一个分叉的进程。

姓名

systemPropertyVariables

类型

java.util.Map

默认值

用户属性

自从

2.1.0

useTestClasspath

标记以在运行时包含测试类路径。

姓名

useTestClasspath

类型

java.lang.Boolean

默认值

false

用户属性

spring-boot.run.useTestClasspath

自从

1.3.0

workingDirectory

用于应用程序的当前工作目录。如果未指定,则将使用 basedir。注意:使用此功能需要一个分叉的进程。

姓名

workingDirectory

类型

java.io.File

默认值

用户属性

spring-boot.run.workingDirectory

自从

1.5.0

7.2. 例子

7.2.1. 调试应用程序

默认情况下,run目标在分叉进程中运行您的应用程序。如果您需要调试它,您应该添加必要的 JVM 参数以启用远程调试。以下配置暂停进程,直到调试器加入端口 5005:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">jvmArguments</span>></span>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">jvmArguments</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

这些参数也可以在命令行上指定,确保正确包装,即:

$ mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

7.2.2. 使用系统属性

可以使用该systemPropertyVariables属性指定系统属性。以下示例设置property1testproperty242:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">properties</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">my.value</span>></span>42<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">my.value</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">properties</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">systemPropertyVariables</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">property1</span>></span>test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">property1</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">property2</span>></span>${my.value}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">property2</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">systemPropertyVariables</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

If the value is empty or not defined (i.e. <my-property/>), the system property is set with an empty String as the value. Maven trims values specified in the pom so it is not possible to specify a System property which needs to start or end with a space via this mechanism: consider using jvmArguments instead.

Any String typed Maven variable can be passed as system properties. Any attempt to pass any other Maven variable type (e.g. a List or a URL variable) will cause the variable expression to be passed literally (unevaluated).

The jvmArguments parameter takes precedence over system properties defined with the mechanism above. In the following example, the value for property1 is overridden:

$ mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dproperty1=overridden"

7.2.3. Using Environment Variables

Environment variables can be specified using the environmentVariables attribute. The following example sets the 'ENV1', 'ENV2', 'ENV3', 'ENV4' env variables:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">environmentVariables</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">ENV1</span>></span>5000<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">ENV1</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">ENV2</span>></span>Some Text<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">ENV2</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">ENV3</span>/></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">ENV4</span>></span><span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">ENV4</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">environmentVariables</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

If the value is empty or not defined (i.e. <MY_ENV/>), the env variable is set with an empty String as the value. Maven trims values specified in the pom so it is not possible to specify an env variable which needs to start or end with a space.

Any String typed Maven variable can be passed as system properties. Any attempt to pass any other Maven variable type (e.g. a List or a URL variable) will cause the variable expression to be passed literally (unevaluated).

Environment variables defined this way take precedence over existing values.

7.2.4. Using Application Arguments

可以使用该arguments属性指定应用程序参数。以下示例设置两个参数:property1property2=42

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">arguments</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">argument</span>></span>property1<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">argument</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">argument</span>></span>property2=${my.value}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">argument</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">arguments</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

在命令行上,参数以相同的方式用空格分隔jvmArguments。如果参数包含空格,请确保将其引用。在以下示例中,有两个参数可用:property1property2=Hello World

$ mvn spring-boot:run -Dspring-boot.run.arguments="property1 'property2=Hello World'"

7.2.5. 指定活动配置文件

可以使用profiles参数指定用于特定应用程序的活动配置文件。

以下配置启用localdev配置文件:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">profiles</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">profile</span>></span>local<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">profile</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">profile</span>></span>dev<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">profile</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">profiles</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

要启用的配置文件也可以在命令行上指定,确保用逗号分隔它们,如以下示例所示:

$ mvn spring-boot:run -Dspring-boot.run.profiles=local,dev

8. 运行集成测试

虽然您可以很容易地从您的测试(或测试套件)本身启动您的 Spring Boot 应用程序,但在构建本身中处理它可能是可取的。为了确保围绕集成测试正确管理 Spring Boot 应用程序的生命周期,您可以使用startstop目标,如以下示例所示:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>pre-integration-test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>start<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>post-integration-test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>stop<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span></code></span></span>

这样的设置现在可以使用故障安全插件来运行您所期望的集成测试。

默认情况下,应用程序在单独的进程中启动,并使用 JMX 与应用程序通信。如果您需要配置 JMX 端口,请参阅专用示例

您还可以配置更高级的设置以在设置特定属性后跳过集成测试,请参阅专用示例

8.1. 在没有 Spring Boot 的父 POM 的情况下使用故障安全

Spring Boot 的父 POMspring-boot-starter-parent将故障安全配置<classesDirectory>${project.build.outputDirectory}. 如果没有这个配置,它会导致 Failsafe 使用编译的类而不是重新打包的 jar,Failsafe 无法加载应用程序的类。如果您不使用父 POM,则应以相同的方式配置 Failsafe,如以下示例所示:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.apache.maven.plugins<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>maven-failsafe-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">classesDirectory</span>></span>${project.build.outputDirectory}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">classesDirectory</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span></code></span></span>

8.2. spring-boot:start

org.springframework.boot:spring-boot-maven-plugin:2.5.6

启动一个 spring 应用程序。与run目标相反,这不会阻止并允许其他目标对应用程序进行操作。此目标通常用于集成测试场景,其中应用程序在测试套件之前启动并在测试套件之后停止。

8.2.1. 所需参数

姓名类型默认

类目录

File

${project.build.outputDirectory}

8.2.2. 可选参数

姓名类型默认

添加资源

boolean

false

代理商

File[]

争论

String[]

命令行参数

String

目录

String[]

环境变量

Map

excludeGroupIds

String

排除

List

叉子

boolean

true

包括

List

名称

String

端口

int

jvm参数

String

主类

String

最大尝试次数

int

更新

boolean

简介

String[]

跳过

boolean

false

系统属性变量

Map

使用测试类路径

Boolean

false

等待

long

工作目录

File

8.2.3. 参数详情

addResources

直接将 Maven 资源添加到类路径,这允许对资源进行实时就地编辑。target/classes如果ClassLoader.getResources()被调用,重复的资源将被删除以防止它们出现两次。请考虑添加spring-boot-devtools到您的项目中,因为它提供了此功能以及更多功能。

姓名

addResources

类型

boolean

默认值

false

用户属性

spring-boot.run.addResources

自从

1.0.0

agents

代理罐子的路径。注意:使用此功能需要一个分叉的进程。

姓名

agents

类型

java.io.File[]

默认值

用户属性

spring-boot.run.agents

自从

2.2.0

arguments

应传递给应用程序的参数。

姓名

arguments

类型

java.lang.String[]

默认值

用户属性

自从

1.0.0

classesDirectory

包含应打包到存档中的类和资源文件的目录。

姓名

classesDirectory

类型

java.io.File

默认值

${project.build.outputDirectory}

用户属性

自从

1.0.0

commandlineArguments

命令行中应该传递给应用程序的参数。使用空格分隔多个参数,并确保在引号之间包含多个值。指定时,优先于#arguments

姓名

commandlineArguments

类型

java.lang.String

默认值

用户属性

spring-boot.run.arguments

自从

2.2.3

directories

除了应添加到类路径的类目录之外的其他目录。

姓名

directories

类型

java.lang.String[]

默认值

用户属性

spring-boot.run.directories

自从

1.0.0

environmentVariables

应与用于运行应用程序的分叉进程关联的环境变量列表。注意:使用此功能需要一个分叉的进程。

姓名

environmentVariables

类型

java.util.Map

默认值

用户属性

自从

2.1.0

excludeGroupIds

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

姓名

excludeGroupIds

类型

java.lang.String

默认值

用户属性

spring-boot.excludeGroupIds

自从

1.1.0

excludes

要排除的工件定义的集合。该Exclude元素定义强制性groupIdartifactId性质和可选classifier性。

姓名

excludes

类型

java.util.List

默认值

用户属性

spring-boot.excludes

自从

1.1.0

fork

用于指示是否应分叉运行进程的标志。禁用分叉将禁用某些功能,例如代理、自定义 JVM 参数、开发工具或指定要使用的工作目录。

姓名

fork

类型

boolean

默认值

true

用户属性

spring-boot.run.fork

自从

1.2.0

includes

要包含的工件定义的集合。该Include元素定义了强制groupIdartifactId属性以及可选的强制groupIdartifactId属性和一个可选classifier属性。

姓名

includes

类型

java.util.List

默认值

用户属性

spring-boot.includes

自从

1.2.0

jmxName

管理 spring 应用程序生命周期的自动部署的 MBean 的 JMX 名称。

姓名

jmxName

类型

java.lang.String

默认值

用户属性

自从

jmxPort

如果应用程序是分叉的,则用于公开平台 MBeanServer 的端口。

姓名

jmxPort

类型

int

默认值

用户属性

自从

jvmArguments

应该与用于运行应用程序的分叉进程相关联的 JVM 参数。在命令行上,确保在引号之间包含多个值。注意:使用此功能需要一个分叉的进程。

姓名

jvmArguments

类型

java.lang.String

默认值

用户属性

spring-boot.run.jvmArguments

自从

1.1.0

mainClass

主类的名称。如果未指定,将使用找到的第一个包含“main”方法的编译类。

姓名

mainClass

类型

java.lang.String

默认值

用户属性

spring-boot.run.main-class

自从

1.0.0

maxAttempts

检查 spring 应用程序是否准备就绪的最大尝试次数。结合“wait”参数,这给出了一个全局超时值(默认为 30 秒)

姓名

maxAttempts

类型

int

默认值

用户属性

自从

noverify

标记表示代理需要 -noverify。

姓名

noverify

类型

boolean

默认值

用户属性

spring-boot.run.noverify

自从

1.0.0

profiles

要激活的弹簧轮廓。指定 'spring.profiles.active' 参数的便捷快捷方式。在命令行上使用逗号分隔多个配置文件。

姓名

profiles

类型

java.lang.String[]

默认值

用户属性

spring-boot.run.profiles

自从

1.3.0

skip

跳过执行。

姓名

skip

类型

boolean

默认值

false

用户属性

spring-boot.run.skip

自从

1.3.2

systemPropertyVariables

要传递给进程的 JVM 系统属性列表。注意:使用此功能需要一个分叉的进程。

姓名

systemPropertyVariables

类型

java.util.Map

默认值

用户属性

自从

2.1.0

useTestClasspath

标记以在运行时包含测试类路径。

姓名

useTestClasspath

类型

java.lang.Boolean

默认值

false

用户属性

spring-boot.run.useTestClasspath

自从

1.3.0

wait

每次尝试检查 spring 应用程序是否准备好之间等待的毫秒数。

姓名

wait

类型

long

默认值

用户属性

自从

workingDirectory

用于应用程序的当前工作目录。如果未指定,则将使用 basedir。注意:使用此功能需要一个分叉的进程。

姓名

workingDirectory

类型

java.io.File

默认值

用户属性

spring-boot.run.workingDirectory

自从

1.5.0

8.3. spring-boot:stop

org.springframework.boot:spring-boot-maven-plugin:2.5.6

停止由“开始”目标启动的应用程序。通常在测试套件完成后调用。

8.3.1. 可选参数

姓名类型默认

叉子

Boolean

名称

String

端口

int

跳过

boolean

false

8.3.2. 参数详情

fork

用于指示要停止的进程是否已分叉的标志。默认情况下,该值是从 继承的,并MavenProject具有默认分叉值 ( true)的回退。如果已设置,则它必须与StartMojo start进程使用的值相匹配。

姓名

fork

类型

java.lang.Boolean

默认值

用户属性

spring-boot.stop.fork

自从

1.3.0

jmxName

管理应用程序生命周期的自动部署的 MBean 的 JMX 名称。

姓名

jmxName

类型

java.lang.String

默认值

用户属性

自从

jmxPort

如果应用程序已分叉,则用于查找平台 MBeanServer 的端口。

姓名

jmxPort

类型

int

默认值

用户属性

自从

skip

跳过执行。

姓名

skip

类型

boolean

默认值

false

用户属性

spring-boot.stop.skip

自从

1.3.2

8.4. 例子

8.4.1. 用于集成测试的随机端口

Spring Boot 测试集成的一个很好的特性是它可以为 Web 应用程序分配一个空闲端口。start使用插件的目标时,单独启动Spring Boot应用程序,很难将实际端口传递给集成测试本身。

下面的示例展示了如何使用Build Helper Maven Plugin实现相同的功能:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.codehaus.mojo<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>build-helper-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>reserve-tomcat-port<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>reserve-network-port<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">phase</span>></span>process-resources<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">phase</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">portNames</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">portName</span>></span>tomcat.http.port<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">portName</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">portNames</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>pre-integration-test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>start<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">arguments</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">argument</span>></span>--server.port=${tomcat.http.port}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">argument</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">arguments</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>post-integration-test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>stop<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.apache.maven.plugins<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>maven-failsafe-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">systemPropertyVariables</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">test.server.port</span>></span>${tomcat.http.port}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">test.server.port</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">systemPropertyVariables</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span></code></span></span>

您现在可以test.server.port在任何集成测试中检索系统属性以创建URL服务器的专有属性。

8.4.2. 自定义 JMX 端口

jmxPort属性允许自定义插件用于与 Spring Boot 应用程序通信的端口。

此示例显示了如何在9001已使用端口的情况下自定义端口:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">jmxPort</span>></span>9009<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">jmxPort</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>pre-integration-test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>start<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>post-integration-test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>stop<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span></code></span></span>
如果您需要配置 JMX 端口,请确保在如上所示的全局配置中进行配置,以便两个目标共享。

8.4.3. 跳过集成测试

skip属性允许完全跳过 Spring Boot maven 插件的执行。

此示例展示了如何使用命令行属性跳过集成测试并仍然确保repackage目标运行:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">properties</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">skip.it</span>></span>false<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">skip.it</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">properties</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>pre-integration-test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>start<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">skip</span>></span>${skip.it}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">skip</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">id</span>></span>post-integration-test<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">id</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>stop<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">skip</span>></span>${skip.it}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">skip</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.apache.maven.plugins<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>maven-failsafe-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">skip</span>></span>${skip.it}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">skip</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

默认情况下,集成测试将运行,但此设置允许您在命令行上轻松禁用它们,如下所示:

$ mvn verify -Dskip.it=true

9. 与执行器集成

如果META-INF/build-info.properties文件存在,Spring Boot Actuator 会显示与构建相关的信息。该build-info目标生成与该项目的坐标和建造时间这样的文件。它还允许您添加任意数量的附加属性,如以下示例所示:

<span style="color:#191e1e"><span style="background-color:#ffffff"><code class="language-xml"><span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">project</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">modelVersion</span>></span>4.0.0<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">modelVersion</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>build-info<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">build</span>></span>
        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>org.springframework.boot<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">groupId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>spring-boot-maven-plugin<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">artifactId</span>></span>
                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">goal</span>></span>build-info<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goal</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">goals</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">additionalProperties</span>></span>
                                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">encoding.source</span>></span>UTF-8<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">encoding.source</span>></span>
                                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">encoding.reporting</span>></span>UTF-8<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">encoding.reporting</span>></span>
                                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">java.source</span>></span>${maven.compiler.source}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">java.source</span>></span>
                                <span style="color:var(--highlight-tag-font-color)"><<span style="color:var(--highlight-tag-font-color)">java.target</span>></span>${maven.compiler.target}<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">java.target</span>></span>
                            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">additionalProperties</span>></span>
                        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">configuration</span>></span>
                    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">execution</span>></span>
                <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">executions</span>></span>
            <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugin</span>></span>
        <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">plugins</span>></span>
    <span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">build</span>></span>
<span style="color:var(--highlight-tag-font-color)"></<span style="color:var(--highlight-tag-font-color)">project</span>></span></code></span></span>

此配置将build-info.properties在预期位置生成带有四个附加密钥的 。

maven.compiler.source并且maven.compiler.target预计将成为项目中可用的常规属性。它们将按照您的预期进行插值。

9.1. spring-boot:build-info

org.springframework.boot:spring-boot-maven-plugin:2.5.6

build-info.properties根据当前的内容生成文件MavenProject

9.1.1. 可选参数

姓名类型默认

附加属性

Map

输出文件

File

${project.build.outputDirectory}/META-INF/build-info.properties

时间

String

9.1.2. 参数详情

additionalProperties

要存储在build-info.properties文件中的其他属性。每个条目build.在生成的build-info.properties.

姓名

additionalProperties

类型

java.util.Map

默认值

用户属性

自从

outputFile

生成build-info.properties文件的位置。

姓名

outputFile

类型

java.io.File

默认值

${project.build.outputDirectory}/META-INF/build-info.properties

用户属性

自从

time

build.time以适合于 的形式用于属性的值Instant#parse(CharSequence)。默认为session.request.startTime. 要build.time完全禁用该属性,请使用'off'.

姓名

time

类型

java.lang.String

默认值

用户属性

自从

2.2.0

10. 帮助信息

help目标是一个标准的目的是显示对插件的功能信息。

10.1. spring-boot:help

org.springframework.boot:spring-boot-maven-plugin:2.5.6

显示有关 spring-boot-maven-plugin 的帮助信息。调用mvn spring-boot:help -Ddetail=true -Dgoal=<goal-name>以显示参数详细信息。

10.1.1. 可选参数

姓名类型默认

细节

boolean

false

目标

String

缩进尺寸

int

2

线长

int

80

10.1.2. 参数详情

detail

如果true,则显示每个目标的所有可设置属性。

姓名

detail

类型

boolean

默认值

false

用户属性

detail

自从

goal

显示帮助的目标的名称。如果未指定,将显示所有目标。

姓名

goal

类型

java.lang.String

默认值

用户属性

goal

自从

indentSize

每个缩进级别的空格数应为正数。

姓名

indentSize

类型

int

默认值

2

用户属性

indentSize

自从

lineLength

显示行的最大长度,应为正。

姓名

lineLength

类型

int

默认值

80

用户属性

lineLength

自从

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐