web-dev-qa-db-ja.com

spring-boot:runからコマンドライン引数を取得します

コマンドラインからスプリングブートアプリケーション(mvn spring-boot:run)を起動し、main()でそれらを取得するときに引数を入力する方法はありますか?

61
sandris

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"を使用してタスクを実行します

94
geoand

-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」プロファイルの両方を選択します。

33

注意:引数を渡す方法は、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.xmlspring-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"]として解釈されます

18
davidxxx

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

2
davidxxx

Eclipseを使用している場合...

 |パラメータ名|値| 
 | run.arguments | 「--name = Adam」| 
1
aakoch

これが私のために働いたものです(spring-boot v1.4.3.RELEASE)。

mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true
0
Anand Rockzz

最新バージョンのスプリングについては、以下の例に示すように-Dspring-boot.run.arguments =を使用します

spring-boot:run -Djasypt.encryptor.password=temp -Dspring-boot.run.arguments="OU,Grade"
0
Pratik Shukla