关于在 wsl 中使用 idea 进行 Java 开发的问题

4 月 7 日
 allyn

由于 ai agent 的缘故,项目不得不迁移到 wsl 内部,但是迁移到 wsl 后问题实在太多了,解决一个又来一个,导致不太有信心使用,有没有好点的解决方案?

问题 1: 使用 intellij idea 启动 java 程序端口占用问题( jmx ),在 wsl 中没有找到到 jmx 占用的端口,但是又说占用了,不知道什么原因,直接暴力关闭 jmx ,解决办法:关闭 jmx

问题 2: 在 wsl 中启动本地端口启动 8888 ,localhost 能访问,局域网不能访问,原因是 wsl 防火墙问题,解决办法:使用 powershell 管理员执行命令

Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

问题 3: 程序终于启动起来了,结果无法使用 java debug 动态更改代码,也无法进入断点,jrebel 也无法使用。 原因可能是:

java.lang.IllegalAccessException: Class com.intellij.spring.debugger.rt.com.intellij.spring.debugger.rt.SpringBeanDefinitionLoader can not access a member of class org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition with modifiers "public"
	at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
	at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
	at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
	at java.lang.reflect.Method.invoke(Method.java:491)
	at com.intellij.spring.debugger.rt.com.intellij.spring.debugger.rt.SpringBeanDefinitionLoader.getAnnotationMetadataClassName(SpringBeanDefinitionLoader.java:182)
	at com.intellij.spring.debugger.rt.com.intellij.spring.debugger.rt.SpringBeanDefinitionLoader.getBeanClassName(SpringBeanDefinitionLoader.java:121)
	at com.intellij.spring.debugger.rt.com.intellij.spring.debugger.rt.SpringBeanDefinitionLoader.getAllBeanDefinitions(SpringBeanDefinitionLoader.java:40)
	at org.springframework.context.event.ContextRefreshedEvent.<init>(ContextRefreshedEvent.java:37)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)

这个到目前为止还没有解决。

综上所述,wsl 开发 java 程序实在是太难了,解决一个又来一个,上面的问题大家有什么解决方法吗?

3041 次点击
所在节点    Java
28 条回复
ixiaohei
4 月 7 日
考虑换 mac 呢?我之前也是 java 程序员,8 年前就换 mac 了,换 mac 发现打开了新大门啊。后面就转其他语言后端开发了
wenning
4 月 7 日
我是直接使用 vmware 启动一个虚拟机来做开发了, idea 直接放到虚拟机里面; 之前用 wsl 的时候发现 linux 下面 java 打包编译性能比 windows 原生高了三倍, 但是 idea 的远程开发体验太差了, 干脆直接启动虚拟机来处理, 正好现在 openclaw 这些处于安全需要也要一个隔离环境
dcsuibian
4 月 7 日
❯ cat .\.wslconfig
[wsl2]
firewall=false
autoProxy=false
networkingMode=Mirrored
[experimental]
hostAddressLoopback=true
dcsuibian
4 月 7 日
注意,我用的 wsl 版本是 2.6.3.0 ,以上设置都在 WSL Settings 里有图形化的设置方式
尤其是你的问题 2 ,就是设置防火墙吧
bjzhou1990
4 月 7 日
wsl 本身就是个 hyper-v 虚拟机,为什么不直接在 hyper-v 上运行个 Linux 虚拟机
cheng6563
4 月 7 日
IDEA 设置有个增强调试功能,可以去关掉。
然后,早日脱离 hyperv ,早日获得新生。
Nasdaq
4 月 7 日
再买块硬盘装 Ubuntu 可能比较好~
Mogugugugu
4 月 7 日
wsl 不是开发 java 太难,而是 wsl+idea 开发 java 太难,放弃 idea 一切都顺畅了。
Gehrman
4 月 7 日
可以直接在 WSL 里启动 idea 客户端吧,目前有 WSLg 了。
之前玩了下,Android Studio 直接装在 WSL 里,启动后像一个 Windows 软件窗口一样。
当时试了下,成功编译安装了一个 apk 到手机上。
dandel1on
4 月 7 日
可以试一下用 wsl 运行 linux 版的 idea
urfree
4 月 7 日
vscode+wsl+ai 开发什么都可以,ai 时代该抛弃 idea 了
allyn
4 月 7 日
@dandel1on 运行了 linux 版本的 idea ,无法正常使用,有个 java 外框,界面卡死。
orzsome
4 月 7 日
别用 wsl ,直接 claude code 或者 codex app ,他们 win 支持的还行。wsl 我使用的时候总是访问有问题。你如果使用 wsl ,也不需要安装 linux 版本的 idea 。直接使用原来 win 的。
gudecatch
4 月 7 日
之前一直在 wsl 里面装一个 intellij ,因为 intellij 在 windows 下没法 debug wsl 里面的代码。但是最新的版本已经解决了这个问题,实际使用基本毫无问题。

你提到的问题我觉得可能更多是 wsl 的网络配置相关的东西
ic2y
4 月 7 日
@allyn 你安装一个 gateway ,让 gateway 通过 wsl 去开发,几乎没有 bug
ic2y
4 月 7 日
jetbrain gateway
anivie
4 月 7 日
wsl 没有那么开箱即用,是需要适配的,idea 对 wsl 的适配并不完美,很多 bug ,用起来还不如远程开发。不过貌似 jb 的远程开发更难用就是了……还是换 mac 解君愁吧
ThisDay
4 月 7 日
vscode 系列对 wsl2 适配的非常好,至于 jb ,你说的端口占用跟 debug 卡死问题,我 issue 提了快两年了也没修。
LowBi
4 月 7 日
看了此贴 也是打消了使用 wsl 开发 Java 的计划了,Claude code 装 Windows 上用用看先
hmmmbiubiubiu
4 月 7 日
@bjzhou1990 vscode 对 wsl 的支持就像你在用一台 linux 开发.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1203944

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX