ビルド
ビルド情報を生成する
Maven プラグインと Gradle プラグインの両方で、プロジェクトの座標、名前、バージョンを含むビルド情報を生成できます。プラグインは、構成を通じて追加のプロパティを追加するように構成することもできます。このようなファイルが存在する場合、Spring Boot は BuildProperties
(Javadoc) Bean を自動構成します。
Maven でビルド情報を生成するには、次の例に示すように、build-info
ゴールの実行を追加します。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
詳細については、Spring Boot Maven プラグインのドキュメントを参照してください。 |
次の例は、Gradle でも同じことを行います。
springBoot {
buildInfo()
}
詳細については、Spring Boot Gradle プラグインのドキュメントを参照してください。 |
Git 情報を生成する
Maven と Gradle の両方により、プロジェクトのビルド時の git
ソースコードリポジトリの状態に関する情報を含む git.properties
ファイルを生成できます。
Maven ユーザーの場合、spring-boot-starter-parent
POM には、git.properties
ファイルを生成するための事前構成済みプラグインが含まれています。これを使用するには、Git Commit Id Plugin
[GitHub] (英語) の次の宣言を POM に追加します。
<build>
<plugins>
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Gradle ユーザーは、次の例に示すように、gradle-git-properties
(英語) プラグインを使用して同じ結果を得ることができます。
plugins {
id "com.gorylenko.gradle-git-properties" version "2.4.1"
}
Maven プラグインと Gradle プラグインはどちらも、git.properties
に含まれているプロパティを構成できます。
git.properties のコミット時間は、次の形式と一致することが期待されます: yyyy-MM-dd’T’HH:mm:ssZ 。これは、上記の両方のプラグインのデフォルトの形式です。この形式を使用すると、時間が Date (標準 Javadoc) に解析され、JSON に直列化されるときに、その形式が Jackson の日付直列化構成設定によって制御されるようになります。 |
CycloneDX SBOM を生成する
Maven と Gradle はどちらも、プロジェクトのビルド時に CycloneDX SBOM を生成できます。
Maven ユーザーの場合、spring-boot-starter-parent
POM には SBOM を生成するための事前構成済みのプラグインが含まれています。これを使用するには、cyclonedx-maven-plugin
[GitHub] (英語) の次の宣言を POM に追加します。
<build>
<plugins>
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Gradle ユーザーは、次の例に示すように、cyclonedx-gradle-plugin
[GitHub] (英語) プラグインを使用して同じ結果を得ることができます。
plugins {
id 'org.cyclonedx.bom' version '1.10.0'
}
依存関係バージョンのカスタマイズ
spring-boot-dependencies
POM は、一般的な依存関係のバージョンを管理します。Maven および Gradle の Spring Boot プラグインを使用すると、これらのマネージ依存バージョンをビルドプロパティを使用してカスタマイズできます。
各 Spring Boot リリースは、この特定のサードパーティ依存関係セットに対して設計およびテストされています。バージョンを上書きすると、互換性の問題が発生する場合があります。 |
Maven で依存関係バージョンをオーバーライドするには、Maven プラグインのドキュメントのプラグインの使用を参照してください。
Gradle の依存関係バージョンをオーバーライドするには、Gradle プラグインのドキュメントの管理バージョンのカスタマイズを参照してください。
Maven を使用して実行可能 JAR を作成する
spring-boot-maven-plugin
を使用して、実行可能な "fat " JAR を作成できます。spring-boot-starter-parent
POM を使用する場合、プラグインを宣言でき、jar は次のように再パッケージ化されます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
親 POM を使用しない場合でも、プラグインを使用できます。ただし、次のように <executions>
セクションを追加する必要があります。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
完全な使用箇所の詳細については、プラグインのドキュメントを参照してください。
Spring Boot アプリケーションを依存関係として使用する
war ファイルのように、Spring Boot アプリケーションは依存関係として使用されることを意図していません。アプリケーションに他のプロジェクトと共有するクラスが含まれている場合、推奨されるアプローチは、そのコードを別のモジュールに移動することです。個別のモジュールは、アプリケーションや他のプロジェクトに依存できます。
上記の推奨どおりにコードを再配置できない場合は、依存関係としての使用に適した個別のアーティファクトを生成するように Spring Boot の Maven および Gradle プラグインを構成する必要があります。実行可能ファイル jar 形式はアプリケーションクラスを BOOT-INF/classes
にパッケージ化するため、実行可能ファイルアーカイブを依存関係として使用することはできません。これは、実行可能ファイル jar が依存関係として使用されている場合には見つからないことを意味します。
依存関係として使用できるアーティファクトと実行可能なアーティファクトを生成するには、分類子を指定する必要があります。この分類子は、実行可能アーカイブの名前に適用され、デフォルトのアーカイブは依存関係として使用されます。
Maven で exec
の分類子を構成するには、次の構成を使用できます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
実行可能 Jar の実行時に特定のライブラリを抽出する
実行可能 jar のネストされたライブラリのほとんどは、実行するために解凍する必要はありません。ただし、特定のライブラリには問題がある場合があります。例: JRuby には、独自のネストされた jar サポートが含まれています。これは、jruby-complete.jar
が常に独自のファイルとして直接利用可能であることを前提としています。
問題のあるライブラリを処理するために、実行可能ファイル jar が最初に実行されるときに、特定のネストされた jar が自動的に解凍されるようにフラグを立てることができます。このようなネストされた jar は、java.io.tmpdir
システムプロパティによって識別される一時ディレクトリに書き込まれます。
アプリケーションの実行中に一時ディレクトリに解凍された jar ファイルが削除されないように、オペレーティングシステムが設定されていることを確認する必要があります。 |
例: Maven プラグインを使用して、JRuby に解凍用のフラグを設定する必要があることを示すには、次の構成を追加します。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<requiresUnpack>
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby-complete</artifactId>
</dependency>
</requiresUnpack>
</configuration>
</plugin>
</plugins>
</build>
除外付きの非実行可能 JAR を作成する
多くの場合、2 つの別個のビルド製品として実行可能ファイルと実行不可能な jar がある場合、実行可能バージョンにはライブラリ jar で必要のない追加の構成ファイルがあります。例: application.yaml
構成ファイルは、実行不可能な JAR から除外される場合があります。
Maven では、実行可能な jar がメインアーティファクトである必要があり、次のように、ライブラリに分類された jar を追加できます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>lib</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>lib</classifier>
<excludes>
<exclude>application.yaml</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
リモート Maven で開始した Spring Boot アプリケーションのデバッグ
Maven で起動された Spring Boot アプリケーションに リモートデバッガーをアタッチするには、maven プラグインの jvmArguments
プロパティを使用できます。
詳細については、この例を参照してください。
spring-boot-antlib を使用せずに Ant から実行可能アーカイブを構築する
Ant でビルドするには、依存関係を取得してコンパイルし、jar または war アーカイブを作成する必要があります。実行可能にするには、spring-boot-antlib
モジュールを使用するか、次の手順に従います。
jar を構築している場合、ネストされた
BOOT-INF/classes
ディレクトリにアプリケーションのクラスとリソースをパッケージ化します。war を構築する場合は、通常どおり、ネストされたWEB-INF/classes
ディレクトリにアプリケーションのクラスをパッケージ化します。jar のネストされた
BOOT-INF/lib
ディレクトリまたは war のWEB-INF/lib
にランタイム依存関係を追加します。アーカイブ内のエントリを圧縮しないでください。jar の場合はネストされた
BOOT-INF/lib
ディレクトリに、war の場合はWEB-INF/lib-provided
に、provided
(組み込みコンテナー)依存関係を追加します。アーカイブ内のエントリを圧縮しないでください。spring-boot-loader
クラスをアーカイブのルートに追加します(Main-Class
が利用できるように)。適切なランチャー (jar ファイルの場合は
JarLauncher
(Javadoc) など) をマニフェストのMain-Class
属性として使用し、必要なその他のプロパティをマニフェストエントリとして指定します (主に、Start-Class
プロパティを設定します)。
次の例は、Ant を使用して実行可能アーカイブを構築する方法を示しています。
<target name="build" depends="compile">
<jar destfile="target/${ant.project.name}-${spring-boot.version}.jar" compress="false">
<mappedresources>
<fileset dir="target/classes" />
<globmapper from="*" to="BOOT-INF/classes/*"/>
</mappedresources>
<mappedresources>
<fileset dir="src/main/resources" erroronmissingdir="false"/>
<globmapper from="*" to="BOOT-INF/classes/*"/>
</mappedresources>
<mappedresources>
<fileset dir="${lib.dir}/runtime" />
<globmapper from="*" to="BOOT-INF/lib/*"/>
</mappedresources>
<zipfileset src="${lib.dir}/loader/spring-boot-loader-jar-${spring-boot.version}.jar" />
<manifest>
<attribute name="Main-Class" value="org.springframework.boot.loader.launch.JarLauncher" />
<attribute name="Start-Class" value="${start-class}" />
</manifest>
</jar>
</target>