Spring Boot为Maven和Gradle提供了构建工具插件。插件提供了多种功能,包括可执行jar的打包。本节提供有关这两个插件的更多详细信息,以及在扩展不受支持的构建系统时所需的一些帮助。如果您刚刚入门,则可能需要先阅读“ using-spring-boot.html ”部分中的“ using-spring-boot.html ”。

1. Spring Boot Maven插件

Spring Boot Maven插件在Maven中提供了Spring Boot支持,使您可以打包可执行jar或war归档文件并“就地”运行应用程序。要使用它,必须使用Maven 3.2(或更高版本)。
请参考插件的文档以了解更多信息:

  • 参考(HTMLPDF
  • API

    2. Spring Boot Gradle插件

    Spring Boot Gradle插件在Gradle中提供了Spring Boot支持,使您可以打包可执行jar或war归档文件,运行Spring Boot应用程序以及使用所提供的依赖项管理spring-boot-dependencies。它需要Gradle 6(6.3或更高版本)。还支持Gradle 5.6.x,但不赞成使用此支持,在将来的版本中将删除它。请参考插件的文档以了解更多信息:

  • 参考(HTMLPDF

  • API

    3. Spring Boot AntLib模块

    Spring Boot AntLib模块为Apache Ant提供了基本的Spring Boot支持。您可以使用该模块创建可执行jar。要使用该模块,您需要在中声明一个额外的spring-boot名称空间build.xml,如以下示例所示:
    1. <project xmlns:ivy="antlib:org.apache.ivy.ant"
    2. xmlns:spring-boot="antlib:org.springframework.boot.ant"
    3. name="myapp" default="build">
    4. ...
    5. </project>
    您需要记住使用该-lib选项来启动Ant ,如以下示例所示:
    $ ant -lib <包含spring-boot-antlib-2.4.0-SNAPSHOT.jar的目录>
“使用Spring Boot”部分包括将Apache Ant与结合使用spring-boot-antlib的更完整示例。

3.1。Spring Boot Ant任务

一旦spring-boot-antlib命名空间已申报,以下附加任务:

属性 描述 需要
destfile 要创建的目标jar文件
classes Java类文件的根目录
start-class 要运行的主要应用程序类 (默认为找到的第一个声明main方法的类)

以下嵌套元素可用于任务:

元件 描述
resources 一个或多个资源集合,描述了应该添加到创建的jar文件内容中的一组资源
lib 应将一个或多个资源集合添加到组成应用程序的运行时依赖项类路径的jar库集合中。

3.1.2。例子

本节显示了两个Ant任务示例。
指定开始等级

  1. <spring-boot:exejar destfile="target/my-application.jar"
  2. classes="target/classes" start-class="com.example.MyApplication">
  3. <resources>
  4. <fileset dir="src/main/resources" />
  5. </resources>
  6. <lib>
  7. <fileset dir="lib" />
  8. </lib>
  9. </spring-boot:exejar>

检测入门班

  1. <exejar destfile="target/my-application.jar" classes="target/classes">
  2. <lib>
  3. <fileset dir="lib" />
  4. </lib>
  5. </exejar>

3.2。使用“ findmainclass”任务

findmainclass任务在内部exejar用于查找声明的类main。如有必要,您也可以在构建中直接使用此任务。支持以下属性:

属性 描述 需要
classesroot Java类文件的根目录 (除非mainclass指定)
mainclass 可用于短路main班级搜索 没有
property 应该与结果一起设置的Ant属性 (如果未指定,将记录结果)

3.2.1。例子

本节包含使用的三个示例findmainclass
查找并记录

  1. <findmainclass classesroot="target/classes" />

查找并设置

  1. <findmainclass classesroot="target/classes" property="main-class" />

覆盖并设置

  1. <findmainclass mainclass="com.example.MainClass" property="main-class" />

4.支持其他构建系统

如果要使用Maven,Gradle或Ant以外的构建工具,则可能需要开发自己的插件。可执行jar需要遵循特定的格式,某些条目需要以未压缩的形式编写(有关详细信息,请参见附录中的“可执行jar格式”部分)。
Spring Boot Maven和Gradle插件都利用它们spring-boot-loader-tools来实际生成jar。如果需要,可以直接使用此库。

4.1。重新打包档案

要重新打包现有存档,使其成为独立的可执行存档,请使用org.springframework.boot.loader.tools.Repackager。该Repackager班采取的是指现有的罐子或战争归档单个构造函数的参数。使用两种可用repackage()方法之一替换原始文件或写入新目标。在重新打包程序运行之前,还可以在其上配置各种设置。

4.2。嵌套库

重新打包档案时,可以使用该org.springframework.boot.loader.tools.Libraries接口包含对依赖文件的引用。我们Libraries这里没有提供任何具体的实现,因为它们通常是特定于构建系统的。
如果您的存档中已经包含库,则可以使用Libraries.NONE

4.3。寻找主班

如果您不用于Repackager.setMainClass()指定主类,则重新包装器将使用ASM读取类文件,并尝试使用一种public static void main(String[] args)方法找到合适的类。如果找到多个候选者,则会引发异常。

4.4。重新打包实施示例

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

  1. Repackager repackager = new Repackager(sourceJarFile);
  2. repackager.setBackupSource(false);
  3. repackager.repackage(new Libraries() {
  4. @Override
  5. public void doWithLibraries(LibraryCallback callback) throws IOException {
  6. // Build system specific implementation, callback for each dependency
  7. // callback.library(new Library(nestedFile, LibraryScope.COMPILE));
  8. }
  9. });

5.接下来阅读什么

如果您对构建工具插件的工作方式感兴趣,可以查看spring-boot-toolsGitHub上的模块。可执行jar格式的更多技术细节在附录中介绍
如果您有与构建相关的特定问题,可以查看“操作方法”指南。