Maven でアプリケーションを実行する

プラグインには、次の例に示すように、コマンドラインからアプリケーションを起動するために使用できる実行ゴールが含まれています。

$ mvn spring-boot:run

アプリケーション引数は、arguments パラメーターを使用して指定できます。詳細については、アプリケーション引数の使用を参照してください。

アプリケーションはフォークされたプロセスで実行され、コマンドラインでプロパティを設定してもアプリケーションには影響しません。いくつかの JVM 引数を指定する必要がある場合(つまり、デバッグ目的で)、jvmArguments パラメーターを使用できます。詳細については、アプリケーションをデバッグするを参照してください。システムプロパティ環境変数も明示的にサポートされています。

プロファイルを有効にすることは非常に一般的であるため、-Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev" のショートカットを提供する専用の profiles プロパティがあります。アクティブなプロファイルを指定するを参照してください。

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 ディレクトリがアプリケーションのクラスパスに追加され、クラス出力で見つかった重複は削除されます。これにより、リソースのホットリフレッシュが可能になり、Web アプリケーションの開発時に非常に役立ちます。例: HTML、CSS、JavaScript ファイルで作業し、アプリケーションを再コンパイルすることなく変更をすぐに確認できます。これは、フロントエンド開発者が Java IDE をダウンロードしてインストールすることなく作業できるようにする便利な方法でもあります。

この機能を使用する副作用は、ビルド時にリソースのフィルタリングが機能しないことです。

repackage ゴールと一貫性を保つために、run ゴールは、プラグインの構成で除外される依存関係がクラスパスからも除外されるような方法でクラスパスを構築します。詳細については、専用の例を参照してください。

場合によっては、アプリケーションのテスト版を実行すると便利です。例: 開発時に Testcontainers を使用する場合、またはいくつかのテストスタブを使用する場合。この目的には、run と同じ機能と構成オプションの多くを備えた test-run ゴールを使用します。

spring-boot:run

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

アプリケーションを所定の場所で実行します。

必須パラメーター

名前 タイプ デフォルト

classesDirectory

File

${project.build.outputDirectory}

オプションのパラメーター

名前 タイプ デフォルト

addResources

boolean

false

additionalClasspathElements

String[]

agents

File[]

arguments

String[]

commandlineArguments

String

directories

String[]

environmentVariables

Map

excludeGroupIds

String

excludes

List

includes

List

jvmArguments

String

mainClass

String

noverify

boolean

optimizedLaunch

boolean

true

profiles

String[]

skip

boolean

false

systemPropertyVariables

Map

useTestClasspath

Boolean

false

workingDirectory

File

パラメーターの詳細

addResources

maven リソースをクラスパスに直接追加します。これにより、リソースのライブインプレース編集が可能になります。重複するリソースは、ClassLoader.getResources() が呼び出された場合に 2 回表示されるのを防ぐために、target/classes から削除されます。代わりに spring-boot-devtools をプロジェクトに追加することを検討してください。これは、この機能とその他多くの機能を提供します。

名前

addResources

タイプ

boolean

デフォルト値

false

ユーザープロパティ

spring-boot.run.addResources

開始

1.0.0

additionalClasspathElements

クラスパスに追加する必要がある追加のクラスパス要素。要素は、クラスとリソースを含むディレクトリ、または jar ファイルです。

名前

additionalClasspathElements

タイプ

java.lang.String[]

デフォルト値

ユーザープロパティ

spring-boot.run.additional-classpath-elements

開始

3.2.0

agents

エージェント jar へのパス。

名前

agents

タイプ

java.io.File[]

デフォルト値

ユーザープロパティ

spring-boot.run.agents

開始

2.2.0

arguments

アプリケーションに渡す必要のある引数。

名前

arguments

タイプ

java.lang.String[]

デフォルト値

ユーザープロパティ

開始

1.0.0

classesDirectory

アプリケーションの実行に使用するクラスとリソースファイルを含むディレクトリ。

名前

classesDirectory

タイプ

java.io.File

デフォルト値

${project.build.outputDirectory}

ユーザープロパティ

開始

1.0.0

commandlineArguments

アプリケーションに渡す必要のあるコマンドラインからの引数。スペースを使用して複数の引数を区切り、引用符で複数の値を囲むようにしてください。指定すると、#arguments よりも優先されます。

名前

commandlineArguments

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.run.arguments

開始

2.2.3

directories

クラスパスに追加する必要があるクラスまたはリソースを含む追加のディレクトリ。

名前

directories

タイプ

java.lang.String[]

デフォルト値

ユーザープロパティ

spring-boot.run.directories

開始

1.0.0

environmentVariables

アプリケーションの実行に使用されるフォークされたプロセスに関連付ける必要がある環境変数のリスト。

