Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Для Spring Boot 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"

Ответ 2

При передаче нескольких аргументов с использованием -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" для указанной команды.

Ответ 3

Имейте в виду: способ передачи аргументов зависит от основной версии spring-boot.

TL;DR

Для 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.XX

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

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

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

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

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

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

Я не нашел документации по плагину для версии 2.XX, которая ссылается на это.
Но класс 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"]

Ответ 4

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

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

Ответ 5

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

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

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

используйте свойство profiles Spring Boot Maven, которое является ярлыком удобства для 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

Ответ 6

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

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

Ответ 7

Для последней версии Spring используйте -Dspring-boot.run.arguments =, как показано в примере ниже

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