Spring Boot为Maven和Gradle提供了构建工具插件。这些插件提供了各种功能,包括可执行JAR的打包。本节提供了有关这两个插件的更多细节,并提供了一些帮助,以帮助您扩展不受支持的构建系统。如果您刚刚开始,您可能需要先阅读“using.html”一节中的“using.html”。
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类文件的根目录 |
是 |
|
要运行的主应用程序类 |
否(默认是找到的第一个声明 |
以下嵌套元素可以与任务一起使用:
Element | Description |
---|---|
|
一个或多个资源集合,用于描述应添加到创建的JAR文件内容中的一组资源。 |
|
一个或多个资源集合,它们应该添加到组成应用程序的运行时依赖项类路径的JAR库集合中。 |
3.1.2. Examples
本节展示了两个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. 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
以下示例显示了典型的重新打包实施:
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”指南。