最新の安定バージョンについては、Spring Boot 3.4.1 を使用してください! |
他のビルドシステムのサポート
Maven、Gradle、Ant 以外のビルドツールを使用する場合は、独自のプラグインを開発する必要がある可能性があります。実行可能な jar は特定の形式に従う必要があり、特定のエントリは非圧縮形式で書き込む必要があります (詳細については、付録の実行可能な jar 形式のセクションを参照してください)。
Spring Boot Maven および Gradle プラグインは、両方とも spring-boot-loader-tools
を使用して実際に jar を生成します。必要に応じて、このライブラリを直接使用できます。
アーカイブの再パッケージ化
既存のアーカイブを再パッケージ化して自己完結型の実行可能アーカイブにするには、Repackager
(Javadoc) を使用します。Repackager
(Javadoc) クラスは、既存の jar または war アーカイブを参照する単一のコンストラクター引数を取ります。使用可能な 2 つの repackage()
メソッドのいずれかを使用して、元のファイルを置き換えるか、新しい宛先に書き込みます。再パッケージ化を実行する前に、さまざまな設定を構成することもできます。
ネストされたライブラリ
アーカイブを再パッケージ化するときに、Libraries
(Javadoc) インターフェースを使用して依存ファイルへの参照を含めることができます。Libraries
(Javadoc) の具体的な実装は通常ビルドシステム固有であるため、ここでは提供しません。
アーカイブにすでにライブラリが含まれている場合は、Libraries.NONE
(Javadoc) を使用できます。
メインクラスを見つける
Repackager.setMainClass()
を使用してメインクラスを指定しない場合、リパッケージャは ASM (英語) を使用してクラスファイルを読み取り、public static void main(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 ...
}
}