如何在IntelliJ 2018.1.4中调试Gradle Wrapper 4.7的build.gradle.kts?
调试Gradle Kotlin DSL构建脚本(build.gradle.kts)的正确姿势
我之前也碰到过类似的断点不触发问题,结合你用的IntelliJ 2018.1.4和Gradle Wrapper 4.7的特性,给你几个可行的调试方案:
一、先确认基础配置是否正确
首先要确保几个前提条件没问题:
- 执行
./gradlew build -Dorg.gradle.debug=true --no-daemon后,控制台必须输出类似Listening for transport dt_socket at address: 5005的信息,这说明Gradle确实在等待调试器连接 - 你的断点必须打在实际会被执行的代码逻辑上,比如
dependencies块、task的配置或执行代码里,空的代码块或者不会被触发的逻辑上的断点肯定不会生效。举个例子:plugins { java } dependencies { implementation("com.google.guava:guava:28.0-jre") // 这里打断点,执行build时会触发 } tasks.register("customBuild") { doLast { println("Custom build done") // 这里打断点,执行customBuild任务才会触发 } }
二、修正远程调试配置
如果你用远程调试的方式,按以下步骤检查配置:
- 在IntelliJ中创建远程调试配置:Run -> Edit Configurations -> 点击"+"选择"Remote"
- 确保配置参数和Gradle的调试端口匹配:
- Transport选择
Socket,Debugger mode选择Attach - Host填
localhost,Port填5005(Gradle默认调试端口) - 不要勾选"Auto restart"等额外选项,保持默认配置即可
- Transport选择
- 正确的操作顺序:先执行
./gradlew build --no-daemon -Dorg.gradle.debug=true,等控制台输出等待连接的信息后,再启动远程调试配置
三、用IntelliJ Gradle工具窗口直接调试的正确方式
如果通过Gradle工具窗口右键调试没反应,试试这些操作:
- 先关闭所有Gradle守护进程:执行
./gradlew --stop,避免旧进程干扰 - 检查IntelliJ的Gradle全局配置:打开
Settings -> Build, Execution, Deployment -> Build Tools -> Gradle,确保选择Use Gradle from: 'gradle-wrapper.properties' file,不要用本地安装的Gradle版本 - 开启Gradle脚本调试开关:在Gradle工具窗口右上角点击"Gradle Settings"图标,确认勾选了
Enable debugging for Gradle scripts(2018.1.4版本应该有这个选项) - 重新导入Gradle项目:点击Gradle工具窗口的"Refresh all Gradle projects"图标,让IntelliJ重新同步脚本
四、针对Kotlin DSL的额外调试参数
Gradle 4.7的Kotlin DSL在编译和执行时可能需要额外的调试参数,试试用这个命令启动构建:
./gradlew build -Dorg.gradle.debug=true -Dkotlin.daemon.jvm.options="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5006" --no-daemon
然后在IntelliJ中创建一个新的远程调试配置,把端口改成5006,再连接调试器,这个方法可以覆盖Kotlin DSL daemon的调试需求。
最后一招:清除IntelliJ缓存
如果以上方法都不行,试试清除IntelliJ的缓存:
- 点击
File -> Invalidate Caches / Restart - 选择
Invalidate and Restart,等IDE重启后重新导入Gradle项目再尝试调试
内容的提问来源于stack exchange,提问作者XDR
相关产品推荐
相关产品推荐

