Spring Boot 八- 构建工具插件
Spring Boot提供Maven和Gradle的构建工具插件。插件提供了各种功能,包括可执行jar的打包。 本节提供有关这两个插件的更多详细信息,以及如果需要扩展不受支持的构建系统的一些帮助。 如果你刚刚开始,你可能需要先阅读第三部分“使用Spring Boot”一节中的“第13章,构建系统”。
Spring Boot Maven plugin
Spring Boot Maven插件在Maven中提供Spring Boot支持,允许你打包可执行的jar或war包并可以直接运行应用程序。要使用它,你必须使用Maven 3.2(或更高版本)。
有关完整的插件文档,请参阅Spring Boot Maven插件网站。
引入插件
要使用Spring Boot Maven Plugin,只需在pom.xml
的plugins
部分包含相应的XML
1 |
|
此配置将重新打包在Maven生命周期的package
阶段期间构建的jar或war。 以下示例展示了target
目录中的重新打包的jar以及原始jar:
1 | $ mvn package |
如果你没有包含上述的<execution />
配置,你可以自行运行该插件(但是仅当使用package目标时)。 例如:
1 | $ mvn package spring-boot:repackage |
如果你正在使用里程碑或快照版本,还需要添加适当的pluginRepository
元素:
1 | <pluginRepositories> |
打包可执行jar的war文件
一旦你的pom.xml中包含了spring-boot-maven-plugin
,它将自动尝试重写包,使其可以使用spring-boot:repackage
目标来执行。你应该使用常规的packaging
元素配置你的项目来构建jar或war(如适用):
1 | <?xml version="1.0" encoding="UTF-8"?> |
你的现有包将在package
阶段由Spring Boot增强。 你要启动的主类可以使用配置选项指定,也可以以常规方式向清单添加Main-Class
属性。 如果你没有指定一个主类,那么插件将搜索一个带有public static void main(String[] args)
方法的类。
要构建和运行项目artifact,可以输入以下内容:
1 | $ mvn package |
要构建可执行并可部署到外部容器的war文件,你需要将嵌入式容器依赖项标记为“provided”,例如:
1 |
|
有关如何创建可部署的war文件的更多详细信息,请参阅”第86.1节”创建可部署的war文件”“部分。
插件信息页面中提供了高级配置选项和示例。
Spring Boot Gradle plugin
Spring Boot Gradle插件在Gradle中提供Spring Boot支持,允许你打包可执行的jar或war 包,运行Spring Boot应用程序并使用spring-boot-dependencies
提供的依赖关系管理。 它需要Gradle 3.4级或更高版本。 请参阅插件的文档了解更多信息:
Spring Boot AntLib 模块
Spring Boot Ant 任务
spring-boot:exejar
示例
spring-boot:findmainclass
示例
其他构建系统支持
如果要使用除Maven,Gradle或Ant之外的构建工具,则可能需要开发自己的插件。 可执行的jar需要遵循特定格式,某些条目需要以未压缩的形式写入(有关详细信息,请参阅附录中的可执行jar格式部分)。
Spring Boot Maven和Gradle插件都使用spring-boot-loader-tools
来实际生成jar。 如果需要,你也可以直接使用这个库。
重新打包
要重新打包现有的包,以便它成为一个独立的可执行包,请使用org.springframework.boot.loader.tools.Repackager
。Repackager
类接受一个引用现有jar或war包的构造函数参数。 使用两个可用的repackage()
方法之一替换原始文件或写入新的目录。 在重新打包运行之前,也可以配置各种设置。
内部库
在重新打包时,可以使用org.springframework.boot.loader.tools.Libraries
接口来引用依赖关系文件。我们不提供这里的库的任何具体实现,因为它们通常是构建系统特定的。
如果你的包已经包含库,你可以使用Libraries.NONE
。
查询main 类
如果不使用Repackager.setMainClass()
来指定主类,则重新打包程序将使用ASM
读取类文件,并尝试找到拥有public static void main(String [] args)
方法的合适的类。 如果找到多个候选者,则抛出异常。
重新打包实现示例
这是一个典型的重新打包例子:
1 | Repackager repackager = new Repackager(sourceJarFile); |
延伸阅读
如果你对构建工具插件的工作原理感兴趣,可以在GitHub上查看spring-boot-tools
模块。 可执行jar格式的更多技术细节在附录中有所描述。
如果你有特殊的构建问题,可以查看“how-to”指南。