如何使用Gradle调试Spring应用程序

17 浏览
0 Comments

如何使用Gradle调试Spring应用程序

我正在开发一个Spring应用程序,需要逐步执行控制器方法以了解其工作原理。\n我在Eclipse中工作,并使用gradle bootRun命令构建我的应用程序。\n如何以调试模式运行它?\n我尝试了gradle bootRun --debug,但只是输出调试日志,而不是调试模式。\n我尝试了gradle help --task bootRun - 这给我提供了有关任务的信息。\n在那里,我看到了--debug-jvm选项,但当我运行gradle bootRun --debug-jvm时应用程序不会启动。

0
0 Comments

如何使用Gradle调试Spring应用程序

对于通过Google搜索并想知道如何启用Spring的调试模式(通常通过java -jar app.jar --debug实现)并使用Gradle的人们,这里是解决方法。这将--debug传递给主类,这是您打开Spring Boot的调试模式的方式,其中记录了自动配置类等内容。

./gradlew bootRun --args='--debug'

当您在Gradle中运行Spring应用程序时,如果希望启用Spring Boot的调试模式,可以使用上述命令。这将在命令行中将--debug参数传递给主类,从而打开Spring Boot的调试模式,并记录自动配置类等信息。

0
0 Comments

问题的原因是使用gradle bootRun --debug-jvm命令使gradle构建在调试模式下运行,但实际上想要实现的是通过springBoot任务在调试模式下启动应用程序。解决方法是在build.gradle文件中配置bootRun任务,添加调试配置。

对于build.gradle文件,配置如下:

bootRun {
  jvmArgs=["-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=32323"]
}

对于build.gradle.kts文件,配置如下(禁用暂停模式):

tasks {

val bootRun by getting(BootRun::class) {

jvmArgs=listOf("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=32323")

}

}

如果服务器在云上,想要从本地机器进行调试,需要确保服务器允许外部连接。在这种情况下,可以使用以下配置:

tasks {
val bootRun by getting(BootRun::class) {
    jvmArgs=listOf("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:32323")
    }
}

需要注意的是,地址现在是0.0.0.0:port,而不仅仅是port

最后,需要指出的是,--debug-jvm命令并不会调试主gradle进程。bootRun进程是JavaExec的子类,当接收到--debug-jvm标志时,会在调试模式下启动一个子进程。

0
0 Comments

如何使用Gradle调试Spring应用程序

当你运行gradle bootRun --debug-jvm命令时,应用程序会暂停,直到你连接调试器到它监听的端口(端口5005)。

如果在运行gradle bootRun --debug-jvm命令时遇到问题,而且进度在96%时停在了“Building 96% > ::bootRun”,那么“suspended”表示你需要点击“remote debug”按钮连接到监听器,然后应用程序会开始运行。

默认情况下,调试端口是5005。如果要从自定义端口(比如5006)开始调试,应该怎么做呢?

另外,如果不想暂停应用程序,要如何启动调试呢?

我没有针对bootRun进行过测试,但是BootRun任务扩展了JavaExecgithub.com/spring-projects/spring-boot/blob/master/…),我使用JavaExec并通过jvmArgs参数使其工作,因此您可以采用类似的逻辑:stackoverflow.com/a/53946140/4850646

0