Part VIII. Build tool plugins
文档说明:
- 文档对应的版本为 2.1.0.M3
- 这不是文档的完整中文翻译,也有可能跟原文文字不一一对应,只是我阅读文档时候做的简单笔记
- 如果对应的章节没有任何中文,有可能是文档内容比较少,建议直接看原文,或者是我不感兴趣的部分
- 目录标题没有做翻译,首先标题一般一眼就能看懂什么意思,不做翻译还能保证原文意思,其次也方便对应到原文位置
70. Spring Boot Maven Plugin
Maven 版本要求 3.2 或者以上
Note: Spring Boot Maven Plugin Site
70.1 Including the Plugin
在 pom.xml 引入依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.0.M3</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
70.2 Packaging Executable Jar and War Files
指定需要打包的格式:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- ... -->
<packaging>jar</packaging>
<!-- ... -->
</project>
如果没有配置 Main-Class 属性,插件会查找 Main 方法:
$ mvn package
$ java -jar target/mymodule-0.0.1-SNAPSHOT.jar
71. Spring Boot Gradle Plugin
Gradle 版本要求 4.4 或者以上
文档没有给出太多的描述,提供了下面的文档链接:
72. Spring Boot AntLib Module
Spring Boot AntLib 给 Apache Ant 提供了基本的 Spring Boot 支持,需要在 build.xml 添加 spring-boot 的命名空间。
<project xmlns:ivy="antlib:org.apache.ivy.ant"
xmlns:spring-boot="antlib:org.springframework.boot.ant"
name="myapp" default="build">
...
</project>
启动 Ant 需要加上 -lib 参数:
$ ant -lib <folder containing spring-boot-antlib-2.1.0.M3.jar>
72.1 Spring Boot Ant Tasks
添加 spring-boot-antlib 后,下面的两个 task 就可用了。
- spring-boot:exejar
- spring-boot:findmainclass
72.1.1 spring-boot:exejar
exejar task 可用的属性列表
72.1.2 Examples
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>
72.2 spring-boot:findmainclass
findmainclass task 可用的属性列表
Examples
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" />
73. Supporting Other Build Systems
如果你想使用 Maven、Gradle、Ant 以外的构建工具,你很有可能得开发自己的插件。可执行的 jar 文件有一定的格式要求,详情可参看文档的附录。
Spring Boot 的 Maven 和 Gradle 插件都有使用到 spring-boot-loader-tools,也许你也应该直接使用它。
73.1 Repackaging Archives
org.springframework.boot.loader.tools.Repackager
73.2 Nested Libraries
org.springframework.boot.loader.tools.Libraries
73.3 Finding a Main Class
通过 ASM 读取 class 文件信息来查找 Main Class。
73.4 Example Repackage Implementation
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));
}
});
74. What to Read Next
- 更多构建工具的工作原理可参看其源代码
- 更多细节内容可参看文档的附录
- 构建相关的问题也可参看 How-to guides
网友评论