WSL2需独立安装JDK并配置Linux路径的JAVA_HOME,避免混用Windows路径;开发目录应置于WSL2原生文件系统;调试需正确设置JDWP绑定地址与网络;DNS问题需手动配置resolv.conf。

WSL2里装Java,别碰Windows的JAVA_HOME
WSL2是独立Linux环境,Windows的JAVA_HOME对它完全无效。你直接在PowerShell里设了JAVA_HOME,再进wsl终端运行java -version报错或显示找不到命令,就是这个原因。
- 必须在WSL2内部单独安装JDK(推荐
apt install openjdk-17-jdk,别用Windows的.exe) -
/etc/environment或~/.bashrc里设JAVA_HOME,路径得是Linux风格,比如/usr/lib/jvm/java-17-openjdk-amd64 - 验证用
which java和readlink -f $(which java),确认指向的是WSL2里的二进制,不是Windows映射路径(如/mnt/c/...)
Windows和WSL2共享项目时,javac编译失败常见于路径混用
你在Windows用IDE打开/mnt/wsl/myproject,又在WSL2里用javac编译,容易触发类路径解析错误或文件权限问题——尤其用了module-info.java或依赖相对路径资源时。
- 开发目录尽量放在WSL2原生文件系统(如
~/workspace),避免/mnt/挂载区 - 如果必须共享,Windows端用VS Code配Remote-WSL插件,而非直接打开
/mnt/路径;这样所有构建都在WSL2内执行 - 检查
javac输出的错误行号是否跳变、类名是否带file://前缀指向/mnt/c/...——这是典型路径越界信号
IDEA或VS Code调试Java程序时连不上WSL2的JDWP端口
你在WSL2里用java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005启动,但Windows上的IDE连不上,大概率是网络绑定或防火墙问题。
- WSL2默认只监听
127.0.0.1,加address=*:5005才允许外部连接,但需配合networkingMode=mirrored(WSL2 2.2.0+)或手动端口转发 - 在Windows PowerShell中运行:
wsl --shutdown,然后修改%USERPROFILE%\AppData\Local\Packages\<distro>\wsl.conf</distro>,加入[network]段并设generateHosts = true和generateResolvConf = true - IDE里Debugger配置的host别填
localhost,改用$(wsl hostname -I | awk '{print $1}')查到的实际IP(如172.28.128.3)
Gradle/Maven在WSL2里卡住或下载极慢
不是网络差,而是WSL2默认DNS解析走Windows代理,常导致Maven中央仓库域名解析超时或返回空响应。
立即学习“Java免费学习笔记(深入)”;
- 检查
/etc/resolv.conf:如果nameserver是172.x.x.x这类WSL2自动生成地址,就可能出问题;临时改成8.8.8.8测试 - 永久方案:在
/etc/wsl.conf加[network]→generateResolvConf = false,再手动写/etc/resolv.conf,用可靠DNS(如1.1.1.1) - Gradle建议加
org.gradle.jvmargs=-Djava.net.preferIPv4Stack=true,避免IPv6 fallback拖慢连接
最麻烦的其实是Windows和WSL2之间file://路径语义不一致,还有WSL2重启后/etc/resolv.conf被覆盖这种“看不见”的坑——得习惯每次wsl --shutdown后再进,先cat /etc/resolv.conf和echo $JAVA_HOME扫一眼。










