Spring Boot为Maven和Gradle提供了构建工具插件。这些插件提供了各种功能,包括可执行JAR的打包。本节提供了有关这两个插件的更多细节,并提供了一些帮助,以帮助您扩展不受支持的构建系统。如果您刚刚开始,您可能需要先阅读“using.html”一节中的“using.html”。

1. Spring Boot Maven Plugin

Spring Boot Maven插件在Maven中提供了对Spring Boot的支持,允许您打包可执行的JAR或WAR归档文件并“就地”运行应用程序。要使用它,您必须使用Maven3.2(或更高版本)。

有关详细信息,请参阅该插件的文档:

2. Spring Boot Gradle Plugin

Spring Boot Gradle插件在Gradle中提供了对Spring Boot的支持,允许您打包可执行的JAR或WAR归档文件、运行Spring Boot应用程序,以及使用SpringBoot-Dependency提供的依赖项管理。它需要Gradle 7.x(7.5或更高版本)。有关详细信息,请参阅该插件的文档:

3. Spring Boot AntLib Module

Spring Boot AntLib模块为ApacheAnt提供基本的Spring Boot支持。您可以使用该模块来创建可执行JAR。要使用该模块,您需要在您的Build.xml中声明一个额外的SpringBoot命名空间,如下例所示:

<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-3.0.0.jar>
           
           
The “Using Spring Boot” section includes a more complete example of using Apache Ant with spring-boot-antlib.

3.1. Spring Boot Ant Tasks

声明Spring-Boot-antlib命名空间后,可以执行以下其他任务:

3.1.1. Using the “exejar” Task

您可以使用exejar任务创建一个Spring Boot可执行JAR。该任务支持以下属性:

Attribute Description Required

目标文件

要创建的目标JAR文件

Java类文件的根目录

开始类

要运行的主应用程序类

(默认是找到的第一个声明main方法的类)

以下嵌套元素可以与任务一起使用:

Element Description

资源

一个或多个资源集合,用于描述应添加到创建的JAR文件内容中的一组资源。

一个或多个资源集合,它们应该添加到组成应用程序的运行时依赖项类路径的JAR库集合中。

3.1.2. Examples

本节展示了两个Ant任务的示例。

Specify start-class
<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>
             
             
Detect start-class
<exejar destfile="target/my-application.jar" classes="target/classes">
    <lib>
        <fileset dir="lib" />
    </lib>
</exejar>
             
             

3.2. Using the “findmainclass” Task

exejar在内部使用findmainclass任务来定位声明main的类。如有必要,您还可以在生成中直接使用此任务。支持以下属性:

Attribute Description Required

类根

Java类文件的根目录

(除非指定了mainclass)

主类

可用于缩短Main类搜索的路径

不是

属性

应使用结果设置的Ant属性

(如果未指定,则记录结果)

3.2.1. Examples

本节包含使用findmainclass的三个示例。

Find and log
<findmainclass classesroot="target/classes" />
             
             
Find and set
<findmainclass classesroot="target/classes" property="main-class" />
             
             
Override and set
<findmainclass mainclass="com.example.MainClass" property="main-class" />
             
             

4. Supporting Other Build Systems

如果您想使用Maven、Gradle或Ant以外的构建工具,您可能需要开发自己的插件。可执行JAR需要遵循特定的格式,并且某些条目需要以未压缩的形式编写(有关详细信息,请参阅附录中的“可执行JAR格式”一节)。

Spring Boot Maven和Gradle插件都使用Spring-Boot-Loader-Tools来实际生成JAR。如果需要,您可以直接使用该库。

4.1. Repackaging Archives

要重新打包现有的归档文件,使其成为自包含的可执行归档文件,请使用org.springframework.boot.loader.tools.Repackager.rePackager类接受引用现有JAR或WAR归档的单个构造函数参数。使用两个可用的repack()方法之一替换原始文件或写入新目标。在重新打包程序运行之前,还可以在其上配置各种设置。

4.2. Nested Libraries

在重新打包归档文件时,可以使用org.springframework.boot.loader.tools.Libraries接口包括对依赖项文件的引用。我们在这里不提供的任何具体实现,因为它们通常是特定于构建系统的。

如果您的存档已包含库,则可以使用Libraries.NONE

4.3. Finding a Main Class

如果不使用Repackager.setMainClass()指定主类,则重新打包程序将使用ASM读取类文件,并尝试使用公共静态空Main(字符串[]args)方法查找合适的类。如果找到多个候选人,则会引发异常。

4.4. Example Repackage Implementation

以下示例显示了典型的重新打包实施:

Java
Kotlin
import java.io.File; import java.io.IOException; import java.util.List; import org.springframework.boot.loader.tools.Library; import org.springframework.boot.loader.tools.LibraryCallback; import org.springframework.boot.loader.tools.LibraryScope; import org.springframework.boot.loader.tools.Repackager; public class MyBuildTool { public void build() throws IOException { File sourceJarFile = ... Repackager repackager = new Repackager(sourceJarFile); repackager.setBackupSource(false); repackager.repackage(this::getLibraries); } private void getLibraries(LibraryCallback callback) throws IOException { // Build system specific implementation, callback for each dependency for (File nestedJar : getCompileScopeJars()) { callback.library(new Library(nestedJar, LibraryScope.COMPILE)); } // ... } private List<File> getCompileScopeJars() { return ... } } 
            
            

5. What to Read Next

如果您对构建工具插件的工作方式感兴趣,可以查看GitHub上的Spring-ot-Tools模块。可执行JAR格式的更多技术细节在附录中介绍。

如果您有与构建相关的特定问题,请参阅“How-to”指南。