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

时间:2016-09-14 12:35:56

标签: java eclipse spring debugging gradle

我正在使用spring app,需要逐步执行控制器方法以查看它是如何工作的。 我在eclipse中工作并使用gradle bootRun命令构建我的应用程序。

如何在调试模式下运行它?

我试过gradle bootRun --debug但它只是调试日志,而不是调试模式

我试过gradle help --task bootRun - 这给了我关于任务的信息 在那里我看到了--debug-jvm选项,但是当我跑步时 gradle bootRun --debug-jvm应用程序无法启动

5 个答案:

答案 0 :(得分:44)

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

答案 1 :(得分:21)

作为对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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:-1)

定义一个在子进程中执行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,在端口Field上设置30000。