是否有工具允许我在build.gradle文件中设置断点并在调试器中逐步执行任务?
注意:我相信我提出的问题与关于调试Gradle插件的类似stackoverflow问题不同,其中(可能)的目的是逐步执行位于单独文件中的自定义Groovy或Java插件代码。我想在一个简单的build.gradle文件中的Gradle任务中设置一个断点,比如......
task example {
println "I want to set a breakpoint here"
}
...所以当我运行gradle example
时,我可以在调试器中检查上下文。
(对于那些指向IntelliJ的人来说......虽然JetBrains'网站宣称他们支持在IDEA UI中调试Gradle脚本,但AFAICT这是不真实的,因为据报道在IDEA13 EAP中已经破坏了这一点并且没有'已在IDEA14中修复。请参阅Debugging Gradle build files in Intellij / Android Studio)
是否有任何调试工具允许我在build.gradle文件中设置断点,或者是否有一些关于Gradle DSL的内容使得从根本上不可能在上面的例子中设置断点?
答案 0 :(得分:17)
有更简单的方法:
只需添加您的命令行-Dorg.gradle.debug=true --no-daemon
例如:
gradle nameOfTask -Dorg.gradle.debug=true --no-daemon
然后你应该启动你的IDE并使用localhost端口5005运行远程调试。
Gradle正等着你,因为标准选项server = y
<强> org.gradle.debug 强>
当设置为true时,Gradle将在启用远程调试的情况下运行构建,侦听端口5005.请注意,这相当于添加-agentlib:jdwp = transport = dt_socket,server = y,suspend = y,address = 5005到JVM命令行,并将挂起虚拟机,直到连接调试器。
答案 1 :(得分:9)
Personnaly当我需要调试构建脚本时,我会这样做:
在你的终端里面做
export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
然后运行你的构建
gradle clean install
最后放置一些断点并在端口5005上的IDE中启动远程调试配置,你就可以了!
答案 2 :(得分:9)
IntelliJ 2018.2添加了以类似于您可能运行/调试其他项目的方式调试Gradle脚本的功能。您可以在发行说明here中看到该公告。
以下是2018.2中一些文档的屏幕截图:
它尚不支持kotlin-dsl
(请参阅gradle/kotlin-dsl/issues/39)。
答案 3 :(得分:1)
在阅读完各种答案之后,以下步骤将帮助您调试build.gradle
,使其能够破坏和研究任何自定义任务中的变量。我正在使用Eclipse远程调试工具
try {throw new RuntimeException('Break');} catch (RuntimeException e) {}
gradle mytask -Dorg.gradle.debug=true --no-daemon
开始您的任务(不必在Eclipse中完成此任务)Run -> Add Java Exception Breakpoint
,选择RuntimeException
,然后单击“确定” Run -> Debug Configurations -> Remote Java Application
并创建在localhost:5005
上侦听的新配置。随便命名。选择包含要调试的build.gradle
的项目。点击Apply
和Debug
build.gradle
中您不会看到任何突出显示的内容,但是您几乎可以猜到自己在哪里例如:
void halt() {
try {
throw new RuntimeException('Break');
} catch (RuntimeException e) {
print('Paused')
}
}
task iterateDeclaredDependencies {
doLast {
Object configs = configurations.all
halt();
print(configs)
}
}
答案 4 :(得分:0)