名前

environmentVariables

タイプ

java.util.Map

デフォルト値

ユーザープロパティ

開始

2.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

includes

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

名前

includes

タイプ

java.util.List

デフォルト値

ユーザープロパティ

spring-boot.includes

開始

1.2.0

jvmArguments

アプリケーションの実行に使用されるフォークされたプロセスに関連付ける必要がある JVM 引数。コマンドラインでは、複数の値を引用符で囲んでください。

名前

jvmArguments

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.run.jvmArguments

開始

1.1.0

mainClass

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

名前

mainClass

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.run.main-class

開始

1.0.0

noverify

エージェントが -noverify を必要とすることを示すフラグ。

名前

noverify

タイプ

boolean

デフォルト値

ユーザープロパティ

spring-boot.run.noverify

開始

1.0.0

optimizedLaunch

JVM の起動を最適化する必要があるかどうか。

名前

optimizedLaunch

タイプ

boolean

デフォルト値

true

ユーザープロパティ

spring-boot.run.optimizedLaunch

開始

2.2.0

profiles

アクティブにする Spring プロファイル。'spring.profiles.active' 引数を指定する便利なショートカット。コマンドラインでは、コンマを使用して複数のプロファイルを区切ります。

名前

profiles

タイプ

java.lang.String[]

デフォルト値

ユーザープロパティ

spring-boot.run.profiles

開始

1.3.0

skip

実行をスキップします。

名前

skip

タイプ

boolean

デフォルト値

false

ユーザープロパティ

spring-boot.run.skip

開始

1.3.2

systemPropertyVariables

プロセスに渡す JVM システムプロパティのリスト。

名前

systemPropertyVariables

タイプ

java.util.Map

デフォルト値

ユーザープロパティ

開始

2.1.0

useTestClasspath

実行時にテストクラスパスを含めるフラグ。

名前

useTestClasspath

タイプ

java.lang.Boolean

デフォルト値

false

ユーザープロパティ

spring-boot.run.useTestClasspath

開始

1.3.0

workingDirectory

アプリケーションに使用する現在の作業ディレクトリ。指定しない場合、basedir が使用されます。

名前

workingDirectory

タイプ

java.io.File

デフォルト値

ユーザープロパティ

spring-boot.run.workingDirectory

開始

1.5.0

spring-boot:test-run

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

テストランタイムクラスパスを使用してアプリケーションを適切に実行します。アプリケーションの起動に使用されるメインクラスは次のように決定されます。設定されているメインクラス (存在する場合)。次に、テストクラスディレクトリでメインクラスが見つかります (存在する場合)。次に、classes ディレクトリ内にメインクラスが見つかります (存在する場合)。

必須パラメーター

名前 タイプ デフォルト

classesDirectory

File

${project.build.outputDirectory}

testClassesDirectory

File

${project.build.testOutputDirectory}

オプションのパラメーター

名前 タイプ デフォルト

addResources

boolean

false

additionalClasspathElements

String[]

agents

File[]

arguments

String[]

commandlineArguments

String

directories

String[]

environmentVariables

Map

excludeGroupIds

String

excludes

List

includes

List

jvmArguments

String

mainClass

String

noverify

boolean

optimizedLaunch

boolean

true

profiles

String[]

skip

boolean

false

systemPropertyVariables

Map

workingDirectory

File

パラメーターの詳細

addResources

maven リソースをクラスパスに直接追加します。これにより、リソースのライブインプレース編集が可能になります。重複するリソースは、ClassLoader.getResources() が呼び出された場合に 2 回表示されるのを防ぐために、target/classes から削除されます。代わりに spring-boot-devtools をプロジェクトに追加することを検討してください。これは、この機能とその他多くの機能を提供します。

名前

addResources

タイプ

boolean

デフォルト値

false

ユーザープロパティ

spring-boot.run.addResources

開始

1.0.0

additionalClasspathElements

クラスパスに追加する必要がある追加のクラスパス要素。要素は、クラスとリソースを含むディレクトリ、または jar ファイルです。

名前

additionalClasspathElements

タイプ

java.lang.String[]

デフォルト値

ユーザープロパティ

spring-boot.run.additional-classpath-elements

開始

3.2.0

agents

エージェント jar へのパス。

名前

agents

タイプ

java.io.File[]

デフォルト値

ユーザープロパティ

spring-boot.run.agents

開始

2.2.0

arguments

アプリケーションに渡す必要のある引数。

名前

arguments

タイプ

java.lang.String[]

デフォルト値

ユーザープロパティ

開始

1.0.0

classesDirectory

アプリケーションの実行に使用するクラスとリソースファイルを含むディレクトリ。

