8.4 支持其他构建系统

优质
小牛编辑
131浏览
2023-12-01

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

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

8.4.1 重新打包Archives

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

8.4.2 嵌套Libraries

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

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

8.4.3 找到Main类

如果不使用Repackager.setMainClass()指定主类,则repackager使用ASM读取类文件并尝试使用public static void main(String[] args)方法查找合适的类。 如果找到多个候选项,则抛出异常。

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