为什么我不能调试Gradle构建脚本的每一行?

时间:2018-03-03 05:04:42

标签: java debugging gradle groovy remote-debugging

使用典型命令行args(-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005)远程调试gradle构建时,我只能在我提供的类中的断点上停止;我无法在构建脚本中停止。

根据各种来源,包括here,这显然是预期的行为。例如:

apply plugin: 'groovy'  // not able to stop debugger here

class Penguin() {
    def ork() {
        println 'ork!'  // able to stop debugger here
    }
}

new Penguin().ork()

我试图理解为什么会这样?为什么Gradle不允许调试构建脚本中的每一行?

谢谢!

1 个答案:

答案 0 :(得分:1)

虽然它与groovy非常相似,但build.gradle文件是由Gradle解析的自定义DSL。断点只能添加到.java.groovy个文件中,并且没有此类文件可以将断点添加到。

我相信如果您使用kotlin-dsl而不是groovy DSL,您可以在kotlin buildscript中放置断点并在IntelliJ IDEA中调试,但我不是100%确定在这个

如果您真的想要调试,可以将所有内容移动到可以调试的插件中,并在build.gradle中有一行

$根/的build.gradle

apply plugin: MyBuildScript

$根/ buildSrc / SRC /主/常规/ MyBuildScript.groovy

import org.gradle.api.*
class MyBuildScript implements Plugin<Project> {
    void apply(Project project) {
        project.with {
            apply plugin: 'foo'
            dependencies { ... }
            task bar(type: Baz) { ... }
            // etc
        }
    }
}