Maven spring boot使用参数

时间:2016-03-25 10:12:27

标签: java spring maven spring-boot maven-3

通常我用命令运行我的Spring Boot应用程序:

mvn spring-boot:run -Drun.arguments=--server.port=9090 \
   -Dpath.to.config.dir=/var/data/my/config/dir

我想设置自定义端口进行调试,所以我可以从eclipse连接。当我从示例http://docs.spring.io/spring-boot/docs/1.1.2.BUILD-SNAPSHOT/maven-plugin/examples/run-debug.html

添加参数时
mvn spring-boot:run -Drun.arguments=--server.port=9090 \
   -Dpath.to.config.dir=/var/data/my/config/dir \
   -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8787"

它有效,但其他参数如server.portpath.to.config.dir不再被识别,我得到例外:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed
to parse configuration class [com.my.app.Controller]; nested exception
is java.lang.IllegalArgumentException: Could not resolve placeholder
'path.to.config.dir' in string value
file:///${path.to.config.dir}/some.properties"

问题:我如何运行所有参数?

6 个答案:

答案 0 :(得分:25)

您发现的行为和更改正在发生,因为您开始使用jvmArguments选项:

  

应与用于运行应用程序的分叉进程关联的JVM参数。在命令行上,确保在引号之间包含多个值。

默认情况下,使用它时,Spring Boot Maven插件也将执行分叉,如fork选项所述:

  

指示是否应分叉运行进程的标志。默认情况下,只有在指定了代理或jvmArguments时才会使用进程分叉。

因此,jvmArguments的使用也激活了插件执行的fork模式。通过分叉,您实际上没有获取从命令行传递的其他-D参数。

解决方案:如果您想使用jvmArguments,请将所有必需的参数传递给它。

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8787 -Dserver.port=9090 -Dpath.to.config.dir=/var/data/my/config/dir"

答案 1 :(得分:10)

请注意,从spring-boot 2.0名称已更改。有关详细信息,请查看:

https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/maven-plugin/run-mojo.html

  • run.jvmArguments - >弹簧boot.run.jvmArguments
  • run.arguments - >弹簧boot.run.arguments

答案 2 :(得分:9)

spring-boot.一样,参数名称必须以-Dspring-boot.run.jvmArgument为前缀

Spring Boot documentation在我运行Spring Boot 2.0.3时为我提供了解决方案

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

答案 3 :(得分:0)

还有一个问题。如果 pom.xml 定义了 jvmArguments 那么命令行参数将被忽略

<plugin>
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <jvmArguments>-Xmx2048m -XX:NativeMemoryTracking=summary --enable-preview</jvmArguments>
        </configuration>
</plugin>

如果我想向其中一个启动器添加调试属性

-Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8282"

这行不通。

答案 4 :(得分:0)

遵循redhat documentation ..

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$PORT_NUMBER"

答案 5 :(得分:0)

使用 Powershell 从 Maven 命令行覆盖 spring-boot 属性:

  • Spring Boot 2.4.4
  • Maven 3.6.3
  • Powershell Windows 10

这对我有用:

for data in filter(any, reader):
    print(data)