Windows WSL Ubuntu 22无法识别Windows已升级的Java版本求助
问题:无需重新下载更新WSL Ubuntu中的Java版本
我是计算机科学课程的新手,对环境配置一头雾水。原本Windows和WSL Ubuntu 22里都装了Java 8,后来发现Ubuntu里需要用Java 9及以上才支持的jshell做测试。我在Windows上下载了最新的Java 19,但Ubuntu还是识别不了,一直用Java 8。想求不用重新下载就能更新Ubuntu中Java版本的方法。
Ubuntu终端输出
hejin@LAPTOP-8I6A5M2K:~/cs2030s$ java.exe -version java version "1.8.0_351" Java(TM) SE Runtime Environment (build 1.8.0_351-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode) hejin@LAPTOP-8I6A5M2K:~/cs2030s$ javac.exe -version javac 1.8.0_351 hejin@LAPTOP-8I6A5M2K:~/cs2030s$ jshell.exe jshell.exe: command not found hejin@LAPTOP-8I6A5M2K:~/cs2030s$ jshell Command 'jshell' not found, but can be installed with: sudo apt install openjdk-11-jdk-headless # 版本 11.0.17+8-1ubuntu2~22.04,或 sudo apt install openjdk-17-jdk-headless # 版本 17.0.5+8-2ubuntu1~22.04 sudo apt install openjdk-18-jdk-headless # 版本 18.0.2+9-2~22.04 sudo apt install openjdk-19-jdk-headless # 版本 19.0.1+10-1ubuntu1~22.04
(说实话我搞不懂为啥别人只需要输入java Hello.txt和javac Hello.txt,我却必须加.exe后缀)
Windows命令提示符输出
C:\Users\User>java -version java version "19.0.1" 2022-10-18 Java(TM) SE Runtime Environment (build 19.0.1+10-21) Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing) C:\Users\User>javac -version javac 19.0.1 C:\Users\User>jshell -version jshell 19.0.1 C:\Users\User>jshell | 欢迎使用 JShell -- 版本 19.0.1 | 输入 /help intro 查看介绍 jshell> 1 + 1 $1 ==> 2 jshell>
我对网上说的修改环境变量路径的说法很困惑……检查高级系统设置时,jdk19的路径已经在里面了。
[系统设置环境变量截图]
解决方案
一、直接复用Windows上的Java 19(无需重新下载)
WSL可以直接访问Windows的文件系统,步骤如下:
- 找到Windows上Java 19的安装路径,通常默认路径为
C:\Program Files\Java\jdk-19.0.1,对应WSL中的路径是/mnt/c/Program Files/Java/jdk-19.0.1。 - 临时切换版本(仅当前终端会话有效):
在WSL终端执行以下命令:
执行后输入export PATH="/mnt/c/Program Files/Java/jdk-19.0.1/bin:$PATH" export JAVA_HOME="/mnt/c/Program Files/Java/jdk-19.0.1"java -version和jshell验证是否生效。 - 永久生效(所有终端会话通用):
- 编辑用户主目录下的
.bashrc配置文件:nano ~/.bashrc - 在文件末尾添加以下两行:
export PATH="/mnt/c/Program Files/Java/jdk-19.0.1/bin:$PATH" export JAVA_HOME="/mnt/c/Program Files/Java/jdk-19.0.1" - 保存退出(按
Ctrl+O后回车,再按Ctrl+X),然后执行source ~/.bashrc使改动立即生效。
- 编辑用户主目录下的
二、关于必须加.exe后缀的问题
你输入java.exe调用的是Windows系统中的Java 8程序(WSL默认会挂载Windows的环境变量),而直接输入java调用的是Ubuntu本地的Java 8。按照上面的方法配置后,java命令会优先调用Windows上的Java 19,无需再添加.exe后缀。
三、可选:使用Ubuntu本地OpenJDK(若跨系统调用有问题)
如果后续觉得跨系统调用存在兼容性问题,也可以直接用Ubuntu包管理器安装OpenJDK 19,命令如下:
sudo apt update sudo apt install openjdk-19-jdk-headless
安装完成后,通过以下命令切换默认Java版本:
sudo update-alternatives --config java sudo update-alternatives --config javac
按照终端提示输入对应Java 19的编号即可完成切换。
内容的提问来源于stack exchange,提问作者HJ Wang
相关产品推荐
相关产品推荐

