Spring Boot 为 Maven 和 Gradle 提供了构建工具插件. 插件提供了多种功能,包括可执行 jar 的打包. 本节提供了有关这两个插件的更多详细信息,以及在扩展不受支持的构建系统时所需的一些帮助. 如果您刚刚入门,则可能需要先阅读 “using-spring-boot.html” 部分中的 “using-spring-boot.html”.
3. Spring Boot AntLib 模块
Spring Boot AntLib 模块为 Apache Ant 提供了基本的 Spring Boot 支持. 您可以使用该模块创建可执行 jar. 要使用该模块,您需要在中声明一个额外的 spring-boot 命名空间 build.xml,如以下示例所示:
<project xmlns:ivy="antlib:org.apache.ivy.ant"
xmlns:spring-boot="antlib:org.springframework.boot.ant"
name="myapp" default="build">
...
</project>
您需要记住使用该 -lib 选项启动 Ant ,如以下示例所示:
$ ant -lib <directory containing spring-boot-antlib-2.3.10.RELEASE.jar>
使用 Spring Boot 部分包含将 Apache Ant 与结合使用 spring-boot-antlib 的更完整示例.
|
3.1. Spring Boot Ant 任务
一旦 spring-boot-antlib 命名空间已申报,以下附加任务:
3.1.1. 使用 “exejar” Task
您可以使用该 exejar 任务创建一个 Spring Boot 可执行 jar. 任务支持以下属性:
| 属性 | 描述 | 是否需要 |
|---|---|---|
|
要创建的目标 jar 文件 |
Yes |
|
Java类文件的根目录 |
Yes |
|
要运行的主要应用程序类 |
No (否 (默认为找到的第一个声明 |
以下嵌套元素可用于任务:
| 元素 | 描述 |
|---|---|
|
|
|
应将一个或多个 资源集合 添加到组成应用程序运行时依赖类路径的 jar 库集合中. |
3.1.2. 例子
本节显示了两个 Ant 任务示例.
<spring-boot:exejar destfile="target/my-application.jar"
classes="target/classes" start-class="com.example.MyApplication">
<resources>
<fileset dir="src/main/resources" />
</resources>
<lib>
<fileset dir="lib" />
</lib>
</spring-boot:exejar>
<exejar destfile="target/my-application.jar" classes="target/classes">
<lib>
<fileset dir="lib" />
</lib>
</exejar>
4. 支持其他构建系统
如果要使用 Maven,Gradle 或 Ant 以外的构建工具,则可能需要开发自己的插件. 可执行的 jar 需要遵循特定的格式,某些条目需要以未压缩的形式编写 (有关详细信息,请参见附录中的 “可执行 jar 格式” 部分) .
Spring Boot Maven 和 Gradle 插件都利用它们 spring-boot-loader-tools 来实际生成 jar. 如果需要,可以直接使用此库.
4.1. 重新打包 Archives
要重新打包现有存档,使其成为独立的可执行存档,请使用 org.springframework.boot.loader.tools.Repackager. 该 Repackager class 采取的是指现有的 jar 或 war archive 单个构造函数的参数.
使用两种可用 repackage() 方法之一替换原始文件或写入新目标. 在重新打包程序运行之前,还可以对其进行各种设置.
4.2. 嵌套库
重新打包 存档 时,可以使用该 org.springframework.boot.loader.tools.Libraries 接口包括对依赖文件的引用. 我们 Libraries 这里不提供任何具体的实现,因为它们通常是特定于构建系统的.
如果归档文件中已经包含库,则可以使用 Libraries.NONE.
4.3. 查找 Main Class
如果您不用于 Repackager.setMainClass() 指定主类,则重新包装器将使用 ASM 读取类文件,并尝试使用一种 public static void main(String[] args) 方法找到合适的类. 如果找到多个候选者,则会引发异常.
4.4. 重新打包示例实现
以下示例显示了典型的重新打包实现:
Repackager repackager = new Repackager(sourceJarFile);
repackager.setBackupSource(false);
repackager.repackage(new Libraries() {
@Override
public void doWithLibraries(LibraryCallback callback) throws IOException {
// Build system specific implementation, callback for each dependency
// callback.library(new Library(nestedFile, LibraryScope.COMPILE));
}
});
5. 接下来阅读什么
如果您对构建工具插件的工作方式感兴趣,可以查看 spring-boot-tools 上的模块. 可执行 jar 格式的更多技术细节在 附录中 介绍.
如果您有与构建相关的特定问题,可以查看 “how-to” 指南.