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

vbopmzt1  于 2022-12-10  发布在  Spring
关注(0)|答案(7)|浏览(196)

我正在开发Spring应用程序,需要单步执行一个控制器方法来查看它是如何工作的。我正在Eclipse中工作,并使用gradle bootRun命令构建我的应用程序。
如何在调试模式下运行它?
我尝试了gradle bootRun --debug,但它只是调试日志,而不是调试模式
我尝试了gradle help --task bootRun--这给了我关于任务的信息,我看到了--debug-jvm选项,但当我运行gradle bootRun --debug-jvm时,应用程序没有启动

gblwokeq

gblwokeq1#

运行gradle bootRun --debug-jvm后,应用程序将挂起,直到您将调试器连接到它正在侦听的端口(端口5005)。

cnjp1d6j

cnjp1d6j2#

作为对上面dankdirkd回答的回应:(compare)(英文)

gradle bootRun --debug-jvm

将使gradle构建在调试模式下运行。这可能不是您想要的。您想要实现的是springBoot任务在调试模式下启动您的应用程序。
Spring Boot 任务扩展了gradle JavaExec任务。您可以在build.gradle文件中配置bootRun任务,以添加如下调试配置:

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

sqyvllje

sqyvllje3#

对于build.gradle.kts文件,您也可以简单地使用下面的代码:

tasks.withType<BootRun> {
    jvmArgs = listOf("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:32323")
}
pb3skfrl

pb3skfrl4#

如果您想知道如何启用Spring的调试模式(通常由java -jar app.jar --debug完成)和使用Gradle,请点击这里。这将--debug传递给主类,这是您打开Sping Boot 的调试模式的方式,该模式记录autoconfig类以及其他内容。

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

n6lpvg4x5#

我个人更喜欢使用Gradle tasksright-clicking on the bootRun。与终端相比,这在IDE中很有用。

bgibtngc

bgibtngc6#

对于那些寻找使用gradle bootRun任务的IntelliJ示例的用户:
1.将以下bootRun任务定义添加到build.gradle文件

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

1.运行启动运行任务
1.当您到达控制台/终端显示“侦听传输dt_socket at address:5005”转到“运行--〉附加到进程...”,然后选择您的应用程序
1.在任何需要的位置添加断点

jxct1oxe

jxct1oxe7#

定义一个执行Java应用程序的子进程。

task executeApp() {
    doFirst {
       println "Executing java app from Gradle..."
       javaexec {
           main = "com.mymain"
           jvmArgs = ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=30000"]
       }
    }
}

在java代码中设置断点。执行Gradle任务后。例如,在Windows中:

.\gradlew.bat executeApp

任务会一直等待直到你连接调试器。例如,在Netbeans中,转到Debug-〉Attach debugger,在端口字段上设置30000。

相关问题