実行可能アーカイブのパッケージ化

プラグインは、アプリケーションのすべての依存関係を含む実行可能アーカイブ(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 機能は現在サポートされていません。

spring-boot-devtools および spring-boot-docker-compose モジュールは、デフォルトで自動的に除外されます (これは、excludeDevtools および excludeDockerCompose プロパティを使用して制御できます)。これを war パッケージ化で機能させるには、spring-boot-devtools および spring-boot-docker-compose の依存関係を 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: すべての依存関係とプロジェクトリソースをバンドルします。ブートストラップローダーをバンドルしません。

階層化された 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 のローカルキャッシュにインストールされており、現在のビルドの一部ではないためにのみ解決できる場合、通常の依存関係として識別されます。

レイヤーの順序は、アプリケーションの一部が変更されたときに前のレイヤーがキャッシュされる可能性を決定するため、重要です。デフォルトの順序は dependenciesspring-boot-loadersnapshot-dependenciesapplication です。変更の可能性が最も低いコンテンツを最初に追加し、次に変更の可能性が高いレイヤーを追加する必要があります。

再パッケージ化されたアーカイブには、デフォルトで 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>

カスタムレイヤー構成

アプリケーションによっては、レイヤーの作成方法を調整し、新しいレイヤーを追加したい場合があります。これは、以下に示すように登録する必要がある別の構成ファイルを使用して実行できます。

<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
	                      layers-xsd: https://www.springframework.org/schema/boot/layers/layers-3.3.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> ブロックによって参照されるすべてのレイヤーをカバーする必要があります。

spring-boot:repackage

org.springframework.boot:spring-boot-maven-plugin:3.3.1

java -jar を使用してコマンドラインから実行できるように、既存の JAR および WAR アーカイブを再パッケージ化します。layout=NONE を使用すると、ネストされた依存関係を持つ JAR を単純にパッケージ化することもできます(メインクラスがないため、実行可能ファイルではありません)。

必須パラメーター

名前 タイプ デフォルト

outputDirectory

File

${project.build.directory}

パラメーターの詳細

attach

再パッケージ化されたアーカイブを添付して、ローカル Maven リポジトリにインストールするか、リモートリポジトリにデプロイします。分類子が構成されていない場合、通常の jar を置き換えます。classifier が通常の jar と再パッケージ化された jar が異なるように構成されている場合、通常の jar と一緒に接続されます。プロパティが false に設定されている場合、再パッケージ化されたアーカイブはインストールまたはデプロイされません。

名前

attach

タイプ

boolean

デフォルト値

true

ユーザープロパティ

開始

1.4.0

classifier

再パッケージ化されたアーカイブに追加する分類子。指定しない場合、メインのアーティファクトは再パッケージ化されたアーカイブに置き換えられます。指定された場合、分類子は、再パッケージ化するソースアーカイブを決定するためにも使用されます。その分類子を持つアーティファクトがすでに存在する場合、それがソースとして使用され、置き換えられます。そのようなアーティファクトが存在しない場合、メインのアーティファクトがソースとして使用され、再パッケージ化されたアーカイブがその分類子の補足アーティファクトとして添付されます。アーティファクトをアタッチすると、元のアーティファクトと一緒にデプロイできます。詳細については、Maven のドキュメントを参照してください [Apache] (英語)

名前

classifier

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

開始

1.0.0

embeddedLaunchScript

jar が完全に実行可能な場合、jar の前に追加する埋め込み起動スクリプト。指定しない場合は、"Spring Boot" デフォルトスクリプトが使用されます。

名前

embeddedLaunchScript

タイプ

java.io.File

デフォルト値

ユーザープロパティ

開始

1.3.0

embeddedLaunchScriptProperties

埋め込み起動スクリプトで展開する必要があるプロパティ。

名前

embeddedLaunchScriptProperties

タイプ

java.util.Properties

デフォルト値

ユーザープロパティ

開始

1.3.0

excludeDevtools

再パッケージ化されたアーカイブから Spring Boot devtools を除外します。

名前

excludeDevtools

タイプ

boolean

デフォルト値

true

ユーザープロパティ

spring-boot.repackage.excludeDevtools

開始

1.3.0

excludeDockerCompose

再パッケージ化されたアーカイブから Spring Boot 開発サービスを除外します。

名前

excludeDockerCompose

タイプ

boolean

デフォルト値

true

ユーザープロパティ

spring-boot.repackage.excludeDockerCompose

開始

3.1.0

excludeGroupIds

除外する groupId 名のコンマ区切りリスト(完全一致)。

名前

excludeGroupIds

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.excludeGroupIds

開始

1.1.0

excludes

除外するアーティファクト定義のコレクション。Exclude 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier

名前

excludes

タイプ

java.util.List

デフォルト値

ユーザープロパティ

spring-boot.excludes

開始

1.1.0

executable

起動スクリプトを jar の先頭に追加して、*nix マシン用の完全に実行可能な jar を作成します。<p> 現在、一部のツールはこの形式を受け入れないため、常にこの手法を使用できるとは限りません。例: jar -xf は、完全に実行可能にされた jar または war の抽出に暗黙的に失敗する場合があります。このオプションは、java -jar で実行したり、サーブレットコンテナーにデプロイしたりするのではなく、直接実行する場合にのみ有効にすることをお勧めします。

名前

executable

タイプ

boolean

デフォルト値

false

ユーザープロパティ

開始

1.3.0

includeSystemScope

システムスコープの依存関係を含めます。

名前

includeSystemScope

タイプ

boolean

デフォルト値

false

ユーザープロパティ

開始

1.4.0

includeTools

JAR ツールを含めます。

名前

includeTools

タイプ

boolean

デフォルト値

true

ユーザープロパティ

開始

3.3.0

includes

含めるアーティファクト定義のコレクション。Include 要素は、必須の groupId および artifactId コンポーネントとオプションの classifier コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier

名前

includes

タイプ

java.util.List

デフォルト値

ユーザープロパティ

spring-boot.includes

開始

1.2.0

layers

レイヤーの作成を無効にし、レイヤーツール jar を除外し、カスタムレイヤー構成ファイルを提供するオプションを備えたレイヤー構成。

名前

layers

タイプ

org.springframework.boot.maven.Layers (Javadoc)

デフォルト値

ユーザープロパティ

開始

2.3.0

layout

アーカイブの型(依存関係がアーカイブ内にどのように配置されているかに対応します)。可能な値は JARWARZIPDIRNONE です。デフォルトは、アーカイブ型に基づく推測です。

名前

layout

タイプ

org.springframework.boot.maven.AbstractPackagerMojo$LayoutType (Javadoc)

デフォルト値

ユーザープロパティ

spring-boot.repackage.layout

開始

1.0.0

layoutFactory

明示的なレイアウトが設定されていない場合に実行可能アーカイブを作成するために使用されるレイアウトファクトリ。サードパーティが代替レイアウトの実装を提供できます。

名前

layoutFactory

タイプ

org.springframework.boot.loader.tools.LayoutFactory (Javadoc)

デフォルト値

ユーザープロパティ

開始

1.5.0

loaderImplementation

使用する必要があるローダー実装。

名前

loaderImplementation

タイプ

org.springframework.boot.loader.tools.LoaderImplementation (Javadoc)

デフォルト値

ユーザープロパティ

開始

3.2.0

mainClass

メインクラスの名前。指定しない場合、main メソッドを含む最初に見つかったコンパイル済みクラスが使用されます。

名前

mainClass

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

開始

1.0.0

outputDirectory

生成されたアーカイブを含むディレクトリ。

名前

outputDirectory

タイプ

java.io.File

デフォルト値

${project.build.directory}

ユーザープロパティ

開始

1.0.0

outputTimestamp

ISO 8601(yyyy-MM-dd’T’HH:mm:ssXXX)またはエポックからの秒数を表す int としてフォーマットされた、再現可能な出力アーカイブエントリのタイムスタンプ。

名前

outputTimestamp

タイプ

java.lang.String

デフォルト値

${project.build.outputTimestamp}

ユーザープロパティ

開始

2.3.0

requiresUnpack

実行するために uber jar から解凍する必要があるライブラリのリスト。各ライブラリを <groupId> および <artifactId> とともに <dependency> として指定すると、実行時に解凍されます。

名前

requiresUnpack

タイプ

java.util.List

デフォルト値

ユーザープロパティ

開始

1.1.0

skip

実行をスキップします。

名前

skip

タイプ

boolean

デフォルト値

false

ユーザープロパティ

spring-boot.repackage.skip

開始

1.2.0

サンプル

カスタム分類子

デフォルトでは、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>

カスタム名

再パッケージ化された 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 に再パッケージ化されたアーティファクトが生成されます。

ローカルで再パッケージ化されたアーティファクト

デフォルトでは、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 ゴールによって生成された実行可能なカウンターパートです。オリジナルのもののみがインストール / デプロイされます。

カスタムレイアウト

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 にリストされている場合、プラグイン構成で明示的に設定する必要はありません。

明示的なレイアウトが設定されている場合、レイアウトファクトリは常に無視されます。

依存関係の除外

デフォルトでは、repackage ゴールと run ゴールの両方に、プロジェクトで定義されている provided 依存関係が含まれます。Spring Boot プロジェクトでは、provided の依存関係を、アプリケーションの実行に必要な「コンテナー」の依存関係と見なす必要があります。一般に、Spring Boot プロジェクトは依存関係として使用されないため、optional 依存関係を持つ可能性はほとんどありません。プロジェクトにオプションの依存関係がある場合、それらも repackage および run ゴールに含まれます。

これらの依存関係の一部はまったく必要ない場合があり、実行可能な 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>

JAR ツール

階層化された jar または war が作成されると、spring-boot-jarmode-tools jar が依存関係としてアーカイブに追加されます。クラスパス上のこの jar を使用すると、特別なモードでアプリケーションを起動できます。これにより、ブートストラップコードで、アプリケーションとはまったく異なるもの(たとえば、レイヤーを抽出するもの)を実行できます。この依存関係を除外する場合は、次の方法で行うことができます。

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<includeTools>false</includeTools>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

カスタムレイヤー構成

デフォルトのセットアップでは、依存関係がスナップショットと非スナップショットに分割されますが、より複雑なルールがある場合があります。例: プロジェクトの会社固有の依存関係を専用レイヤーに分離したい場合があります。次の 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
						  layers-xsd: https://www.springframework.org/schema/boot/layers/layers-3.3.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 レイヤーを作成します。