此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1! |
Spring Boot 包括 Maven 和 Gradle 的构建插件。 本节回答了有关这些插件的常见问题。
生成构建信息
Maven 插件和 Gradle 插件都允许生成包含项目坐标、名称和版本的构建信息。
插件也可以配置为通过配置添加其他属性。
当存在这样的文件时,Spring Boot 会自动配置一个 bean。BuildProperties
若要使用 Maven 生成生成信息,请为目标添加执行,如以下示例所示:build-info
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.3.2-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
有关更多详细信息,请参阅 Spring Boot Maven 插件文档。 |
以下示例对 Gradle 执行相同的操作:
springBoot {
buildInfo()
}
有关更多详细信息,请参阅 Spring Boot Gradle 插件文档。 |
有关更多详细信息,请参阅 Spring Boot Maven 插件文档。 |
有关更多详细信息,请参阅 Spring Boot Gradle 插件文档。 |
生成 Git 信息
Maven 和 Gradle 都允许生成一个文件,其中包含构建项目时源代码存储库状态的信息。git.properties
git
对于 Maven 用户,POM 包含一个预配置的插件来生成文件。
要使用它,请将 Git 提交 ID 插件
的以下声明添加到您的 POM:spring-boot-starter-parent
git.properties
<build>
<plugins>
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Gradle 用户可以使用 gradle-git-properties
插件获得相同的结果,如以下示例所示:
plugins {
id "com.gorylenko.gradle-git-properties" version "2.4.1"
}
Maven 和 Gradle 插件都允许配置其中包含的属性。git.properties
提交时间应与以下格式匹配:.
这是上面列出的两个插件的默认格式。
使用此格式可以将时间解析为 a 及其格式,当序列化为 JSON 时,由 Jackson 的日期序列化配置设置控制。git.properties yyyy-MM-dd’T’HH:mm:ssZ Date |
提交时间应与以下格式匹配:.
这是上面列出的两个插件的默认格式。
使用此格式可以将时间解析为 a 及其格式,当序列化为 JSON 时,由 Jackson 的日期序列化配置设置控制。git.properties yyyy-MM-dd’T’HH:mm:ssZ Date |
每个 Spring Boot 版本都是针对这组特定的第三方依赖项进行设计和测试的。 覆盖版本可能会导致兼容性问题。 |
使用 Maven 创建可执行 JAR
可用于创建可执行的“胖”JAR。
如果您使用 POM,您可以声明插件,并且您的 jar 将按如下方式重新打包:spring-boot-maven-plugin
spring-boot-starter-parent
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果您不使用父 POM,您仍然可以使用该插件。
但是,您必须另外添加一个部分,如下所示:<executions>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.3.2-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
有关完整的使用详细信息,请参阅插件文档。
使用 Spring Boot 应用程序作为依赖项
与 war 文件一样,Spring Boot 应用程序不应用作依赖项。 如果应用程序包含要与其他项目共享的类,则建议将该代码移动到单独的模块中。 然后,您的应用程序和其他项目可以依赖单独的模块。
如果无法按照上述建议重新排列代码,则必须将 Spring Boot 的 Maven 和 Gradle 插件配置为生成适合用作依赖项的单独工件。
可执行存档不能用作依赖项,因为可执行 jar 格式将应用程序类打包在 中。
这意味着当可执行 jar 用作依赖项时,无法找到它们。BOOT-INF/classes
若要生成两个项目(一个可用作依赖项,另一个可执行),必须指定分类器。 此分类器应用于可执行存档的名称,将默认存档保留为依赖项。
若要在 Maven 中配置分类器,可以使用以下配置:exec
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
在可执行 Jar 运行时提取特定库
可执行 jar 中的大多数嵌套库无需解压缩即可运行。
但是,某些库可能会出现问题。
例如,JRuby 包含自己的嵌套 jar 支持,它假定 始终以文件的形式直接提供。jruby-complete.jar
要处理任何有问题的库,您可以标记在可执行 jar 首次运行时应自动解压缩特定的嵌套 jar。
此类嵌套 jar 写入 system 属性标识的临时目录下。java.io.tmpdir
应注意确保对操作系统进行了配置,以便在应用程序仍在运行时不会删除已解压缩到临时目录的 jar。 |
例如,要指示 JRuby 应被标记为使用 Maven 插件解包,您需要添加以下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<requiresUnpack>
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby-complete</artifactId>
</dependency>
</requiresUnpack>
</configuration>
</plugin>
</plugins>
</build>
应注意确保对操作系统进行了配置,以便在应用程序仍在运行时不会删除已解压缩到临时目录的 jar。 |
创建具有排除项的不可执行 JAR
通常,如果将可执行文件和不可执行文件作为两个单独的构建产品,则可执行文件版本具有库 jar 中不需要的其他配置文件。
例如,配置文件可能从不可执行的 JAR 中排除。application.yaml
在 Maven 中,可执行 jar 必须是主工件,您可以为库添加分类 jar,如下所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>lib</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>lib</classifier>
<excludes>
<exclude>application.yaml</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
从 Ant 构建可执行存档,而无需使用 spring-boot-antlib
要使用 Ant 进行构建,您需要获取依赖项、编译,然后创建一个 jar 或战争存档。
要使其可执行,您可以使用该模块,也可以按照以下说明进行操作:spring-boot-antlib
-
如果要构建 jar,请将应用程序的类和资源打包到嵌套目录中。 如果要构建 war,请像往常一样将应用程序的类打包到嵌套目录中。
BOOT-INF/classes
WEB-INF/classes
-
在 jar 或 war 的嵌套目录中添加运行时依赖项。 切记不要压缩存档中的条目。
BOOT-INF/lib
WEB-INF/lib
-
在 jar 或 war 的嵌套目录中添加(嵌入式容器)依赖项。 切记不要压缩存档中的条目。
provided
BOOT-INF/lib
WEB-INF/lib-provided
-
在存档的根目录下添加类(以便 可用)。
spring-boot-loader
Main-Class
-
使用适当的启动器(例如用于 jar 文件)作为清单中的属性,并指定它所需的其他属性作为清单条目 — 主要是通过设置属性。
JarLauncher
Main-Class
Start-Class
以下示例演示如何使用 Ant 构建可执行存档:
<target name="build" depends="compile">
<jar destfile="target/${ant.project.name}-${spring-boot.version}.jar" compress="false">
<mappedresources>
<fileset dir="target/classes" />
<globmapper from="*" to="BOOT-INF/classes/*"/>
</mappedresources>
<mappedresources>
<fileset dir="src/main/resources" erroronmissingdir="false"/>
<globmapper from="*" to="BOOT-INF/classes/*"/>
</mappedresources>
<mappedresources>
<fileset dir="${lib.dir}/runtime" />
<globmapper from="*" to="BOOT-INF/lib/*"/>
</mappedresources>
<zipfileset src="${lib.dir}/loader/spring-boot-loader-jar-${spring-boot.version}.jar" />
<manifest>
<attribute name="Main-Class" value="org.springframework.boot.loader.launch.JarLauncher" />
<attribute name="Start-Class" value="${start-class}" />
</manifest>
</jar>
</target>