Java 使用Intellij在gradle项目中设置断点

Java 使用Intellij在gradle项目中设置断点,java,intellij-idea,gradle,Java,Intellij Idea,Gradle,现在IntelliJ 12.1已经推出,我希望能够将调试器附加到“gradle run”应用程序,并在断点处停止。我尝试了右键单击run并选择调试它,以及设置GRADLE_选项环境变量,如下面的回答所示: 远程附加调试器,这很好,但都不会中断断点。我一定是遗漏了什么。我可以通过配置运行任务进行远程调试。因为它是一个任务,所以它支持jvmArgs属性: run { jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y

现在IntelliJ 12.1已经推出,我希望能够将调试器附加到“gradle run”应用程序,并在断点处停止。我尝试了右键单击run并选择调试它,以及设置GRADLE_选项环境变量,如下面的回答所示:


远程附加调试器,这很好,但都不会中断断点。我一定是遗漏了什么。

我可以通过配置
运行任务进行远程调试。因为它是一个任务,所以它支持jvmArgs属性:

run {
    jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
}
run {
    debug true
}
和调试属性:

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

右键单击调试似乎不起作用,因为IntelliJ将调试器附加到错误的JVM,即gradle。

我可以正常调试。只有使用gradle守护进程(“--daemon”选项),我才能调试。

太好了!这很有效。为了奖励积分和永恒的感激,有没有办法链接启动运行任务和附加远程调试器,知道吗?我很抱歉,这是一个子进程。快速提示,您可以使用gradle属性(-P)并使build.gradle读取该属性以启用调试,例如,如果hasProperty->debug true,则您的解决方案仍然有效。然而,我遇到了一些困难,使用调试任务让它与IntelliJ和Gradle的最新版本一起工作。如果您感兴趣的话,我已经为它创建了一篇新文章:我发现Intellij自动传递所需的JVMARG,因此禁用了守护进程(因此使用这些JVMARG启动的进程实际上执行代码)对我来说这是个诀窍。使用--no daemon一次性禁用daemon顺便说一句。此参数不再适用于IntelliJ的最新版本,因为它使用Gradle工具API。无法关闭守护进程。