名前

classesDirectory

タイプ

java.io.File

デフォルト値

${project.build.outputDirectory}

ユーザープロパティ

開始

1.0.0

commandlineArguments

アプリケーションに渡す必要のあるコマンドラインからの引数。スペースを使用して複数の引数を区切り、引用符で複数の値を囲むようにしてください。指定すると、#arguments よりも優先されます。

名前

commandlineArguments

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.run.arguments

開始

2.2.3

directories

クラスパスに追加する必要があるクラスまたはリソースを含む追加のディレクトリ。

名前

directories

タイプ

java.lang.String[]

デフォルト値

ユーザープロパティ

spring-boot.run.directories

開始

1.0.0

environmentVariables

アプリケーションの実行に使用されるフォークされたプロセスに関連付ける必要がある環境変数のリスト。

名前

environmentVariables

タイプ

java.util.Map

デフォルト値

ユーザープロパティ

開始

2.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

includes

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

名前

includes

タイプ

java.util.List

デフォルト値

ユーザープロパティ

spring-boot.includes

開始

1.2.0

jvmArguments

アプリケーションの実行に使用されるフォークされたプロセスに関連付ける必要がある JVM 引数。コマンドラインでは、複数の値を引用符で囲んでください。

名前

jvmArguments

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.run.jvmArguments

開始

1.1.0

mainClass

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

名前

mainClass

タイプ

java.lang.String

デフォルト値

ユーザープロパティ

spring-boot.run.main-class

開始

1.0.0

noverify

エージェントが -noverify を必要とすることを示すフラグ。

名前

noverify

タイプ

boolean

デフォルト値

ユーザープロパティ

spring-boot.run.noverify

開始

1.0.0

optimizedLaunch

JVM の起動を最適化する必要があるかどうか。

名前

optimizedLaunch

タイプ

boolean

デフォルト値

true

ユーザープロパティ

spring-boot.test-run.optimizedLaunch

開始

profiles

アクティブにする Spring プロファイル。'spring.profiles.active' 引数を指定する便利なショートカット。コマンドラインでは、コンマを使用して複数のプロファイルを区切ります。

名前

profiles

タイプ

java.lang.String[]

デフォルト値

ユーザープロパティ

spring-boot.run.profiles

開始

1.3.0

skip

実行をスキップします。

名前

skip

タイプ

boolean

デフォルト値

false

ユーザープロパティ

spring-boot.run.skip

開始

1.3.2

systemPropertyVariables

プロセスに渡す JVM システムプロパティのリスト。

名前

systemPropertyVariables

タイプ

java.util.Map

デフォルト値

ユーザープロパティ

開始

2.1.0

testClassesDirectory

アプリケーションの実行に使用する必要があるテストクラスとリソースファイルを含むディレクトリ。

名前

testClassesDirectory

タイプ

java.io.File

デフォルト値

${project.build.testOutputDirectory}

ユーザープロパティ

開始

workingDirectory

アプリケーションに使用する現在の作業ディレクトリ。指定しない場合、basedir が使用されます。

名前

workingDirectory

タイプ

java.io.File

デフォルト値

ユーザープロパティ

spring-boot.run.workingDirectory

開始

1.5.0

サンプル

アプリケーションをデバッグする

run および test-run ゴールは、フォークされたプロセスでアプリケーションを実行します。デバッグする必要がある場合は、必要な JVM 引数を追加して、リモートデバッグを有効にする必要があります。次の設定では、デバッガーがポート 5005 に参加するまでプロセスが一時停止されます。

<project>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<jvmArguments>
						-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005
					</jvmArguments>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

これらの引数はコマンドラインでも指定できます。

$ mvn spring-boot:run -Dspring-boot.run.jvmArguments=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005

システムプロパティの使用

システムプロパティは、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 で指定された値をトリムするため、このメカニズムを使用してスペースで開始または終了する必要があるシステムプロパティを指定することはできません。代わりに jvmArguments の使用を検討してください。

文字列型の Maven 変数は、システムプロパティとして渡すことができます。他の Maven 変数型(たとえば、List または URL 変数)を渡そうとすると、変数式が文字通り(未評価)渡されます。

jvmArguments パラメーターは、上記のメカニズムで定義されたシステムプロパティよりも優先されます。次の例では、property1 の値は overridden です。

$ mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dproperty1=overridden"

環境変数の使用

環境変数は、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 変数)を渡そうとすると、変数式が文字通り(未評価)渡されます。

この方法で定義された環境変数は、既存の値よりも優先されます。

アプリケーション引数の使用

アプリケーションの引数は、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'"

アクティブなプロファイルを指定する

特定のアプリケーションに使用するアクティブなプロファイルは、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