WSL2执行which/whereis java返回错误路径 影响JAVA_HOME配置
问题原因
/usr/bin/java不是JDK的实体安装文件,是Linux系统生成的软链接(等价于Windows系统的快捷方式),因此在/usr/bin目录下找不到Java相关实体文件夹是正常现象。
WSL2默认搭载的Ubuntu/Debian发行版通过update-alternatives机制统一管理多版本软件的默认命令入口:安装OpenJDK时,系统会自动将java、javac等常用可执行文件的软链接放置在/usr/bin目录(该目录默认纳入系统PATH路径,保证任意路径下都能调用java命令),软链接的最终跳转目标就是你在/usr/lib/jvm路径下找到的实际JDK安装目录。
验证方式
执行以下命令即可查看软链接的完整跳转链路,确认JDK真实存储位置:
# 查看/usr/bin/java的直接指向 ls -l /usr/bin/java # 追踪全链路跳转,直接输出最终实体文件的绝对路径 readlink -f /usr/bin/java
命令执行后会输出最终路径为/usr/lib/jvm/java-17-openjdk-amd64/bin/java,和你找到的安装位置完全匹配。
JAVA_HOME正确配置方法
配置环境变量时不要使用/usr/bin/java这个软链接路径,直接指向JDK实体根目录即可:
- 你在
/usr/lib/jvm下列出的两个目录中,java-17-openjdk-amd64本身也是指向带具体小版本号的java-1.17.0-openjdk-amd64的软链接,配置时优先选择前者,后续JDK小版本更新时不需要手动修改环境变量 - 编辑当前使用shell的配置文件:默认使用bash就编辑
~/.bashrc,使用zsh就编辑~/.zshrc,在文件末尾追加如下配置:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
- 执行
source ~/.bashrc(如果修改的是zsh配置则对应执行source ~/.zshrc)让配置即时生效 - 执行
echo $JAVA_HOME、java -version校验,输出的JAVA_HOME路径正确、java版本显示为17即配置完成。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

