如何使用 Gradle 命令行参数调试 SpringBoot,而不暂停服务器?

Top*_*era 5 java debugging command-line gradle spring-boot

我想使用 Gradle 在调试模式下启动我的 SpringBoot 应用程序(在我的机器上使用与生产中使用的命令相同的命令)

要启动我的服务器,我使用

$ gradle bootRun
Run Code Online (Sandbox Code Playgroud)

我知道我可以添加一个参数来启动调试模式

$ gradle bootRun --debug-jvm
Run Code Online (Sandbox Code Playgroud)

问题是上面的命令使服务器挂起(直到我连接调试器后服务器才启动)

我可以通过将以下代码添加到 build.gradle 来获得所需的行为,但是,我想使用命令行参数,以避免错误地提交 build.gradle。

bootRun {
   jvmArgs(['-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'])
}
Run Code Online (Sandbox Code Playgroud)

注意:如果我添加以下参数,我将调试 gradle 守护进程(或另一个 gradle 事物),而不是我的应用程序,因此它也不是有效的解决方案:

gradle bootRun -Dorg.gradle.jvmargs="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
Run Code Online (Sandbox Code Playgroud)

注 2:以下代码不起作用 - 服务器以非调试模式启动

gradle bootRun -Dagentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Run Code Online (Sandbox Code Playgroud)

相关:如何使用gradle调试spring应用程序

sma*_*c89 1

您基本上是在问如何将变量传递到您的项目。

Gradle 有很多方法可以做到这一点。我更喜欢项目属性方法。

创建一个环境变量,例如:

ORG_GRADLE_PROJECT_debug_jvm=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Run Code Online (Sandbox Code Playgroud)

gradle.build

bootRun {
   jvmArgs project.findProperty('debug_jvm') ?: ''
}
Run Code Online (Sandbox Code Playgroud)

另请参阅:将环境变量传递给 gradle.properties