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


Answers:


99

查看spring-boot-maven-plugin的源代码,我发现您需要这样做:

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

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

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

对于Spring Boot 2.x,源在这里,您现在需要使用-Dspring-boot.run.arguments="args1,args2"

如果您使用的是Gradle,并且希望能够将命令行参数传递给GradlebootRun任务,则首先需要进行配置,例如:

bootRun {
    if ( project.hasProperty('args') ) {
        args project.args.split('\\s+')
    }
}

并使用运行任务 gradle bootRun -Pargs="arg1 arg2"


谢谢。+1为您的答案。
sukrit007 2014年

@ sukrit007很高兴为您提供帮助!
geoand 2014年

他们非常愚蠢地接受标准空间上的逗号。RTFM春: docs.oracle.com/javase/tutorial/essential/environment/...
Ravindranath阿基拉

1
对于gradle 3.3,以下修改对我有用: bootRun { // Usage: gradle bootRun -Pargs="arg1 arg2" if ( project.hasProperty('args') ) { args = (project.args.split("\\s+") as List) } }
Farrukh Najmi

3
从Spring Boot 2开始,您应该使用-Dspring-boot.run.arguments=
mapm 18'Apr

38

使用-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"

为上述命令选择“开发”和“测试”配置文件。


从Spring Boot 2开始,您应该使用-Dspring-boot.run.arguments=
mapm 18'Apr

21

请注意:传递参数的方式取决于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-plugin中的12版本。
如果您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-pluginspring 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.AbstractRunMojospring-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"]


如何configuration在插件的pom.xml部分中指定参数?我试过了,<arguments><argument>-Dprop=value</argument></arguments>但它没有以这种方式获取属性值。
user1902183 '18

@ user1902183使用<arguments><argument>--prop=value</argument></arguments>
飞溅

3

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

所以不要写:

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

使用Spring Boot Mavenprofiles属性 ,它是以下的便捷快捷方式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


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.

1

如果您使用的是Eclipse ...

| 参数名称| 价值|
| run.arguments | “ --name = Adam” |


0

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

spring-boot:run -Djasypt.encryptor.password=temp -Dspring-boot.run.arguments="OU,Grade"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.