1. 導入
Spring Boot Maven プラグインは、Apache Maven (英語) で Spring Boot サポートを提供します。統合テストを実行する前に、実行可能な jar または war アーカイブをパッケージ化し、Spring Boot アプリケーションを実行し、ビルド情報を生成して、Spring Boot アプリケーションを起動できます。
2. 入門
Spring Boot Maven プラグインを使用するには、次の例に示すように、pom.xml
の plugins
セクションに適切な XML を含めます。
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>getting-started</artifactId>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
マイルストーンまたはスナップショットリリースを使用する場合は、次のように、適切な 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>
3. プラグインの使用
Maven ユーザーは、spring-boot-starter-parent
プロジェクトから継承して、適切なデフォルトを取得できます。親プロジェクトは次の機能を提供します。
デフォルトのコンパイラーレベルとしての Java 1.8。
UTF-8 ソースエンコーディング。
-parameters
を使用したコンパイル。共通の依存関係のバージョンを管理する、
spring-boot-dependencies
POM から継承された依存関係管理セクション。この依存関係管理により、独自の POM で使用するときに、これらの依存関係の<version>
タグを省略できます。repackage
実行 ID を使用したrepackage
ゴールの実行。実用的なプラグイン構成(git commit id [GitHub] (英語) 、および shade [Apache] (英語) )。
プロファイル固有のファイルを含む
application.properties
およびapplication.yml
の実用的なリソースフィルタリング (たとえば、application-dev.properties
およびapplication-dev.yml
)
application.properties ファイルと application.yml ファイルは Spring スタイルのプレースホルダー(${…} )を受け入れるため、Maven フィルタリングは @..@ プレースホルダーを使用するように変更されています。(resource.delimiter と呼ばれる Maven プロパティを設定することにより、それをオーバーライドできます。) |
3.1. 親スターター POM の継承
spring-boot-starter-parent
から継承するようにプロジェクトを構成するには、parent
を次のように設定します。
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
</parent>
この依存関係では、Spring Boot バージョン番号のみを指定する必要があります。追加のスターターをインポートする場合、バージョン番号を安全に省略できます。 |
この設定では、独自のプロジェクトのプロパティをオーバーライドすることで、個々の依存関係をオーバーライドすることもできます。たとえば、異なるバージョンの SLF4J ライブラリと Spring Data リリーストレインを使用するには、次のコードを pom.xml
に追加します。
<properties>
<slf4j.version>1.7.30</slf4j.version>
<spring-data-releasetrain.version>Moore-SR6</spring-data-releasetrain.version>
</properties>
依存関係バージョンのプロパティの完全なリストについては、Spring Boot リファレンスで Dependency versions Appendix
を参照してください。
3.2. 親 POM なしで Spring Boot を使用する
spring-boot-starter-parent
POM から継承しない理由があるかもしれません。使用する必要がある独自の企業標準の親がいる場合や、すべての Maven 構成を明示的に宣言したい場合があります。
spring-boot-starter-parent
を使用したくない場合でも、次のように import
スコープの依存関係を使用することで、依存関係管理(プラグイン管理ではなく)の利点を維持できます。
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
上記のサンプルセットアップでは、上記で説明したように、プロパティを使用して個々の依存関係を上書きすることはできません。同じ結果を得るには、プロジェクトの dependencyManagement
セクションのエントリを spring-boot-dependencies
エントリの前に追加する必要があります。たとえば、異なるバージョンの SLF4J ライブラリと Spring Data リリーストレインを使用するには、次の要素を pom.xml
に追加します。
<dependencyManagement>
<dependencies>
<!-- Override SLF4J provided by Spring Boot -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>2020.0.0-SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.3. コマンドラインでの設定の上書き
プラグインは、spring-boot
から始まる多くのユーザープロパティを提供し、コマンドラインから構成をカスタマイズできるようにします。
たとえば、次のように、アプリケーションの実行時に有効になるようにプロファイルを調整できます。
$ mvn spring-boot:run -Dspring-boot.run.profiles=dev,local
コマンドラインでオーバーライドできるようにしながら両方にデフォルトを設定する場合は、ユーザー指定のプロジェクトプロパティと MOJO 構成を組み合わせて使用する必要があります。
<project>
<properties>
<app.profiles>local,dev</app.profiles>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>${app.profiles}</profiles>
</configuration>
</plugin>
</plugins>
</build>
</project>
上記は、local
と dev
がデフォルトで有効になっていることを確認します。これで専用プロパティが公開されました。これはコマンドラインでも上書きできます。
$ mvn spring-boot:run -Dapp.profiles=test
4. ゴール
Spring Boot プラグインには次のゴールがあります。
ゴール | 説明 |
---|---|
buildpack を使用して、アプリケーションを OCI イメージにパッケージ化します。 | |
現在の | |
spring-boot-maven-plugin に関するヘルプ情報を表示します。 | |
| |
アプリケーションを所定の場所で実行します。 | |
Spring のアプリケーションを開始します。 | |
「開始」ゴールによって開始されたアプリケーションを停止します。通常、テストスイートが完了すると呼び出されます。 |
5. 実行可能アーカイブのパッケージ化
プラグインは、アプリケーションのすべての依存関係を含む実行可能アーカイブ(jar ファイルおよび war ファイル)を作成し、java -jar
で実行できます。
実行可能アーカイブのパッケージ化は、次の例に示すように、repackage
ゴールによって実行されます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
spring-boot-starter-parent を使用している場合、そのような実行は repackage 実行 ID ですでに事前設定されているため、プラグイン定義のみを追加する必要があります。 |
上記の例では、Maven ライフサイクルのパッケージフェーズ中にビルドされた jar
または war
アーカイブを再パッケージします。これには、プロジェクトで定義されている provided
依存関係も含まれます。これらの依存関係の一部を除外する必要がある場合は、exclude
オプションのいずれかを使用できます。詳細については、依存関係の除外を参照してください。
元の(実行不可能な)アーティファクトは、デフォルトで .original
に名前が変更されますが、カスタム分類子を使用して元のアーティファクトを保持することもできます。
maven-war-plugin の outputFileNameMapping 機能は現在サポートされていません。 |
Devtools はデフォルトで自動的に除外されます(excludeDevtools
プロパティを使用して制御できます)。これを war
パッケージで機能させるには、spring-boot-devtools
依存関係を optional
または provided
スコープに設定する必要があります。
プラグインはマニフェストを書き換え、特に Main-Class
および Start-Class
エントリを管理します。デフォルトが機能しない場合は、jar プラグインではなく、Spring Boot プラグインで値を設定する必要があります。マニフェストの Main-Class
は、次の例に示すように、Spring Boot プラグインの layout
プロパティによって制御されます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${start.class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
layout
プロパティのデフォルトは、アーカイブ型(jar
または war
)によって決定される値です。次のレイアウトを使用できます。
JAR
: 通常の実行可能 JAR レイアウト。WAR
: 実行可能な WAR レイアウト。provided
依存関係は、war
がサーブレットコンテナーにデプロイされたときの衝突を避けるためにWEB-INF/lib-provided
に配置されます。ZIP
(別名DIR
):PropertiesLauncher
を使用したJAR
レイアウトに似ています。NONE
: すべての依存関係とプロジェクトリソースをバンドルします。ブートストラップローダーをバンドルしません。
5.1. 階層化された Jar または War
再パッケージ化された jar には、アプリケーションのクラスと依存関係がそれぞれ BOOT-INF/classes
と BOOT-INF/lib
に含まれています。同様に、実行可能 war には、アプリケーションのクラスが WEB-INF/classes
に含まれ、依存関係が WEB-INF/lib
と WEB-INF/lib-provided
に含まれています。jar または war のコンテンツから docker イメージを作成する必要がある場合は、これらのディレクトリをさらに分離して、個別のレイヤーに書き込むことができると便利です。
階層化されたアーカイブは、通常の再パッケージ化された jar または war と同じレイアウトを使用しますが、各層を説明する追加のメタデータファイルが含まれています。
デフォルトでは、次のレイヤーが定義されています。
dependencies
(バージョンにSNAPSHOT
を含まない依存関係の場合)。ローダークラスの
spring-boot-loader
。バージョンに
SNAPSHOT
が含まれる依存関係のsnapshot-dependencies
。ローカルモジュールの依存関係、アプリケーションクラス、リソース用の
application
。
モジュールの依存関係は、現在のビルドの一部であるすべてのモジュールを調べることによって識別されます。モジュールの依存関係が Maven のローカルキャッシュにインストールされており、現在のビルドの一部ではないためにのみ解決できる場合、通常の依存関係として識別されます。
レイヤーの順序は、アプリケーションの一部が変更されたときに前のレイヤーがキャッシュされる可能性を決定するため、重要です。デフォルトの順序は dependencies
、spring-boot-loader
、snapshot-dependencies
、application
です。変更の可能性が最も低いコンテンツを最初に追加し、次に変更の可能性が高いレイヤーを追加する必要があります。
再パッケージ化されたアーカイブには、デフォルトで layers.idx
ファイルが含まれています。この機能を無効にするには、次の方法で無効にします。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layers>
<enabled>false</enabled>
</layers>
</configuration>
</plugin>
</plugins>
</build>
</project>
[[packaging.layers.configuration =]] === カスタムレイヤー構成アプリケーションによっては、レイヤーの作成方法を調整し、新しいレイヤーを追加することができます。これは、以下に示すように登録する必要がある別の構成ファイルを使用して実行できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layers>
<enabled>true</enabled>
<configuration>${project.basedir}/src/layers.xml</configuration>
</layers>
</configuration>
</plugin>
</plugins>
</build>
</project>
構成ファイルには、アーカイブをレイヤーに分割する方法と、それらのレイヤーの順序が記述されています。次の例は、上記のデフォルトの順序を明示的に定義する方法を示しています。
<layers xmlns="http://www.springframework.org/schema/boot/layers"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/boot/layers
https://www.springframework.org/schema/boot/layers/layers-2.6.xsd">
<application>
<into layer="spring-boot-loader">
<include>org/springframework/boot/loader/**</include>
</into>
<into layer="application" />
</application>
<dependencies>
<into layer="application">
<includeModuleDependencies />
</into>
<into layer="snapshot-dependencies">
<include>*:*:*SNAPSHOT</include>
</into>
<into layer="dependencies" />
</dependencies>
<layerOrder>
<layer>dependencies</layer>
<layer>spring-boot-loader</layer>
<layer>snapshot-dependencies</layer>
<layer>application</layer>
</layerOrder>
</layers>
layers
XML 形式は、3 つのセクションで定義されています。
<application>
ブロックは、アプリケーションクラスとリソースを階層化する方法を定義します。<dependencies>
ブロックは、依存関係の階層化方法を定義します。<layerOrder>
ブロックは、レイヤーが書き込まれる順序を定義します。
ネストされた <into>
ブロックは、<application>
および <dependencies>
セクション内で使用され、レイヤーのコンテンツを要求します。ブロックは、定義された順序で上から下に評価されます。前のブロックで要求されていないコンテンツは、引き続き後続のブロックで検討できます。
<into>
ブロックは、ネストされた <include>
要素と <exclude>
要素を使用してコンテンツを要求します。<application>
セクションは、包含 / 除外式に Ant スタイルのパスマッチングを使用します。<dependencies>
セクションは group:artifact[:version]
パターンを使用します。また、ローカルモジュールの依存関係を含めたり除外したりするために使用できる <includeModuleDependencies />
および <excludeModuleDependencies />
要素も提供します。
<include>
が定義されていない場合、すべてのコンテンツ(前のブロックで要求されていない)が考慮されます。
<exclude>
が定義されていない場合、除外は適用されません。
上記の <dependencies>
の例を見ると、最初の <into>
が application.layer
のすべてのモジュール依存関係を要求していることがわかります。次の <into>
は、snapshot-dependencies
レイヤーのすべての SNAPSHOT 依存関係を要求します。最終的な <into>
は、dependencies
レイヤーに残っているもの(この場合、SNAPSHOT ではない依存関係)を要求します。
<application>
ブロックにも同様のルールがあります。最初に spring-boot-loader
レイヤーの org/springframework/boot/loader/**
コンテンツを要求します。次に、application
レイヤーの残りのクラスとリソースを要求します。
<into> ブロックが定義される順序は、多くの場合、レイヤーが書き込まれる順序とは異なります。このため、<layerOrder> 要素は常に含まれている必要があり、<into> ブロックによって参照されるすべてのレイヤーをカバーする必要があります。 |
5.2. spring-boot:repackage
org.springframework.boot:spring-boot-maven-plugin:2.6.6
java -jar
を使用してコマンドラインから実行できるように、既存の JAR および WAR アーカイブを再パッケージ化します。layout=NONE
を使用すると、ネストされた依存関係を持つ JAR を単純にパッケージ化することもできます(メインクラスがないため、実行可能ファイルではありません)。
5.2.2. オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
|
| |
| ||
| ||
| ||
|
| |
| ||
| ||
|
| |
|
| |
| ||
| ||
|
| |
| ||
|
|
5.2.3. パラメーターの詳細
attach
再パッケージ化されたアーカイブを添付して、ローカル Maven リポジトリにインストールするか、リモートリポジトリにデプロイします。分類子が構成されていない場合、通常の jar を置き換えます。classifier
が通常の jar と再パッケージ化された jar が異なるように構成されている場合、通常の jar と一緒に接続されます。プロパティが false
に設定されている場合、再パッケージ化されたアーカイブはインストールまたはデプロイされません。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
classifier
再パッケージ化されたアーカイブに追加する分類子。指定しない場合、メインのアーティファクトは再パッケージ化されたアーカイブに置き換えられます。指定された場合、分類子は、再パッケージ化するソースアーカイブの決定にも使用されます。その分類子を持つアーティファクトがすでに存在する場合、ソースとして使用され、置き換えられます。そのようなアーティファクトが存在しない場合、メインアーティファクトがソースとして使用され、再パッケージ化されたアーカイブがその分類子の補足アーティファクトとして添付されます。アーティファクトを添付すると、元のアーティファクトと一緒にデプロイできます。$1 [$2] を参照してください。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
embeddedLaunchScript
jar が完全に実行可能な場合、jar の前に追加する埋め込み起動スクリプト。指定しない場合は、"Spring Boot" デフォルトスクリプトが使用されます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
embeddedLaunchScriptProperties
埋め込み起動スクリプトで展開する必要があるプロパティ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
excludeDevtools
再パッケージ化されたアーカイブから Spring Boot devtools を除外します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
excludeGroupIds
除外する groupId 名のコンマ区切りリスト(完全一致)。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude
要素は、必須の groupId
および artifactId
プロパティと、オプションの classifier
プロパティを定義します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
executable
起動スクリプトを jar の先頭に追加して、*nix マシン用の完全に実行可能な jar を作成します。<p> 現在、一部のツールはこの形式を受け入れないため、常にこの手法を使用できるとは限りません。例: jar -xf
は、完全に実行可能にされた jar または war の抽出に暗黙的に失敗する場合があります。このオプションは、java -jar
で実行したり、サーブレットコンテナーにデプロイしたりするのではなく、直接実行する場合にのみ有効にすることをお勧めします。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
includeSystemScope
システムスコープの依存関係を含めます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
includes
含めるアーティファクト定義のコレクション。Include
要素は、必須の groupId
および artifactId
プロパティと、オプションの必須の groupId
および artifactId
プロパティ、およびオプションの classifier
プロパティを定義します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
layers
レイヤーの作成を無効にし、レイヤーツール jar を除外し、カスタムレイヤー構成ファイルを提供するオプションを備えたレイヤー構成。
名前 |
|
---|---|
タイプ | |
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
layout
アーカイブの型(依存関係がアーカイブ内にどのように配置されているかに対応します)。可能な値は JAR
、WAR
、ZIP
、DIR
、NONE
です。デフォルトは、アーカイブ型に基づく推測です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
layoutFactory
明示的なレイアウトが設定されていない場合に実行可能アーカイブを作成するために使用されるレイアウトファクトリ。サードパーティが代替レイアウトの実装を提供できます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
mainClass
メインクラスの名前。指定しない場合、main
メソッドを含む最初に見つかったコンパイル済みクラスが使用されます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
outputDirectory
生成されたアーカイブを含むディレクトリ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
outputTimestamp
ISO 8601(yyyy-MM-dd’T’HH:mm:ssXXX
)またはエポックからの秒数を表す int
としてフォーマットされた、再現可能な出力アーカイブエントリのタイムスタンプ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
5.3. サンプル
5.3.1. カスタム分類子
デフォルトでは、repackage
ゴールは元のアーティファクトを再パッケージ化されたアーティファクトに置き換えます。これは、アプリケーションを表すモジュールの正常な動作ですが、モジュールが別のモジュールの依存関係として使用される場合、再パッケージ化されたモジュールの分類子を提供する必要があります。その理由は、依存クラスが再パッケージ化された jar のクラスをロードできないように、アプリケーションクラスが BOOT-INF/classes
にパッケージ化されているためです。
その場合、または元のアーティファクトを保持し、別の分類子を使用して再パッケージ化されたアーティファクトを添付する場合は、次の例に示すようにプラグインを構成します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
spring-boot-starter-parent
を使用している場合、repackage
ゴールは ID repackage
の実行で自動的に実行されます。そのセットアップでは、次の例に示すように、構成のみを指定する必要があります。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
この構成では、2 つのアーティファクトが生成されます。元のアーティファクトと、再パッケージ化のゴールによって生成された再パッケージ化されたカウンターパートです。両方とも透過的にインストール / デプロイされます。
メインアーティファクトが置き換えられるのと同じメソッドでセカンダリアーティファクトを再パッケージ化する場合も、同じ構成を使用できます。次の構成は、再パッケージ化されたアプリケーションとともに単一の task
分類アーティファクトをインストール / デプロイします。
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>package</phase>
<configuration>
<classifier>task</classifier>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>task</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
maven-jar-plugin
と spring-boot-maven-plugin
の両方が同じフェーズで実行されるため、jar プラグインを最初に定義することが重要です(再パッケージ化のゴールの前に実行されるように)。再び、spring-boot-starter-parent
を使用している場合、これは次のように簡略化できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>default-jar</id>
<configuration>
<classifier>task</classifier>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<configuration>
<classifier>task</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
5.3.2. カスタム名
再パッケージ化された jar に、プロジェクトの artifactId
属性で定義されたものとは異なるローカル名を付ける必要がある場合は、次の例に示すように、標準の finalName
を使用します。
<project>
<build>
<finalName>my-app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
この構成により、target/my-app.jar
に再パッケージ化されたアーティファクトが生成されます。
5.3.3. ローカルで再パッケージ化されたアーティファクト
デフォルトでは、repackage
のゴールは、元の成果物を実行可能な成果物に置き換えます。元の jar のみをデプロイし、それでも通常のファイル名でアプリを実行できる必要がある場合は、次のようにプラグインを構成します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<attach>false</attach>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
この構成では、2 つのアーティファクトが生成されます。元のアーティファクトと、repackage
ゴールによって生成された実行可能なカウンターパートです。オリジナルのもののみがインストール / デプロイされます。
5.3.4. カスタムレイアウト
Spring Boot は、ビルドプラグインへの依存関係として提供される追加の jar ファイルで定義されたカスタムレイアウトファクトリを使用して、このプロジェクトの jar ファイルを再パッケージ化します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<layoutFactory implementation="com.example.CustomLayoutFactory">
<customProperty>value</customProperty>
</layoutFactory>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>custom-layout</artifactId>
<version>0.0.1.BUILD-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
レイアウトファクトリは、pom で明示的に指定された LayoutFactory
(spring-boot-loader-tools
から)の実装として提供されます。プラグインクラスパスにカスタム LayoutFactory
が 1 つだけあり、それが META-INF/spring.factories
にリストされている場合、プラグイン構成で明示的に設定する必要はありません。
明示的なレイアウトが設定されている場合、レイアウトファクトリは常に無視されます。
5.3.5. 依存関係の除外
デフォルトでは、repackage
と run
の両方のゴールには、プロジェクトで定義されている provided
の依存関係が含まれます。Spring Boot プロジェクトは、provided
依存関係を、アプリケーションの実行に必要な「コンテナー」依存関係と見なす必要があります。
これらの依存関係の一部はまったく必要ない場合があり、実行可能な jar から除外する必要があります。一貫性を保つために、アプリケーションの実行時にも存在しないようにする必要があります。
実行時にパッケージ化 / 使用から依存関係を除外する方法は 2 つあります。
groupId
およびartifactId
で識別される特定のアーティファクトを除外します。必要に応じて、オプションでclassifier
を使用します。特定の
groupId
に属するアーティファクトを除外します。
次の例では、com.example:module1
を除外し、その成果物のみを除外します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>com.example</groupId>
<artifactId>module1</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
この例では、com.example
グループに属するアーティファクトを除外します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeGroupIds>com.example</excludeGroupIds>
</configuration>
</plugin>
</plugins>
</build>
</project>
5.3.6. 階層化されたアーカイブツール
階層化された jar または war が作成されると、spring-boot-jarmode-layertools
jar が依存関係としてアーカイブに追加されます。クラスパス上のこの jar を使用すると、特別なモードでアプリケーションを起動できます。これにより、ブートストラップコードで、アプリケーションとはまったく異なるもの(たとえば、レイヤーを抽出するもの)を実行できます。この依存関係を除外する場合は、次の方法で行うことができます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layers>
<includeLayerTools>false</includeLayerTools>
</layers>
</configuration>
</plugin>
</plugins>
</build>
</project>
5.3.7. カスタムレイヤー構成
デフォルトのセットアップでは、依存関係がスナップショットと非スナップショットに分割されますが、より複雑なルールがある場合があります。例: プロジェクトの会社固有の依存関係を専用レイヤーに分離したい場合があります。次の layers.xml
構成は、そのような設定の 1 つを示しています。
<layers xmlns="http://www.springframework.org/schema/boot/layers"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/boot/layers
https://www.springframework.org/schema/boot/layers/layers-2.6.xsd">
<application>
<into layer="spring-boot-loader">
<include>org/springframework/boot/loader/**</include>
</into>
<into layer="application" />
</application>
<dependencies>
<into layer="snapshot-dependencies">
<include>*:*:*SNAPSHOT</include>
</into>
<into layer="company-dependencies">
<include>com.acme:*</include>
</into>
<into layer="dependencies"/>
</dependencies>
<layerOrder>
<layer>dependencies</layer>
<layer>spring-boot-loader</layer>
<layer>snapshot-dependencies</layer>
<layer>company-dependencies</layer>
<layer>application</layer>
</layerOrder>
</layers>
上記の構成では、com.acme
groupId を持つすべてのライブラリで追加の company-dependencies
レイヤーを作成します。
6. OCI イメージのパッケージ化
プラグインは、Cloud Native Buildpacks (英語) (CNB)を使用して jar または war ファイルから OCI イメージ [GitHub] (英語) を作成できます。build-image
ゴールを使用してイメージを構築できます。
セキュリティ上の理由から、イメージは root 以外のユーザーとしてビルドおよび実行されます。詳細については、CNB 仕様 (英語) を参照してください。 |
開始する最も簡単な方法は、プロジェクトで mvn spring-boot:build-image
を呼び出すことです。次の例に示すように、package
フェーズが呼び出されるたびに、イメージの作成を自動化できます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-image</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
buildpack は実行可能アーカイブから実行されますが、実行可能アーカイブは必要に応じて自動的に作成されるため、最初に repackage ゴールを実行する必要はありません。build-image がアプリケーションを再パッケージ化すると、repackage のゴールと同じ設定が適用されます。つまり、除外オプションの 1 つを使用して依存関係を除外でき、デフォルトで Devtools が自動的に除外されます(excludeDevtools プロパティを使用して制御できます)。 |
6.1. Docker デーモン
build-image
ゴールには、Docker デーモンへのアクセスが必要です。デフォルトでは、ローカル接続を介して Docker デーモンと通信します。これは、構成されていないすべてのサポートされているプラットフォーム上の Docker エンジン (英語) で動作します。
minikube が提供する Docker デーモン (英語) を使用するように build-image
ゴールを構成するように環境変数を設定できます。次の表は、環境変数とその値を示しています。
環境変数 | 説明 |
---|---|
DOCKER_HOST | Docker デーモンのホストとポートを含む URL- 例: |
DOCKER_TLS_VERIFY |
|
DOCKER_CERT_PATH | HTTPS の証明書とキーファイルへのパス ( |
Linux および macOS では、これらの環境変数は、minikube の起動後にコマンド eval $(minikube docker-env)
を使用して設定できます。
Docker デーモン接続情報は、プラグイン構成の docker
パラメーターを使用して提供することもできます。次の表は、使用可能なパラメーターをまとめたものです。
パラメーター | 説明 |
---|---|
| Docker デーモンのホストとポートを含む URL- 例: |
|
|
| HTTPS の証明書とキーファイルへのパス ( |
詳細については、例も参照してください。
6.2. Docker レジストリ
builder
または runImage
パラメーターで指定された Docker イメージが、認証を必要とするプライベート Docker イメージレジストリに保管されている場合、認証資格情報は docker.builderRegistry
パラメーターを使用して提供できます。
生成された Docker イメージを Docker イメージレジストリに公開する場合は、docker.publishRegistry
パラメーターを使用して認証資格情報を提供できます。
ユーザー認証または ID トークン認証用のパラメーターが提供されます。サポートされている認証方法の詳細については、イメージの保存に使用されている Docker レジストリのドキュメントを参照してください。
次の表は、docker.builderRegistry
および docker.publishRegistry
で使用可能なパラメーターを要約したものです。
パラメーター | 説明 |
---|---|
| Docker イメージレジストリユーザーのユーザー名。ユーザー認証に必要です。 |
| Docker イメージレジストリユーザーのパスワード。ユーザー認証に必要です。 |
| Docker イメージレジストリのアドレス。ユーザー認証のオプション。 |
| Docker イメージレジストリユーザーのメールアドレス。ユーザー認証のオプション。 |
| Docker イメージレジストリユーザーの ID トークン。トークン認証に必要です。 |
詳細については、例も参照してください。
6.3. イメージのカスタマイズ
プラグインはビルダー (英語) を呼び出して、イメージの生成を調整します。ビルダーには、生成されたイメージに影響を与えるためにアプリケーションをインスペクションできる複数の buildpacks が含 (英語) まれています。デフォルトでは、プラグインはビルダーイメージを選択します。生成されたイメージの名前は、プロジェクトのプロパティから推測されます。
image
パラメーターを使用すると、ビルダーの構成と、プロジェクトでの動作方法を設定できます。次の表は、使用可能なパラメーターとそのデフォルト値をまとめたものです。
パラメーター / (ユーザープロパティ) | 説明 | デフォルト値 |
---|---|---|
|
Name of the Builder image to use. |
|
|
Name of the run image to use. |
No default value, indicating the run image specified in Builder metadata should be used. |
|
Image name (Javadoc) for the generated image. |
|
|
Policy (Javadoc) used to determine when to pull the builder and run images from the registry.
Acceptable values are |
|
| ビルダーに渡す必要のある環境変数。 | |
| ビルダーがイメージをビルドするときに使用する必要がある Buildpacks。指定された buildpacks のみが使用され、ビルダーに含まれているデフォルトの buildpacks がオーバーライドされます。Buildpack 参照は、次のいずれかの形式である必要があります。
| なし。ビルダーがそれに含まれる buildpacks を使用する必要があることを示します。 |
| イメージをビルドするときにビルダーコンテナーにマウントする必要があるボリュームバインドマウント (英語) 。バインディングは、ビルダーコンテナーの作成時に、解析されず、検証されずに Docker に渡されます。バインディングは、次のいずれかの形式である必要があります。
| |
|
The network driver (英語) the builder container will be configured to use. The value supplied will be passed unvalidated to Docker when creating the builder container. |
|
|
Whether to clean the cache before building. |
|
| ビルダー操作の詳細ログを有効にします。 |
|
|
Whether to publish the generated image to a Docker registry. |
|
| 生成されたイメージに適用する 1 つ以上の追加タグ。 | |
| ランダムな名前を生成する代わりに、ビルダーが使用する必要があるボリューム名をキャッシュします。 | |
| buildpacks によって作成され、イメージ構築プロセスによって使用されるレイヤーを含むキャッシュ。 | イメージ名から派生した名前を持つ、Docker デーモン内の名前付きボリューム。 |
| buildpacks によって作成され、イメージ起動プロセスによって使用されるレイヤーを含むキャッシュ。 | イメージ名から派生した名前を持つ、Docker デーモン内の名前付きボリューム。 |
プラグインは、コンパイラーのプラグイン構成または maven.compiler.target プロパティを使用して、プロジェクトのターゲット Java 互換性を検出します。デフォルトの Paketo ビルダーと buildpacks を使用する場合、プラグインは buildpacks に同じ Java バージョンをインストールするように指示します。ビルダーの構成例に示されているように、この動作をオーバーライドできます。 |
詳細については、例も参照してください。
6.4. spring-boot:build-image
org.springframework.boot:spring-boot-maven-plugin:2.6.6
buildpack を使用して、アプリケーションを OCI イメージにパッケージ化します。
6.4.3. パラメーターの詳細
excludeDevtools
再パッケージ化されたアーカイブから Spring Boot devtools を除外します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
excludeGroupIds
除外する groupId 名のコンマ区切りリスト(完全一致)。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude
要素は、必須の groupId
および artifactId
プロパティと、オプションの classifier
プロパティを定義します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
image
builder
、runImage
、name
、env
、cleanCache
、verboseLogging
、pullPolicy
、publish
オプションを使用したイメージ構成。
名前 |
|
---|---|
タイプ | |
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
includeSystemScope
システムスコープの依存関係を含めます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
includes
含めるアーティファクト定義のコレクション。Include
要素は、必須の groupId
および artifactId
プロパティと、オプションの必須の groupId
および artifactId
プロパティ、およびオプションの classifier
プロパティを定義します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
layers
レイヤーの作成を無効にし、レイヤーツール jar を除外し、カスタムレイヤー構成ファイルを提供するオプションを備えたレイヤー構成。
名前 |
|
---|---|
タイプ | |
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
layout
アーカイブの型(依存関係がアーカイブ内にどのように配置されているかに対応します)。可能な値は JAR
、WAR
、ZIP
、DIR
、NONE
です。デフォルトは、アーカイブ型に基づく推測です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
layoutFactory
明示的なレイアウトが設定されていない場合に実行可能アーカイブを作成するために使用されるレイアウトファクトリ。サードパーティが代替レイアウトの実装を提供できます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
6.5. サンプル
6.5.1. カスタムイメージビルダー
イメージの作成に使用されるビルダーまたはビルドされたイメージの起動に使用される実行イメージをカスタマイズする必要がある場合は、次の例に示すようにプラグインを構成します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<builder>mine/java-cnb-builder</builder>
<runImage>mine/java-cnb-run</runImage>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
この構成では、名前 mine/java-cnb-builder
およびタグ latest
のビルダーイメージ、および mine/java-cnb-run
という名前の実行イメージとタグ latest
を使用します。
この例に示すように、ビルダーと実行イメージはコマンドラインでも指定できます。
$ mvn spring-boot:build-image -Dspring-boot.build-image.builder=mine/java-cnb-builder -Dspring-boot.build-image.runImage=mine/java-cnb-run
6.5.2. ビルダー構成
ビルダーが環境変数を使用して構成オプションを公開する場合、env
属性を使用して設定できます。
以下は、ビルド時に Paketo Java buildpacks によって使用される JVM バージョンを構成する例 (英語) です。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<BP_JVM_VERSION>8.*</BP_JVM_VERSION>
</env>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
ビルダーが実行されている Docker デーモンと buildpacks がアーティファクトをダウンロードするネットワークの場所の間にネットワークプロキシがある場合は、プロキシを使用するようにビルダーを構成する必要があります。Paketo ビルダーを使用する場合、これは、次の例に示すように、HTTPS_PROXY
および / または HTTP_PROXY
環境変数を設定することで実現できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<HTTP_PROXY>http://proxy.example.com</HTTP_PROXY>
<HTTPS_PROXY>https://proxy.example.com</HTTPS_PROXY>
</env>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
6.5.3. ランタイム JVM 構成
Paketo Java buildpacks は、JAVA_TOOL_OPTIONS
環境変数を設定することにより、JVM ランタイム環境を構成 (英語) します。ビルドパックが提供する JAVA_TOOL_OPTIONS
値を変更して、アプリケーションイメージがコンテナーで起動されたときの JVM ランタイムの動作をカスタマイズできます。
イメージに保存してすべてのデプロイに適用する必要がある環境変数の変更は、Paketo ドキュメント (英語) に従って設定でき、次の例に示されています。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS>
<BPE_APPEND_JAVA_TOOL_OPTIONS>-XX:+HeapDumpOnOutOfMemoryError</BPE_APPEND_JAVA_TOOL_OPTIONS>
</env>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
6.5.4. カスタムイメージ名
デフォルトでは、イメージ名はプロジェクトの artifactId
および version
から推測されます(docker.io/library/${project.artifactId}:${project.version}
など)。次の例に示すように、名前を制御できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<name>example.com/library/${project.artifactId}</name>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
この構成では明示的なタグが提供されないため、latest が使用されます。${project.version} 、ビルドで使用可能な任意のプロパティ、ハードコードされたバージョンのいずれかを使用して、タグを指定することもできます。 |
次の例に示すように、イメージ名はコマンドラインでも指定できます。
$ mvn spring-boot:build-image -Dspring-boot.build-image.imageName=example.com/library/my-app:v1
6.5.5. Buildpacks
デフォルトでは、ビルダーはビルダーイメージに含まれている buildpacks を使用し、事前定義された順序で適用します。buildpacks の代替セットを提供して、ビルダーに含まれていない buildpacks を適用したり、含まれている buildpacks の順序を変更したりできます。1 つ以上の buildpacks が提供されている場合、指定された buildpacks のみが適用されます。
次の例では、.tgz
ファイルにパッケージ化されたカスタム buildpack を使用し、その後にビルダーに含まれる buildpack を使用するようにビルダーに指示します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildpacks>
<buildpack>file:///path/to/example-buildpack.tgz</buildpack>
<buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack>
</buildpacks>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
Buildpacks は、以下に示す任意の形式で指定できます。
CNB ビルダーにある buildpack(ビルダーに buildpack-id
に一致する buildpack が 1 つしかない場合は、バージョンを省略できます):
urn:cnb:builder:buildpack-id
urn:cnb:builder:[email protected] (英語)
buildpack-id
buildpack コンテンツを含むディレクトリへのパス(Windows ではサポートされていません):
file:///path/to/buildpack/
/path/to/buildpack/
buildpack コンテンツを含む gzip 圧縮された tar ファイルへのパス:
file:///path/to/buildpack.tgz
/path/to/buildpack.tgz
パッケージ化された buildpack (英語) を含む OCI イメージ:
docker://example/buildpack
docker:///example/buildpack:latest
docker:///example/buildpack@sha256:45b23dee08…
example/buildpack
example/buildpack:latest
example/buildpack@sha256:45b23dee08…
6.5.6. イメージ公開
生成されたイメージは、publish
オプションを有効にし、docker.publishRegistry
パラメーターを使用してレジストリの認証を構成することにより、Docker レジストリに公開できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<name>docker.example.com/library/${project.artifactId}</name>
<publish>true</publish>
</image>
<docker>
<publishRegistry>
<username>user</username>
<password>secret</password>
<url>https://docker.example.com/v1/</url>
<email>[email protected] (英語) </email>
</publishRegistry>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
この例に示すように、publish
オプションはコマンドラインでも指定できます。
$ mvn spring-boot:build-image -Dspring-boot.build-image.imageName=docker.example.com/library/my-app:v1 -Dspring-boot.build-image.publish=true
6.5.7. Builder キャッシュ構成
CNB ビルダーは、イメージのビルドおよび起動時に使用されるレイヤーをキャッシュします。デフォルトでは、これらのキャッシュは、ターゲットイメージのフルネームから派生した名前で Docker デーモンに名前付きボリュームとして保存されます。プロジェクトのバージョンがイメージ名のタグとして使用されている場合など、イメージ名が頻繁に変更される場合、キャッシュが頻繁に無効化される可能性があります。
次の例に示すように、キャッシュボリュームは、代替名を使用してキャッシュライフサイクルをより細かく制御できるように構成できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildCache>
<volume>
<name>cache-${project.artifactId}.build</name>
</volume>
</buildCache>
<launchCache>
<volume>
<name>cache-${project.artifactId}.launch</name>
</volume>
</launchCache>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
6.5.8. Docker の設定
デフォルトのローカル接続の代わりにリモート接続を使用して Docker デーモンと通信するプラグインが必要な場合は、次の例に示すように、docker
パラメーターを使用して接続の詳細を提供できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<host>tcp://192.168.99.100:2376</host>
<tlsVerify>true</tlsVerify>
<certPath>/home/user/.minikube/certs</certPath>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
ビルダーまたは実行イメージがユーザー認証をサポートするプライベート Docker レジストリに保管されている場合、次の例に示すように、docker.builderRegistry
パラメーターを使用して認証の詳細を提供できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<builderRegistry>
<username>user</username>
<password>secret</password>
<url>https://docker.example.com/v1/</url>
<email>[email protected] (英語) </email>
</builderRegistry>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
ビルダーまたは実行イメージがトークン認証をサポートするプライベート Docker レジストリに保管されている場合、次の例に示すように、docker.builderRegistry
パラメーターを使用してトークン値を提供できます。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<docker>
<builderRegistry>
<token>9cbaf023786cd7...</token>
</builderRegistry>
</docker>
</configuration>
</plugin>
</plugins>
</build>
</project>
7. Maven でアプリケーションを実行する
プラグインには、次の例に示すように、コマンドラインからアプリケーションを起動するために使用できる実行ゴールが含まれています。
$ mvn spring-boot:run
アプリケーション引数は、arguments
パラメーターを使用して指定できます。詳細については、アプリケーション引数の使用を参照してください。
デフォルトでは、アプリケーションはフォークされたプロセスで実行され、コマンドラインでプロパティを設定してもアプリケーションには影響しません。いくつかの JVM 引数を指定する必要がある場合(つまり、デバッグ目的で)、jvmArguments
パラメーターを使用できます。詳細については、アプリケーションをデバッグするを参照してください。システムプロパティと環境変数も明示的にサポートされています。
プロファイルを有効にすることは非常に一般的であるため、-Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
のショートカットを提供する専用の profiles
プロパティがあります。アクティブなプロファイルを指定するを参照してください。
これは推奨されませんが、fork
プロパティを無効にすることで、Maven JVM から直接アプリケーションを実行することができます。そうすることは、jvmArguments
、systemPropertyVariables
、environmentVariables
、agents
オプションが無視されることを意味します。
Spring Boot devtools
は、Spring Boot アプリケーションで作業する際の開発時のエクスペリエンスを改善するモジュールです。有効にするには、次の依存関係をプロジェクトに追加するだけです:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
devtools
が実行中の場合、アプリケーションを再コンパイルすると変更が検出され、自動的にリフレッシュされます。これはリソースだけでなくコードでも機能します。また、LiveReload サーバーも提供するため、状況が変化するたびにブラウザーのリフレッシュを自動的にトリガーできます。
Devtools は、静的リソースが変更された場合にのみブラウザーをリフレッシュするように構成することもできます(コードの変更は無視します)。プロジェクトに次のプロパティを含めるだけです。
spring.devtools.remote.restart.enabled=false
devtools
より前は、プラグインはデフォルトでリソースのホットリフレッシュをサポートしていましたが、上記のソリューションを優先して無効になりました。プロジェクトを構成することにより、いつでも復元できます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
addResources
が有効になっている場合、アプリケーションを実行すると src/main/resources
ディレクトリがアプリケーションのクラスパスに追加され、target/classes
で見つかった重複は削除されます。これにより、Web アプリケーションの開発時に非常に役立つリソースのホットリフレッシュが可能になります。例: HTML、CSS、JavaScript ファイルで作業し、アプリケーションを再コンパイルせずに変更をすぐに確認できます。また、Java IDE をダウンロードしてインストールしなくても、フロントエンド開発者が作業できるようにするための便利な方法です。
この機能を使用する副作用は、ビルド時にリソースのフィルタリングが機能しないことです。 |
repackage
のゴールと一致するために、run
のゴールは、プラグインの構成で除外されている依存関係がクラスパスからも除外されるようにクラスパスを構築します。詳細については、専用の例を参照してください。
アプリケーションの実行時にテストの依存関係を含めると便利な場合があります。例: スタブクラスを使用するテストモードでアプリケーションを実行する場合。これを実行したい場合は、useTestClasspath
パラメーターを true に設定できます。
これは、アプリケーションを実行する場合にのみ適用されます。repackage ゴールは、結果の JAR/WAR にテストの依存関係を追加しません。 |
7.1. spring-boot:run
org.springframework.boot:spring-boot-maven-plugin:2.6.6
アプリケーションを所定の場所で実行します。
7.1.2. オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
|
| |
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
| |
| ||
| ||
| ||
| ||
|
| |
| ||
|
| |
| ||
|
| |
|
7.1.3. パラメーターの詳細
addResources
maven リソースをクラスパスに直接追加します。これにより、リソースのインプレース編集をライブで行うことができます。target/classes
から重複するリソースは削除され、ClassLoader.getResources()
が呼び出された場合に重複して表示されることを防ぎます。spring-boot-devtools
をプロジェクトに追加することを検討してください。この機能やその他の機能を提供します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
agents
エージェント jar へのパス。注: この機能を使用するには、分岐したプロセスが必要です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
classesDirectory
アーカイブにパッケージ化する必要があるクラスとリソースファイルを含むディレクトリ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
commandlineArguments
アプリケーションに渡す必要のあるコマンドラインからの引数。スペースを使用して複数の引数を区切り、引用符で複数の値を囲むようにしてください。指定すると、#arguments
よりも優先されます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
directories
クラスパスに追加する必要のあるクラスディレクトリ以外の追加のディレクトリ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
environmentVariables
アプリケーションの実行に使用される分岐プロセスに関連付けられる環境変数のリスト。注: この機能を使用するには、分岐したプロセスが必要です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
excludeGroupIds
除外する groupId 名のコンマ区切りリスト(完全一致)。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude
要素は、必須の groupId
および artifactId
プロパティと、オプションの classifier
プロパティを定義します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
fork
実行プロセスを分岐する必要があるかどうかを示すフラグ。フォークを無効にすると、エージェント、カスタム JVM 引数、devtools、使用する作業ディレクトリの指定などの一部の機能が無効になります。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
includes
含めるアーティファクト定義のコレクション。Include
要素は、必須の groupId
および artifactId
プロパティと、オプションの必須の groupId
および artifactId
プロパティ、およびオプションの classifier
プロパティを定義します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
jvmArguments
アプリケーションの実行に使用される分岐プロセスに関連付けられる JVM 引数。コマンドラインで、引用符で複数の値を囲むようにしてください。注: この機能を使用するには、分岐したプロセスが必要です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
mainClass
メインクラスの名前。指定しない場合、"main" メソッドを含む最初に見つかったコンパイル済みクラスが使用されます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
noverify
エージェントが -noverify を必要とすることを示すフラグ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
optimizedLaunch
JVM の起動を最適化する必要があるかどうか。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
profiles
アクティブにする Spring プロファイル。'spring.profiles.active' 引数を指定する便利なショートカット。コマンドラインでは、コンマを使用して複数のプロファイルを区切ります。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
systemPropertyVariables
プロセスに渡す JVM システムプロパティのリスト。注: この機能を使用するには、分岐したプロセスが必要です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
7.2. サンプル
7.2.1. アプリケーションをデバッグする
デフォルトでは、run
ゴールは、分岐したプロセスでアプリケーションを実行します。デバッグする必要がある場合は、リモートデバッグを有効にするために必要な JVM 引数を追加する必要があります。次の構成では、デバッガーがポート 5005 で参加するまでプロセスを中断します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
</jvmArguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
これらの引数はコマンドラインでも指定できます。適切にラップするようにしてください。
$ mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
7.2.2. システムプロパティの使用
システムプロパティは、systemPropertyVariables
属性を使用して指定できます。次の例では、property1
を test
に、property2
を 42 に設定します。
<project>
<build>
<properties>
<my.value>42</my.value>
</properties>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<property1>test</property1>
<property2>${my.value}</property2>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</project>
値が空であるか定義されていない場合(つまり、<my-property/
>)、システムプロパティは値として空の文字列で設定されます。Maven は、pom で指定された値をトリミングするため、このメカニズムを介してスペースで開始または終了する必要がある System プロパティを指定することはできません。代わりに jvmArguments
の使用を検討してください。
文字列型の Maven 変数は、システムプロパティとして渡すことができます。他の Maven 変数型(たとえば、List
または URL
変数)を渡そうとすると、変数式が文字通り(未評価)渡されます。
jvmArguments
パラメーターは、上記のメカニズムで定義されたシステムプロパティよりも優先されます。次の例では、property1
の値は overridden
です。
$ mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dproperty1=overridden"
7.2.3. 環境変数の使用
環境変数は、environmentVariables
属性を使用して指定できます。次の例では、"ENV1"、"ENV2"、"ENV3"、"ENV4" の env 変数を設定します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<environmentVariables>
<ENV1>5000</ENV1>
<ENV2>Some Text</ENV2>
<ENV3/>
<ENV4></ENV4>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
</project>
値が空であるか定義されていない場合(つまり、<MY_ENV/
>)、env 変数は値として空の文字列で設定されます。Maven は、pom で指定された値をトリミングするため、スペースで開始または終了する必要がある環境変数を指定することはできません。
文字列型の Maven 変数は、システムプロパティとして渡すことができます。他の Maven 変数型(たとえば、List
または URL
変数)を渡そうとすると、変数式が文字通り(未評価)渡されます。
この方法で定義された環境変数は、既存の値よりも優先されます。
7.2.4. アプリケーション引数の使用
アプリケーションの引数は、arguments
属性を使用して指定できます。次の例では、2 つの引数 property1
および property2=42
を設定します。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<arguments>
<argument>property1</argument>
<argument>property2=${my.value}</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
コマンドラインでは、引数は jvmArguments
と同じようにスペースで区切られます。引数にスペースが含まれる場合は、必ず引用符で囲んでください。次の例では、2 つの引数 property1
および property2=Hello World
を使用できます。
$ mvn spring-boot:run -Dspring-boot.run.arguments="property1 'property2=Hello World'"
7.2.5. アクティブなプロファイルを指定する
特定のアプリケーションに使用するアクティブなプロファイルは、profiles
引数を使用して指定できます。
次の構成により、local
および dev
プロファイルが有効になります。
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>
<profile>local</profile>
<profile>dev</profile>
</profiles>
</configuration>
</plugin>
</plugins>
</build>
</project>
有効にするプロファイルは、コマンドラインでも指定できます。次の例に示すように、必ずコンマで区切ります。
$ mvn spring-boot:run -Dspring-boot.run.profiles=local,dev
8. 統合テストの実行
Spring Boot アプリケーションはテスト(またはテストスイート)自体から非常に簡単に起動できますが、ビルド自体で処理することが望ましい場合があります。Spring Boot アプリケーションのライフサイクルが統合テストを中心に適切に管理されていることを確認するには、次の例に示すように、start
および stop
ゴールを使用できます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
このようなセットアップでは、フェイルセーフプラグイン [Apache] (英語) を使用して、期待どおりに統合テストを実行できます。
デフォルトでは、アプリケーションは別のプロセスで開始され、アプリケーションとの通信には JMX が使用されます。JMX ポートを構成する必要がある場合は、専用の例を参照してください。 |
特定のプロパティが設定されたときに統合テストをスキップするように、より高度なセットアップを構成することもできます。専用の例を参照してください。
8.1. Spring Boot の親 POM なしでフェイルセーフを使用する
Spring Boot の親 POM である spring-boot-starter-parent
は、フェイルセーフの <classesDirectory>
を ${project.build.outputDirectory}
に構成します。この構成がないと、Failsafe は再パッケージ化された jar ではなくコンパイルされたクラスを使用するため、Failsafe はアプリケーションのクラスをロードできません。親 POM を使用していない場合は、次の例に示すように、同じ方法でフェイルセーフを構成する必要があります。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<classesDirectory>${project.build.outputDirectory}</classesDirectory>
</configuration>
</plugin>
8.2. spring-boot:start
org.springframework.boot:spring-boot-maven-plugin:2.6.6
Spring のアプリケーションを開始します。run
のゴールに反して、これはブロックせず、他のゴールがアプリケーションで動作することを許可します。このゴールは、通常、テストスイートの前にアプリケーションが開始され、その後に停止される統合テストシナリオで使用されます。
8.2.2. オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
|
| |
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
| |
| ||
|
| |
|
| |
| ||
| ||
|
| |
| ||
| ||
|
| |
| ||
|
| |
|
| |
|
8.2.3. パラメーターの詳細
addResources
maven リソースをクラスパスに直接追加します。これにより、リソースのインプレース編集をライブで行うことができます。target/classes
から重複するリソースは削除され、ClassLoader.getResources()
が呼び出された場合に重複して表示されることを防ぎます。spring-boot-devtools
をプロジェクトに追加することを検討してください。この機能やその他の機能を提供します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
agents
エージェント jar へのパス。注: この機能を使用するには、分岐したプロセスが必要です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
classesDirectory
アーカイブにパッケージ化する必要があるクラスとリソースファイルを含むディレクトリ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
commandlineArguments
アプリケーションに渡す必要のあるコマンドラインからの引数。スペースを使用して複数の引数を区切り、引用符で複数の値を囲むようにしてください。指定すると、#arguments
よりも優先されます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
directories
クラスパスに追加する必要のあるクラスディレクトリ以外の追加のディレクトリ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
environmentVariables
アプリケーションの実行に使用される分岐プロセスに関連付けられる環境変数のリスト。注: この機能を使用するには、分岐したプロセスが必要です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
excludeGroupIds
除外する groupId 名のコンマ区切りリスト(完全一致)。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude
要素は、必須の groupId
および artifactId
プロパティと、オプションの classifier
プロパティを定義します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
fork
実行プロセスを分岐する必要があるかどうかを示すフラグ。フォークを無効にすると、エージェント、カスタム JVM 引数、devtools、使用する作業ディレクトリの指定などの一部の機能が無効になります。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
includes
含めるアーティファクト定義のコレクション。Include
要素は、必須の groupId
および artifactId
プロパティと、オプションの必須の groupId
および artifactId
プロパティ、およびオプションの classifier
プロパティを定義します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
jmxName
spring アプリケーションのライフサイクルを管理する、自動的にデプロイされた MBean の JMX 名。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
jmxPort
アプリケーションがフォークされている場合にプラットフォーム MBeanServer を公開するために使用するポート。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
jvmArguments
アプリケーションの実行に使用される分岐プロセスに関連付けられる JVM 引数。コマンドラインで、引用符で複数の値を囲むようにしてください。注: この機能を使用するには、分岐したプロセスが必要です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
mainClass
メインクラスの名前。指定しない場合、"main" メソッドを含む最初に見つかったコンパイル済みクラスが使用されます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
maxAttempts
Spring アプリケーションの準備ができているかどうかを確認する最大試行回数。"wait" 引数と組み合わせると、グローバルタイムアウト値が得られます (デフォルトでは 30 秒)
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
noverify
エージェントが -noverify を必要とすることを示すフラグ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
profiles
アクティブにする Spring プロファイル。'spring.profiles.active' 引数を指定する便利なショートカット。コマンドラインでは、コンマを使用して複数のプロファイルを区切ります。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
systemPropertyVariables
プロセスに渡す JVM システムプロパティのリスト。注: この機能を使用するには、分岐したプロセスが必要です。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
useTestClasspath
実行時にテストクラスパスを含めるフラグ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
8.3. spring-boot:stop
org.springframework.boot:spring-boot-maven-plugin:2.6.6
「開始」ゴールによって開始されたアプリケーションを停止します。通常、テストスイートが完了すると呼び出されます。
8.3.1. オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
| ||
|
| |
|
| |
|
|
8.3.2. パラメーターの詳細
fork
停止するプロセスが分岐したかどうかを示すフラグ。デフォルトでは、値は MavenProject
から継承され、デフォルトのフォーク値(true
)にフォールバックします。設定されている場合は、プロセスの StartMojo start
に使用される値と一致する必要があります。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
jmxName
アプリケーションのライフサイクルを管理する、自動的にデプロイされた MBean の JMX 名。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
8.4. サンプル
8.4.1. 統合テスト用のランダムポート
Spring Boot テスト統合の優れた機能の 1 つは、Web アプリケーションに空きポートを割り当てることができることです。プラグインの start
ゴールが使用されると、Spring Boot アプリケーションが個別に開始され、統合テスト自体に実際のポートを渡すことが難しくなります。
以下の例は、ビルドヘルパー Maven プラグイン (英語) を使用して同じ機能を実現する方法を示しています。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>reserve-tomcat-port</id>
<goals>
<goal>reserve-network-port</goal>
</goals>
<phase>process-resources</phase>
<configuration>
<portNames>
<portName>tomcat.http.port</portName>
</portNames>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
<configuration>
<arguments>
<argument>--server.port=${tomcat.http.port}</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<test.server.port>${tomcat.http.port}</test.server.port>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
統合テストのいずれかで test.server.port
システムプロパティを取得して、サーバーに対して適切な URL
を作成できるようになりました。
8.4.2. JMX ポートをカスタマイズする
jmxPort
プロパティにより、プラグインが Spring Boot アプリケーションとの通信に使用するポートをカスタマイズできます。
この例は、9001
がすでに使用されている場合にポートをカスタマイズする方法を示しています。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jmxPort>9009</jmxPort>
</configuration>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
JMX ポートを構成する必要がある場合は、上記のようにグローバル構成で構成して、両方のゴールで共有されるようにしてください。 |
8.4.3. 統合テストをスキップ
skip
プロパティにより、Spring Boot maven プラグインの実行を完全にスキップできます。
この例は、コマンドラインプロパティを使用した統合テストをスキップし、repackage
ゴールが実行されることを確認する方法を示しています。
<project>
<properties>
<skip.it>false</skip.it>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
<configuration>
<skip>${skip.it}</skip>
</configuration>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
<configuration>
<skip>${skip.it}</skip>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<skip>${skip.it}</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
デフォルトでは、統合テストが実行されますが、このセットアップにより、次のようにコマンドラインで簡単に無効化できます。
$ mvn verify -Dskip.it=true
9. アクチュエーターとの統合
Spring Boot Actuator は、META-INF/build-info.properties
ファイルが存在する場合、ビルド関連情報を表示します。build-info
ゴールは、プロジェクトの座標とビルド時間を含むそのようなファイルを生成します。また、次の例に示すように、任意の数の追加プロパティを追加できます。
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>build-info</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
<configuration>
<additionalProperties>
<encoding.source>UTF-8</encoding.source>
<encoding.reporting>UTF-8</encoding.reporting>
<java.source>${maven.compiler.source}</java.source>
<java.target>${maven.compiler.target}</java.target>
</additionalProperties>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
この構成では、4 つの追加キーを使用して、予想される場所に build-info.properties
が生成されます。
maven.compiler.source と maven.compiler.target は、プロジェクトで利用可能な通常のプロパティであることが期待されています。それらは期待するように補間されます。 |
9.1. spring-boot:build-info
org.springframework.boot:spring-boot-maven-plugin:2.6.6
現在の MavenProject
の内容に基づいて build-info.properties
ファイルを生成します。
9.1.1. オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
| ||
| ||
|
| |
|
|
9.1.2. パラメーターの詳細
additionalProperties
build-info.properties
ファイルに保存する追加のプロパティ。生成された build-info.properties
では、各エントリの前に build.
が付きます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
excludeInfoProperties
build-info.properties
ファイルを除外する必要があるプロパティ。標準の group
、artifact
、name
、version
または time
プロパティ、および additionalProperties
からのアイテムを除外するために使用できます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
outputFile
生成された build-info.properties
ファイルの場所。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
time
Instant#parse(CharSequence)
に適した形式で build.time
プロパティに使用される値。前者が設定されていない場合、デフォルトは project.build.outputTimestamp
または session.request.startTime
です。build.time
プロパティを完全に無効にするには、'off'
を使用するか、excludeInfoProperties
に追加します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
10. ヘルプ情報
help
のゴールは、プラグインの機能に関する情報を表示する標準のゴールです。