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

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

91429 次浏览

看看 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"运行任务

如果你用的是 Eclipse..。

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

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

这更像是个变通方案。除非分隔符与“ |”不同,否则不确定是否有其他选择。

例如:

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

只为上面的命令选择“ test”配置文件。

解决办法:

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

为上面的命令选择‘ dev’和‘ test’配置文件。

这是什么为我工作(spring-boot v1.4.3.RELEASE) ,。

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

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

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 启动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>

在你的文件中,甚至不应该指定所使用的插件的版本,因为这个插件的依赖性是继承的:

<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.X. X在命令行中传递参数

一个理由是:

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.X. X在命令行中传递参数

一个理由是:

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

多重:

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

我没有找到2.X.X 版本的相关插件文档。
但是 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.words = “ argOne,argTwo”

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

但这个:

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

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

(编辑自2021年3月)

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

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

所以不要写:

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

使用方便快捷的 SpringBootMavenprofiles属性,例如:

Maven 用户属性根据 SpringBoot 版本的不同而不同。

对于 Spring Boot 1.4 + ,它是 run.profiles:

mvn spring-boot:run -Drun.profiles=dev,test

对于 Spring Boot2,这是 spring-boot.run.profiles:

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

来自插件文档:

个人资料 :

要激活的弹簧配置文件。指定 在命令行上使用逗号来 分开多个侧写。

类型: java.lang. String []

从1.3开始

要求: 不

用户属性: Spring-boot run.profile

对于最新版本的弹簧使用 - Dspring-boot. run.words = ,如下面的示例所示

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

正如我今天检查的,SpringBoot2.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 2.4.2,我用 withe-space 分隔参数,并将值放在双引号之间。

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