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 以降を使用する必要があります。

完全なプラグインのドキュメントについては、Spring Boot Maven プラグインサイトを参照してください。

1.1. プラグインを含める

Spring Boot Maven プラグインを使用するには、次の例に示すように、pom.xmlplugins セクションに適切な XML を含めます。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- ... -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.6.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

上記の構成は、Maven ライフサイクルの package フェーズで構築された jar または war を再パッケージ化します。次の例は、target ディレクトリ内の元の jar と再パッケージ化された jar の両方を示しています。

$ mvn package
$ ls target/*.jar
target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original

前の例に示すように <execution/> 構成を含めない場合、次の例に示すように、プラグインを単独で実行できます(ただし、パッケージのゴールが使用されている場合のみ)。

$ mvn package spring-boot:repackage
$ ls target/*.jar
target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original

マイルストーンまたはスナップショットリリースを使用する場合は、次のリストに示すように、適切な pluginRepository 要素も追加する必要があります。

<pluginRepositories>
    <pluginRepository>
        <id>spring-snapshots</id>
        <url>https://repo.spring.io/snapshot</url>
    </pluginRepository>
    <pluginRepository>
        <id>spring-milestones</id>
        <url>https://repo.spring.io/milestone</url>
    </pluginRepository>
</pluginRepositories>

1.2. 実行可能 Jar および War ファイルのパッケージ化

spring-boot-maven-pluginpom.xml に含まれると、spring-boot:repackage ゴールを使用して、アーカイブを自動的に書き換えて実行可能にします。次の例に示すように、通常の packaging 要素を使用して、jar または war(必要に応じて)をビルドするようにプロジェクトを構成する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- ... -->
    <packaging>jar</packaging>
    <!-- ... -->
</project>

既存のアーカイブは、package フェーズで Spring Boot によって拡張されます。起動するメインクラスは、以下に示すように構成オプションを使用するか、マニフェストに Main-Class 属性を追加することで指定できます。メインクラスを指定しない場合、プラグインは public static void main(String[] args) メソッドでクラスを検索します。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.example.app.Main</mainClass>
    </configuration>
</plugin>

プロジェクト成果物をビルドして実行するには、次のように入力できます。

$ mvn package
$ java -jar target/mymodule-0.0.1-SNAPSHOT.jar

実行可能かつ外部コンテナーにデプロイ可能な war ファイルをビルドするには、次の例に示すように、組み込みコンテナーの依存関係を“ provided ”としてマークする必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- ... -->
    <packaging>war</packaging>
    <!-- ... -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- ... -->
    </dependencies>
</project>
デプロイ可能な war ファイルを作成する方法の詳細については、「howto.html」セクションを参照してください。

プラグイン情報ページで高度な設定オプションと例が利用できます。

2. Spring Boot Gradle プラグイン

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

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 <folder containing spring-boot-antlib-2.2.6.RELEASE.jar>
「Spring Boot の使用」セクションには、spring-boot-antlib で Apache Ant を使用するより完全な例が含まれています。

3.1. Spring Boot Ant タスク

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

3.1.1. spring-boot: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. spring-boot: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 形式のより技術的な詳細については、付録で説明します。

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

Unofficial Translation by spring.pleiades.io. See the original content.