WSL2中定义的环境变量无法被Windows端IntelliJ IDEA读取,如何解决?
问题原因
你在/etc/profile、~/.bashrc下配置的环境变量仅对交互式/登录类型的WSL shell会话生效,而Windows端IDEA调用WSL运行Java代码时,启动的是非交互非登录类型的shell会话,默认不会加载上述配置文件,因此进程读取不到你定义的JDK_17_0变量。
可行解决办法
方法1:修改WSL PAM配置,让所有会话全局加载环境变量
打开WSL内的/etc/pam.d/common-session文件,添加以下行:session required pam_env.so envfile=/etc/environment同时注意
/etc/environment内不需要写export,直接写键值对即可:JDK_17_0=/home/scaventz/sdk/jdk-17配置完成后执行
wsl --shutdown关闭WSL,重启后生效。方法2:调整bashrc配置,让非交互会话也加载配置
打开WSL内的~/.bashrc文件,找到开头的非交互会话判断逻辑:# If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac把你要定义的
export JDK_17_0=/home/scaventz/sdk/jdk-17语句放在这段判断逻辑之前即可,也可以直接注释掉这段判断代码,改完重启WSL生效。方法3:直接在IDEA运行配置中指定环境变量
打开IDEA的「运行/调试配置」面板,找到对应Java程序的「环境变量(Environment variables)」选项,手动添加JDK_17_0=/home/scaventz/sdk/jdk-17即可,不需要修改WSL端配置,适配性最高。方法4:修改WSL全局bash配置
把export JDK_17_0=/home/scaventz/sdk/jdk-17添加到WSL内的/etc/bash.bashrc文件末尾,该文件会对所有用户的所有bash会话(包含非交互会话)生效,改完重启WSL即可。
内容的提问来源于stack exchange,提问作者scaventz

