Получить аргументы командной строки из spring-boot: run


есть ли способ ввода аргументов при запуске spring-boot application (mvn spring-boot:run) из командной строки, а затем получить их в main ()?

6 52

6 ответов:

смотреть на!--9-->исходный код из spring-boot-maven-плагина я обнаружил, что вам нужно сделать:

mvn spring-boot:run -Drun.arguments="arg1,arg2"

еще один способ получить дополнительную информацию о том, какие варианты run цель spring-boot плагин поддерживает выполнение следующей команды:

mvn help:describe -Dcmd=spring-boot:run -Ddetail

Для Пружинной Загрузки 2.x, Источник здесь и теперь вам нужно использовать -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.аргументы, если аргумент в свою очередь имеет значения, разделенные запятыми, то используется только первое значение каждого аргумента. Чтобы избежать этого повторите аргумент столько раз, сколько число значений.

это скорее обходной путь. Не уверен, что есть альтернатива, если разделитель не отличается - как '|'.

например, вопрос:

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

Для Пружинной Загрузки 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 версия и the 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-плагин: 1.Х. Х

для одного аргумента:

mvn spring-boot:run -Drun.arguments="argOne"

для нескольких :

mvn spring-boot:run -Drun.arguments="argOne,argTwo"

The страница плагина 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.Х. Х

для одного аргумента:

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"]

и если вы используете Eclipse...

| Parameter Name | Value         |
| run.arguments  | "--name=Adam" |

это то, что сработало для меня (spring-boot v1.4.3.RELEASE),.

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

Spring Boot 1 as 2 предоставляет способ передать несколько профилей в качестве аргумента и избежать проблемы, связанной с запятой, используемой как разделитель между args и значениями, переданными как активный профиль.

вместо того, чтобы писать :

mvn spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=test,--spring.profiles.active=dev

использовать пружинный ботинок Maven profiles свойства это удобный ярлык 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

из документации плагина:

профили:

профили пружины для активации. Удобство быстрого указания в весна.профили.активный аргумент. В командной строке используйте запятые, чтобы разделите несколько профилей.

тип: java.ленг.Строка[]

С: 1.3

: Не Требуется

Свойства Пользователя: spring-boot.бежать.профили