繁体   English   中英

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

[英]Get command-line arguments from spring-boot:run

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

查看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,源代码在这里,您现在需要使用-Dspring-boot.run.arguments="args1,args2"

(从 2021 年 4 月开始编辑)对于 Spring Boot 2.2+,您现在需要使用-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.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' 配置文件。

请注意:传递参数的方式取决于spring-boot major.minor 版本。

TLDR

对于 Spring Boot 1:

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

对于 Spring Boot 2.0 和 2.1:

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

(从 2021 年 4 月开始编辑)对于 Spring Boot 2.2 及更高版本:

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

  1. spring-boot-maven-plugin版本和你使用的Spring Boot版本必须对齐。

根据使用的 Spring Boot 主要版本( 12 ),确实应该使用12版本中的spring-boot-maven-plugin
如果您的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的确切版本对齐。

  1. 使用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.
  1. 使用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 版本的插件文档。
但是spring-boot-maven-plugin:2.0.0.M3插件的org.springframework.boot.maven.AbstractRunMojo类引用了这个用户属性:

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;
   }
   ...
 }
  1. 提示:当您传递多个参数时,会考虑逗号之间的空格。

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

将被解释为["argOne", "argTwo"]

但是这个 :

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

将被解释为["argOne", " argTwo"]

(2021 年 3 月编辑)

空格现在用作多参数命令的分隔符,请参阅相关问题

正如我今天检查的那样,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.

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属性,它是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

如果您使用的是 Eclipse ......

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

这对我spring-boot v1.4.3.RELEASEspring-boot v1.4.3.RELEASE ),。

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

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

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

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

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

对 Spring Boot 应用程序使用以下命令。

mvn spring-boot:run -Dspring-boot.run.arguments="--java.net.preferIPv4Stack=true --config.password=PASSWORD --config.token=s.TOKEN --spring.application.name=ENV --config.server.ip=IP_ADDRESS --spring.profiles.active=ENV --spring.profiles.active.custom=ENV_custom"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM