You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跨机器远程调试由Gradle执行的JUnit测试?

跨机器远程调试Gradle执行的JUnit测试解决方案

我之前也碰到过一模一样的问题——本地用--debug-jvm调试Gradle测试完全正常,但跨机器就一直报「Connection refused」,折腾了好一阵才搞明白:Gradle默认的调试参数只会绑定本机localhost,外部机器根本连不上。结合你用的Gradle 5.6.2 + JDK 11环境,给你两个靠谱的解决办法:

方案一:命令行直接指定测试JVM的调试参数

放弃用--debug-jvm,直接给测试任务的JVM传入完整的调试参数,强制绑定到所有网卡:

./gradlew :<directory> --tests <ClassName> --info -Dorg.gradle.jvmargs="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005"

这里的address=*:5005是关键——它让测试JVM在5005端口监听所有网卡的连接请求,机器B就能正常连上了。

方案二:在build.gradle中配置持久化的调试参数

如果不想每次都敲长命令,可以在对应模块的build.gradle里给test任务加固定配置:

test {
    // 直接启用远程调试,绑定所有网卡的5005端口
    jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005'
    
    // 进阶玩法:通过系统属性开关调试(避免平时跑测试也挂起)
    // if (System.getProperty('enableRemoteDebug') == 'true') {
    //     jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005'
    // }
}

配置完后,直接执行测试命令即可:

./gradlew :<directory> --tests <ClassName> --info

如果用了开关模式,就加个系统属性触发:

./gradlew :<directory> --tests <ClassName> --info -DenableRemoteDebug=true

为什么你之前的方法没生效?

  • 用debugOptions配置时,Gradle 5.x版本的默认address还是绑定localhost,并没有对外暴露端口,所以机器B连不上;
  • 修改org.gradle.jvmargs是给Gradle守护进程加的参数,不是给测试运行的独立JVM加的,所以测试线程根本不会挂起等待调试连接。

额外必查项

别忘检查机器A的防火墙!如果对应的端口(比如5005)没开放,哪怕参数配对了还是会报连接被拒。机器B的IDE远程调试配置里,主机填机器A的IP,端口填你指定的数值,调试模式选「远程JVM」就可以了。

内容的提问来源于stack exchange,提问作者Austin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:55:03