how to debug spring application with gradle

拟墨画扇 提交于 2020-03-17 04:08:07

问题


I am working on spring app and need to step through a controller method to see how it works. I am working in eclipse and building my app with gradle bootRun command.

How to run it in debug mode?

i tried gradle bootRun --debug but it's just debug log, not debug mode

i tried gradle help --task bootRun -- this gives me info about task there i saw --debug-jvm option but when i run gradle bootRun --debug-jvm application doesn't start


回答1:


After you run gradle bootRun --debug-jvm the application is suspended until you connect your debugger to the port it is listening on (port 5005).




回答2:


As a response to dankdirkd's answer above: (compare)

gradle bootRun --debug-jvm

will make the gradle build run in debug mode. That probably is not what you want. What you want to achieve is that the springBoot task starts your application in debug mode.

The spring boot task extends the gradle JavaExec task. You can configure the bootRun task in your build.gradle file to add a debug configuration like this:

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

For the build.gradle.kts this would look like this (with suspend mode disabled):

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

If your server is within a cloud and you want to debug from local machine, you need to make sure that it allows connections from outside. Use below configuration in that case

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

Note that the address is now 0.0.0.0:port instead of just port




回答3:


For build.gradle.kts file you can also simply use below:

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



回答4:


I personally prefer going under Gradle tasks and right-clicking on the bootRun. This is useful in the IDE compared to the terminal.




回答5:


Define an executes a Java application in a child process.

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"]
       }
    }
}

Set your breakpoints in the java code. After execute the Gradle task.For example in Windows:

  .\gradlew.bat executeApp

The task waits until you attach the debugger. For example in Netbeans go to Debug->Attach debugger , set 30000 on port Field.



来源:https://stackoverflow.com/questions/39490624/how-to-debug-spring-application-with-gradle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!