プラグインの使用

Maven ユーザーは、spring-boot-starter-parent プロジェクトから継承して、適切なデフォルトを取得できます。親プロジェクトは次の機能を提供します。

  • デフォルトのコンパイラーレベルとしての Java 17。

  • UTF-8 ソースエンコーディング。

  • -parameters を使用したコンパイル。

  • 共通の依存関係のバージョンを管理する、spring-boot-dependencies POM から継承された依存関係管理セクション。この依存関係管理により、独自の POM で使用するときに、これらの依存関係の <version> タグを省略できます。

  • repackage 実行 ID を使用した repackage ゴールの実行。

  • ネイティブイメージを生成できるようにビルドを構成する native プロファイル。

  • 実用的なリソースフィルタリング [Apache] (英語)

  • 実用的なプラグイン構成(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 プロパティを設定することにより、それをオーバーライドできます。)

spring-boot-starter-parent は、システムモジュールを変更する場合 (英語) に --add-exports--add-reads--patch-module オプションを制限する maven.compiler.release プロパティを設定します。これらのオプションを使用する必要がある場合は、maven.compiler.release の設定を解除します。

<maven.compiler.release></maven.compiler.release>

次に、代わりにソースとターゲットのオプションを構成します。

<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>

親スターター POM の継承

spring-boot-starter-parent から継承するようにプロジェクトを構成するには、parent を次のように設定します。

<!-- Inherit defaults from Spring Boot -->
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.4.1</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 リファレンスの依存関係バージョンのプロパティセクションを参照してください。

親 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>3.4.1</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>3.4.1</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

コマンドラインで設定を上書きする

このプラグインには、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