Spring Boot は、Maven および Gradle のビルドツールプラグインを提供します。プラグインは、実行可能 jar のパッケージ化など、さまざまな機能を提供します。このセクションでは、両方のプラグインの詳細と、サポートされていないビルドシステムを継承する必要がある場合のヘルプを提供します。始めたばかりの場合は、最初に「using-spring-boot.html」セクションの「using-spring-boot.html」を参照してください。

1. Spring Boot Maven プラグイン

Spring Boot Maven プラグインは、Maven で Spring Boot サポートを提供し、実行可能な jar または war アーカイブをパッケージ化して、アプリケーションを「インプレース」で実行できます。これを使用するには、Maven 3.2 以降を使用する必要があります。

詳細については、プラグインのドキュメントを参照してください:

2. Spring Boot Gradle プラグイン

Spring Boot Gradle プラグインは、Gradle で Spring Boot サポートを提供し、実行可能な jar または war アーカイブをパッケージ化し、Spring Boot アプリケーションを実行し、spring-boot-dependencies によって提供される依存関係管理を使用できるようにします。Gradle 6(6.3 以降)が必要です。Gradle 5.6.x もサポートされていますが、このサポートは推奨されておらず、将来のリリースで削除される予定です。詳細については、プラグインのドキュメントを参照してください:

3. Spring Boot AntLib モジュール

Spring Boot AntLib モジュールは、Apache Ant の基本的な Spring Boot サポートを提供します。モジュールを使用して実行可能 jar を作成できます。モジュールを使用するには、次の例に示すように、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>

次の例に示すように、-lib オプションを使用して Ant を開始することを忘れないでください。

$ ant -lib <directory containing spring-boot-antlib-2.4.0.jar>
「Spring Boot の使用」セクションには、spring-boot-antlib で Apache Ant を使用するより完全な例が含まれています。

3.1. Spring Boot Ant タスク

spring-boot-antlib 名前空間が宣言されると、次の追加タスクが利用可能になります。

3.1.1. 「exejar」タスクの使用

exejar タスクを使用して、Spring Boot 実行可能ファイル jar を作成できます。タスクでは次の属性がサポートされています。

属性 説明 必須

destfile

作成する宛先 jar ファイル

はい

classes

Java クラスファイルのルートディレクトリ

はい

start-class

実行するメインアプリケーションクラス

いいえ(デフォルトは、main メソッドを宣言する最初に見つかったクラスです)

タスクでは、次のネストされた要素を使用できます。

要素 説明

resources

作成された jar ファイルのコンテンツに追加されるリソース: Apache (英語) のセットを記述する 1 つ以上のリソースコレクション: Apache (英語)

lib

アプリケーションのランタイム依存性クラスパスを構成する jar ライブラリのセットに追加する必要がある 1 つ以上のリソースコレクション: Apache (英語)

3.1.2. サンプル

このセクションでは、Ant タスクの 2 つの例を示します。

開始クラスを指定する
<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>
開始クラスを検出する
<exejar destfile="target/my-application.jar" classes="target/classes">
    <lib>
        <fileset dir="lib" />
    </lib>
</exejar>

3.2. 「findmainclass」タスクの使用

findmainclass タスクは、main を宣言するクラスを見つけるために exejar によって内部的に使用されます。必要に応じて、ビルドでこのタスクを直接使用することもできます。次の属性がサポートされています。

属性 説明 必須

classesroot

Java クラスファイルのルートディレクトリ

はいmainclass が指定されていない場合)

mainclass

main クラス検索の短絡に使用できます

いいえ

property

結果で設定する必要がある Ant プロパティ

いいえ(指定しない場合、結果が記録されます)

3.2.1. サンプル

このセクションには、findmainclass の 3 つの使用例が含まれています。

検索して記録する
<findmainclass classesroot="target/classes" />
検索と設定
<findmainclass classesroot="target/classes" property="main-class" />
オーバーライドして設定
<findmainclass mainclass="com.example.MainClass" property="main-class" />

4. 他のビルドシステムのサポート

Maven、Gradle、または Ant 以外のビルドツールを使用する場合は、おそらく独自のプラグインを開発する必要があります。実行可能 jar は特定の形式に従う必要があり、特定のエントリは非圧縮形式で記述する必要があります(詳細については、付録の「実行可能 jar 形式」セクションを参照してください)。

Spring Boot Maven および Gradle プラグインは、両方とも spring-boot-loader-tools を使用して実際に jar を生成します。必要に応じて、このライブラリを直接使用できます。

4.1. アーカイブの再パッケージ化

自己完結型の実行可能アーカイブになるように既存のアーカイブを再パッケージ化するには、org.springframework.boot.loader.tools.Repackager を使用します。Repackager クラスは、既存の jar または war アーカイブを参照する単一のコンストラクター引数を取ります。2 つの使用可能な repackage() メソッドのいずれかを使用して、元のファイルを置き換えるか、新しい宛先に書き込みます。リパッケージャーを実行する前に、さまざまな設定を構成することもできます。

4.2. ネストされたライブラリ

アーカイブを再パッケージするとき、org.springframework.boot.loader.tools.Libraries インターフェースを使用して、依存関係ファイルへの参照を含めることができます。Libraries の具体的な実装は、ビルドシステム固有であるため、ここでは提供しません。

アーカイブにすでにライブラリが含まれている場合は、Libraries.NONE を使用できます。

4.3. メインクラスを見つける

Repackager.setMainClass() を使用してメインクラスを指定しない場合、リパッケージャは ASM (英語) を使用してクラスファイルを読み取り、public static void main(String[] args) メソッドで適切なクラスを見つけようとします。複数の候補が見つかった場合、例外がスローされます。

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

5. 次のステップ

ビルドツールプラグインの機能に興味がある場合は、GitHub の spring-boot-tools: GitHub (英語) モジュールを参照してください。実行可能な jar 形式のより技術的な詳細については、付録で説明します。

特定のビルド関連の質問がある場合は、「使い方」ガイドを参照してください。