V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
allyn
V2EX  ›  Java

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

  •  
  •   allyn · 10 天前 · 1973 次点击

    由于 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 程序实在是太难了,解决一个又来一个,上面的问题大家有什么解决方法吗?

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

    你提到的问题我觉得可能更多是 wsl 的网络配置相关的东西
    ic2y
        15
    ic2y  
       10 天前
    @allyn 你安装一个 gateway ,让 gateway 通过 wsl 去开发,几乎没有 bug
    ic2y
        16
    ic2y  
       10 天前
    jetbrain gateway
    anivie
        17
    anivie  
       10 天前
    wsl 没有那么开箱即用,是需要适配的,idea 对 wsl 的适配并不完美,很多 bug ,用起来还不如远程开发。不过貌似 jb 的远程开发更难用就是了……还是换 mac 解君愁吧
    ThisDay
        18
    ThisDay  
       10 天前
    vscode 系列对 wsl2 适配的非常好,至于 jb ,你说的端口占用跟 debug 卡死问题,我 issue 提了快两年了也没修。
    LowBi
        19
    LowBi  
       10 天前
    看了此贴 也是打消了使用 wsl 开发 Java 的计划了,Claude code 装 Windows 上用用看先
    hmmmbiubiubiu
        20
    hmmmbiubiubiu  
       10 天前
    @bjzhou1990 vscode 对 wsl 的支持就像你在用一台 linux 开发.
    xubeiyou
        21
    xubeiyou  
       10 天前
    暂时是 wsl 使用 cli 开发本地的 然后本地联调
    redbule
        22
    redbule  
       10 天前
    使用 wsl2 ,使用 wsl2 的镜像模式(和主机共享端口)
    Windows 下请使用 powershell7
    VoiceEXONE
        23
    VoiceEXONE  
       10 天前 via iPhone
    目前没有发现 AICoding CLI 对 Java 支持友好的
    sunpj
        24
    sunpj  
       10 天前
    你在启动项里面加 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:5005 然后在远程 jvm 调试 加 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 我现在新公司只能用 windows 所以基本完整的搞了 idea+wsl2 的开发 实际上用 vscode 配置调试会方便很多 就是 vscode 开发 java 作为 ide 还是弱了点 作为 ai 的载具还是 key 的
    gwkoooo
        25
    gwkoooo  
       10 天前
    我在用 copilot cli 用的 shell7 没发现什么问题
    jianguyuxing123
        26
    jianguyuxing123  
       6 天前
    我这两天项目迁移到 wsl2 也遇到了问题 3 。idea2026.1 上,用普通 debug (不带 jrebel 开头的)运行时是可以停在断点的,但无法热加载

    用了 jrebel debug ,断点无法停留,也无法热加载。
    jrebel 这块我已经试了本地模式及远程 jrebel 两种,包括启动参数加远程 jrebel agent 路径啥的都没用。
    rebel.xml 里配置了 wsl2 项目路径,idea 底部一直显示 “Initializing filesystem listener for 项目名”。
    感觉 jrebel 和 idea 对 wsl2 支持还是有问题。
    jianguyuxing123
        27
    jianguyuxing123  
       5 天前
    问题 3 找到解法了,针对本机 wsl 的方法,推测应该远程其他机器的 wsl 效果一样。

    解决方法:1. 打开一个本地 win 原生项目的 idea ,到"设置" -> "高级设置"中搜索 wsl ,把"将 wsl 项目作为本地项目原生打开(无需使用远程开发功能)"前面的勾去掉。


    2. 然后如果要用 jrebel 的话,注意 jrebel 插件要选择安装到主机(如果是用离线插件包安装)

    2.1 jrebel 安装到客户机也是可以的,只不过启动时需要在 debug 配置的 jvm 参数中加上远程主机的 jrebel 包,并且启动的时候要用普通 debug 启动。效果和 2 一样,只不过我想试一下之前的两种方式是否都正常。

    解释下:idea 远程开发选择本机 wsl 时,默认并不走远程方式,打开新的 wsl 项目,他会提示你默认走原生 wsl 集成。目前这种方式 idea 的原生 debug (无法热加载)和 jrebel (断点和热加载都无效)都无法很好支持。

    但是走远程方式打开,目前实测原生 debug 正常,jrebel 能正常对类和 mybatis 的 xml 热加载和断点。

    不过远程方式打开,他会在你的 wsl 中下载 idea 后端,会用 jetbrain gateway 打开。从本地 idea 打开瘦客户端 idea 的过程要慢很多(如果瘦客户端已启动,打开同一个 wsl 中项目建议用瘦客户端打开,否则每次都要执行首次打开瘦客户端的流程)。

    但启动项目的时候,普通 debug 模式和原生 wsl 启动差不太多,jrebel 启动比原生 wsl 启动慢一倍。但都快于 windows 原生项目的启动
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   881 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 144ms · UTC 20:37 · PVG 04:37 · LAX 13:37 · JFK 16:37
    ♥ Do have faith in what you're doing.