从spring-boot:run获取命令行参数

时间:2014-04-26 21:43:51

标签: java maven spring-boot command-line-arguments

从命令行启动spring-boot应用程序(mvn spring-boot:run)时是否有任何方法可以输入参数,然后在main()中获取它们?

9 个答案:

答案 0 :(得分:91)

查看spring-boot-maven-plugin的source code,我发现你需要这样做:

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

获取有关run插件的spring-boot目标支持的选项的更多信息的另一种方法是执行以下命令:

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"

运行任务

答案 1 :(得分:32)

使用-Drun.arguments传递多个参数时,如果参数依次具有“逗号分隔”值,则只使用每个参数的第一个值。为了避免这种情况,重复参数的次数与值的数量相同。

这是一种解决方法。除非分隔符不同,否则不确定是否有替代方法 - 如“|”。

E.g问题:

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'和amp;上述命令的'test'配置文件。

答案 2 :(得分:15)

请注意:传递参数的方式取决于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主要版本(12),确实应使用spring-boot-maven-plugin1版本中的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

对于一个论点:

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

for multiple:

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

maven plugin page记录了它:

  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

对于一个论点:

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

for multiple:

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

答案 3 :(得分:2)

Spring Boot 1 as 2提供了一种方式来传递多个配置文件作为参数,并避免与逗号(用作args分隔符和作为活动配置文件传递的值)有关的问题。

所以不要写:

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

使用the Spring Boot Maven profiles property,它是spring.profiles.active的便捷快捷方式,如下所示:

根据Spring Boot版本,Maven用户属性有所不同。

对于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

答案 4 :(得分:2)

正如我今天检查的那样,Spring Boot 2.2.5的正确用法是:

mvn spring-boot:run -Dspring-boot.run.arguments="--arg1=value --arg2=value"

因为帮助说:

commandlineArguments
  User property: spring-boot.run.arguments
  Arguments from the command line that should be passed to the application.
  Use spaces to separate multiple arguments and make sure to wrap multiple
  values between quotes. When specified, takes precedence over arguments.

答案 5 :(得分:1)

如果您正在使用Eclipse ......

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

答案 6 :(得分:0)

这对我有用(spring-boot v1.4.3.RELEASE),.

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

答案 7 :(得分:0)

对于最新版本的spring,请使用 -Dspring-boot.run.arguments = ,如下面的示例所示

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

答案 8 :(得分:0)

我使用的是 spring.boot 2.4.2,我用空格分隔参数并将值放在双引号之间。

mvn spring-boot:run -Dspring-boot.run.arguments="--param1=value2 --param2=value2"