您现在的位置是:首页 >技术交流 >WSL与idea集成攻略网站首页技术交流

WSL与idea集成攻略

weixin_43271225 2023-06-28 16:00:02
简介WSL与idea集成攻略

概述

运行环境

WSL2
版本 Windows 11 专业版
版本 22H2
安装日期 ‎2022/‎5/‎12
操作系统版本 22624.1680
体验 Windows Feature Experience Pack 1000.22641.1000.0

总结

  1. 根据官方教程将WSL2与idea集成的时候,firewall configuration这一小节是必须做的部分
  2. 目前这个win11版本有问题,这里提到Windows 11 22H2的情况下防火墙要关掉实时保护。否则会影响除了windows官方提供的IDE以外的所有IDE的indexing过程,包括但不限于卡在validating SDK

反思

下次配环境看教程的时候务必至少也要大致浏览一下每个小节的标题和大致内容!我在看官方教程的时候没注意到firewall configuration这一节开头说的You need to perform the following steps to ensure that the building of a project works properly.估计就是少了这个小节导致我做了不少诸如更换JDK之类的无用功

我具体所做的所有操作

(可能有个别操作没记录下来,不过大部分肯定是记录下来了)
根据官方教程,idea新建项目的时候选择使用WSL里的SDK,但是在运行helloworld代码的时候出现了这个报错:

wsl Ubuntu-18.04 does not have configured Maven

在WSL里执行mvn -v发现显示的是我windows下的maven,懒得查怎么让WSL跟windows公用maven了,直接根据官网在WSL里配置一个maven,配置path的命令如下:

export PATH=/home/zqxu/tools/apache-maven-3.9.1/bin/:$PATH
# 记得改成自己的maven bin的路径,然后把这个命令放到bashrc并source一下

配置好以后mvn -v的输出是这样:

Apache Maven 3.9.1 (2e178502fcdbffc201671fb2537d0cb4b4cc58f8)
Maven home: /home/zqxu/tools/apache-maven-3.9.1
Java version: 1.8.0_362, vendor: Private Build, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "5.10.43.3-microsoft-standard-wsl2", arch: "amd64", family: "unix"

再次运行helloworld代码,但是此时出现新的报错:

Maven resources compiler: Maven project configuration required for module 'HelloWorld' isn't available. Compilation of Maven projects is supported only if external build is started from an IDE.

然后想起来idea的setting里我用的还是windows的maven而没有设置成WSL的maven,所以去设置了一下,并且根据这个教程配置了maven。然后发现idea卡在reading maven projects10分钟了也没有完成的意思。然后新建了一个基于intellij构建的项目运行helloworld,发现居然报错

java: Compilation failed: internal java compiler error

然后看了一下win下的java_home的路径:C:Program FilesJavajdk-17.0.5发现这个文件夹下还有一些我的WSL的bashrc的JAVA_HOME里没有的文件夹,比如legal,jmods等,然后发现我的JAVA_HOME的值是这样
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64,我就改成了/usr/lib/jvm/jdk-17并source一下使其生效,但是idea里运行代码又出现如下报错:

Abnormal build process termination: 
C:Windowssystem32wsl.exe --distribution Ubuntu-18.04 --exec /bin/sh -c "cd /home/zqxu/.cache/JetBrains/IntelliJIdea2022.3/compile-server && /usr/lib/jvm/jdk-17/bin/java -Xmx700m -Djava.awt.headless=true '-Djna.boot.library
...这里还有一堆日志
Cannot establish network connection from WSL to Windows host (could be blocked by firewall). More details: https://jb.gg/wsl-firewall

草,那JAVA_HOME还是改回去吧。而且直接在WSL里用javac命令测试了一下是我的WSL里的java1.8可以正常编译java代码的,估计是idea里哪里没有配起来。但是这个问题还有有待解决:

java: Compilation failed: internal java compiler error

根据这里修改了 Project bytecode version,取消了Use compiler from module target JDK when possible,但是编译的时候就卡在parsing java的阶段动不了了,麻了,于是决定换个JDK,根据这里安装了JAVA17,然后忘记做了什么配置,运行代码的时候卡在preparing wsl build environment这个阶段,然后根据这里知道原来我Windows 11 22H2的情况下防火墙要关掉实时保护。于是关掉了,但是又产生跟之前一样的报错:

...省略了一些Log
Cannot establish network connection from WSL to Windows host (could be blocked by firewall). More details: https://jb.gg/wsl-firewall

然后发现根据官方教程看来还要进行firewall configuration,配完以后终于能helloworld了

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。