支持其他构建系统
如果你想用除 Maven、Gradle 或 Ant 以外的构建工具,可能需要自己开发插件。 可执行jar需要遵循特定格式,某些条目需要以未压缩的形式写入(详见附录中的可执行jar格式部分)。
Spring Boot Maven 和 Gradle 插件都使用Spring Boot加载工具真正产生罐子。
如果需要,可以直接使用这个库。
寻找主类
如果你不使用。Repackager.setMainClass()为了指定主类,重打包器使用 ASM 读取类文件,并尝试找到带有公共静态空缺主(String[] args)方法。
如果发现多个候选人,则会抛出例外。
重新打包实现示例
以下示例展示了一个典型的重打包实现:
-
Java
-
Kotlin
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.springframework.boot.loader.tools.Library;
import org.springframework.boot.loader.tools.LibraryCallback;
import org.springframework.boot.loader.tools.LibraryScope;
import org.springframework.boot.loader.tools.Repackager;
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 ...
}
}
import org.springframework.boot.loader.tools.Library
import org.springframework.boot.loader.tools.LibraryCallback
import org.springframework.boot.loader.tools.LibraryScope
import org.springframework.boot.loader.tools.Repackager
import java.io.File
import java.io.IOException
class MyBuildTool {
@Throws(IOException::class)
fun build() {
val sourceJarFile: File = ...
val repackager = Repackager(sourceJarFile)
repackager.setBackupSource(false)
repackager.repackage { callback: LibraryCallback -> getLibraries(callback) }
}
@Throws(IOException::class)
private fun getLibraries(callback: LibraryCallback) {
// Build system specific implementation, callback for each dependency
for (nestedJar in getCompileScopeJars()) {
callback.library(Library(nestedJar, LibraryScope.COMPILE))
}
// ...
}
private fun getCompileScopeJars(): List<File> {
return ...
}
}