Maven 弹簧启动运行调试与参数

2022-08-31 13:59:09

通常我使用以下命令运行Spring Boot应用程序:

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

我想设置自定义端口进行调试,以便我可以从 eclipse 进行连接。当我从示例中添加参数时 https://docs.spring.io/spring-boot/docs/1.1.2.RELEASE/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"

:如何使用所有参数运行?


答案 1

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

Spring Boot 文档为我提供了运行中的解决方案Spring Boot 2.0.3

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

答案 2

您注意到的行为和更改是由于您开始使用 jvmArguments 选项而发生的:

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

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

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

因此,使用也激活了插件执行的分叉模式。通过分叉,您实际上不会拾取从命令行传递的其他参数。jvmArguments-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"

-- 编辑 22/09/2020还要检查@Stephane中的其他答案以补偿此答案(参数前缀)


推荐