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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我不能调试Gradle构建脚本的每一行?相关的知识,希望对你有一定的参考价值。

当使用典型的命令行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不允许调试构建脚本中的每一行?

谢谢!

答案

虽然它与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
        }
    }
}

以上是关于为什么我不能调试Gradle构建脚本的每一行?的主要内容,如果未能解决你的问题,请参考以下文章

[Android Studio 3.5为每个调试会话进行gradle构建

在 Intellij / Android Studio 中调试 Gradle 构建文件

选择 Android 库的构建变体的 Gradle 脚本

在最后 2 不同的每一行写 0 和 1

为啥我在构建项目时出现 Flutter gradle 错误?

Spring-boot 和 Gradle:构建时间太长 - 如何调试?