74. 支持其他构建系统

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

Spring Boot Maven 和 Gradle 插件都使用spring-boot-loader-tools来实际生成 jar。如果需要,可以直接使用此库。

74.1 重新打包 Files

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

74.2 嵌套库

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

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

74.3 查找主要类

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

74.4 重新打包实施示例

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

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));
			}
		});