コマンドラインからスプリングブートアプリケーション(mvn spring-boot:run)を起動し、main()でそれらを取得するときに引数を入力する方法はありますか?
Spring-boot-maven-pluginの ソースコード を見ると、実行する必要があることがわかりました。
mvn spring-boot:run -Drun.arguments="arg1,arg2"
spring-boot
プラグインのrun
ゴールがサポートするオプションに関する詳細情報を取得する別の方法は、次のコマンドを実行することです。
mvn help:describe -Dcmd=spring-boot:run -Ddetail
Spring Boot 2.xの場合、ソースは here であり、-Dspring-boot.run.arguments="args1,args2"
を使用する必要があります
Gradleを使用していて、コマンドライン引数をGradle bootRun
タスクに渡すことができるようにしたい場合、まず次のように設定する必要があります。
bootRun {
if ( project.hasProperty('args') ) {
args project.args.split('\\s+')
}
}
gradle bootRun -Pargs="arg1 arg2"
を使用してタスクを実行します
-Drun.argumentsを使用して複数の引数を渡すときに、引数が順番に「コンマ区切り」の値を持つ場合、各引数の最初の値のみが使用されます。これを回避するには、値の数だけ引数を繰り返します。
これは回避策です。 「|」のように、区切り文字が異なる場合を除き、代替手段があるかどうかはわかりません。
例:問題:
mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,dev"
上記のコマンドの「テスト」プロファイルのみを選択します。
回避策:
mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,--spring.profiles.active=dev"
上記のコマンドの「dev」および「test」プロファイルの両方を選択します。
注意:引数を渡す方法は、spring-boot
メジャーバージョンによって異なります。
TLDR
Spring Boot 1の場合:
mvn spring-boot:run -Drun.arguments="argOne,argTwo"
Spring Boot 2の場合:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
1)spring-boot-maven-plugin
バージョンと使用するSpring Boot
バージョンを揃える必要があります。
使用されるSpring Bootのメジャーバージョン(1
または2
)に応じて、spring-boot-maven-plugin
または1
バージョンの2
が実際に使用される必要があります。pom.xml
がspring-boot-starter-parent
から継承する場合:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>ONE_OR_TWO_VERSION</version>
</parent>
あなたのpomでは、このプラグインの依存関係が継承されるため、使用するプラグインのバージョンを指定することすらしないでください:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
...
</configuration>
</plugin>
</plugins>
pom.xml
から継承していないspring-boot-starter-parent
の場合は、spring-boot-maven-plugin
のバージョンを、使用するspring boot
の正確なバージョンに合わせることを忘れないでください。
2)spring-boot-maven-plugin:1.X.Xでコマンドラインに引数を渡す
1つの引数の場合:
mvn spring-boot:run -Drun.arguments="argOne"
複数の場合:
mvn spring-boot:run -Drun.arguments="argOne,argTwo"
mavenプラグインページ 文書化:
Name Type Since Description
arguments | String[] | 1.0 | Arguments that should be passed
to the application. On command line use
commas to separate multiple arguments.
User property is: run.arguments.
3)spring-boot-maven-plugin:2.X.Xでコマンドラインに引数を渡す
1つの引数の場合:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne"
複数の場合:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
それを参照する2.X.Xバージョンのプラグインドキュメントは見つかりませんでした。
ただし、org.springframework.boot.maven.AbstractRunMojo
プラグインのspring-boot-maven-plugin:2.0.0.M3
クラスは、このユーザープロパティを参照します。
public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo
...
@Parameter(property="spring-boot.run.arguments")
private String[] arguments;
...
protected RunArguments resolveApplicationArguments(){
RunArguments runArguments = new RunArguments(this.arguments);
addActiveProfileArgument(runArguments);
return runArguments;
}
...
}
4)ヒント:複数の引数を渡すと、カンマ間の空白が考慮されます。
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
["argOne", "argTwo"]
として解釈されます
でも、これ :
mvn spring-boot:run -Dspring-boot.run.arguments="argOne, argTwo"
["argOne", " argTwo"]
として解釈されます
Spring Boot 1 as 2は、複数のプロファイルを引数として渡す方法を提供し、引数とアクティブなプロファイルとして渡される値の間のセパレータとして使用されるコンマに関連する問題を回避します。
だから書く代わりに:
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=test,--spring.profiles.active=dev
Spring Boot Maven profiles
property を使用します。これは、次のようなspring.profiles.active
の便利なショートカットです。
Mavenユーザープロパティは、Spring Bootのバージョンによって異なります。
Spring Boot 1.4+の場合、それはrun.profiles
です:
mvn spring-boot:run -Drun.profiles=dev,test
Spring Boot 2の場合は、spring-boot.run.profiles
です。
mvn spring-boot:run -Dspring-boot.run.profiles=dev,test
プラグインのドキュメントから:
プロファイル:
アクティブにするスプリングプロファイル。 'spring.profiles.active'引数を指定する便利なショートカット。コマンドラインでは、コンマを使用して複数のプロファイルを区切ります。
タイプ:Java.lang.String []
から:1.3
必須:いいえ
ユーザープロパティ:spring-boot.run.profiles
Eclipseを使用している場合...
|パラメータ名|値| | run.arguments | 「--name = Adam」|
これが私のために働いたものです(spring-boot v1.4.3.RELEASE
)。
mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true
最新バージョンのスプリングについては、以下の例に示すように-Dspring-boot.run.arguments =を使用します
spring-boot:run -Djasypt.encryptor.password=temp -Dspring-boot.run.arguments="OU,Grade"