在WSL的IntelliJ中调试Gradle嵌入式Tomcat项目时无法启动守护进程
WSL2环境下IntelliJ调试Gradle嵌入式Tomcat项目失败的解决方案
问题背景
使用Windows 11 + WSL2(Ubuntu 20.04),通过IntelliJ 2022.2.1调试Gradle嵌入式Tomcat项目时:
- 终端执行
gradle run可正常启动项目 - IntelliJ点击运行按钮能正常运行项目
- 启动调试时失败,报错JDWP连接超时,具体输出如下:
Running Gradle on WSL... > Task :wrapper UP-TO-DATE BUILD SUCCESSFUL in 679ms 1 actionable task: 1 up-to-date Running Gradle on WSL...
随后弹出的错误详情:
Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used. Please refer to the User Manual chapter on the daemon at https://docs.gradle.org/7.5/userguide/gradle_daemon.html Process command line: /home/user/.sdkman/candidates/java/18.0.1.1-open/bin/java -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=192.168.1.74:60140 --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED -Xms256m -Xmx512m -Dfile.encoding=windows-1252 -Duser.country -Duser.language=en -Duser.variant -cp /home/daniel-personal/.gradle/wrapper/dists/gradle-7.5-bin/f1w0cc9nuo0eivz97x2xlu9sv/gradle-7.5/lib/gradle-launcher-7.5.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 7.5 Please read the following process output to find out more: ----------------------- ERROR: transport error 202: connect failed: Connection timed out ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [open/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c:734]
已尝试关闭Windows Defender防火墙和实时保护,问题仍未解决。
环境配置
- Windows 11 Pro - 10.0.22000 Build 22000
- WSL - Version 2
- Ubuntu - Ubuntu 20.04.4 LTS
- IntelliJ Idea - 2022.2.1
解决思路与方法
1. 修正调试地址配置
WSL2采用NAT网络模式,IntelliJ使用Windows主机IP(如192.168.1.74)时,WSL内的Gradle守护进程无法反向连接到Windows的调试端口。
- 打开IntelliJ的调试配置,将JDWP参数中的
address改为localhost:端口号(如localhost:60140) - 或使用WSL内部IP(在WSL终端执行
hostname -I获取)替换Windows主机IP
2. 调整Gradle调试的VM参数
在IntelliJ的Gradle调试配置中,修改VM选项,确保JDWP参数允许WSL进程连接:
-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:60140
若需要更灵活的连接,可使用address=0.0.0.0:60140(注意安全风险)。
3. 手动配置WSL端口转发
WSL2的自动端口转发可能异常,手动添加转发规则:
- 以管理员身份打开Windows PowerShell
- 执行以下命令(替换端口号为你的调试端口):
$wslIp = wsl hostname -I netsh interface portproxy add v4tov4 listenport=60140 listenaddress=0.0.0.0 connectport=60140 connectaddress=$wslIp
调试完成后可删除规则:
netsh interface portproxy delete v4tov4 listenport=60140 listenaddress=0.0.0.0
4. 禁用Gradle守护进程调试
临时禁用Gradle守护进程,避免守护进程的连接问题:
在IntelliJ的Gradle调试配置的"Arguments"字段中添加--no-daemon,再尝试启动调试。
5. 验证IntelliJ的WSL配置
确保IntelliJ正确关联WSL环境:
- 打开IntelliJ设置(File > Settings),进入Build, Execution, Deployment > Build Tools > Gradle
- 确认"Gradle JVM"选择WSL内的Java版本(如SDKMan管理的Java 18)
- 确认"Run Gradle tasks using"设置为"WSL"
6. 重置WSL网络
若以上方法无效,重置WSL网络后重试:
在Windows PowerShell执行:
wsl --shutdown
重新启动WSL后,再次尝试调试。
内容的提问来源于stack exchange,提问作者buzoherbert
相关产品推荐
相关产品推荐

