已安装Java 8与17,为何java -version始终显示17?
Java 17并不会无条件覆盖Java 8的java -version输出,你的问题出在Windows系统PATH路径优先级和Oracle Java的默认启动器配置上,具体拆解如下:
1. 为什么修改JAVA_HOME和PATH后,java -version仍显示Java 17?
Oracle官方的Java安装包会自动在C:\Program Files\Common Files\Oracle\Java\javapath目录下创建java.exe的快捷方式,并且这个路径会被默认添加到系统PATH的最前端。这个快捷方式指向的是你最后安装的Java版本(也就是Java 17),优先级远高于你手动添加的Java 8的bin目录。
即使你修改了JAVA_HOME和PATH,只要javapath在PATH中的位置更靠前,系统就会优先调用这里的java.exe,导致版本显示为17。
2. 为什么mvn -version能正确显示Java 8?
Maven的版本检测逻辑和系统java命令不同:它会优先读取你设置的JAVA_HOME环境变量,直接指向对应JDK的jre目录,而不是依赖PATH中的java.exe。这说明你的JAVA_HOME确实正确指向了Java 8,只是系统层面的java命令被高优先级路径覆盖了。
3. 卸载Java 17后java -version无输出的原因?
卸载Java 17时,Oracle的卸载程序会同时删除C:\Program Files\Common Files\Oracle\Java\javapath下的快捷方式。而你之前的Java 8的bin目录要么没加到PATH里,要么位置靠后,导致系统找不到java.exe,因此命令无输出。
解决方法
方法一:调整PATH路径优先级
打开系统环境变量设置,找到PATH变量:
- 将
C:\Program Files\Java\jdk1.8.0_202\bin(你的Java 8实际安装路径)移到C:\Program Files\Common Files\Oracle\Java\javapath的前面 - 保存设置后,关闭并重启终端,执行
java -version即可看到Java 8的版本
方法二:移除Oracle默认javapath路径
直接从系统PATH中删除C:\Program Files\Common Files\Oracle\Java\javapath条目,这样系统会优先使用JAVA_HOME指向的Java版本。
方法三:使用版本管理工具(可选)
如果需要频繁切换Java版本,可以使用jenv或SDKMAN!这类工具,它们能更灵活地管理多个Java版本的切换,无需手动修改环境变量。
内容的提问来源于stack exchange,提问作者Meowtobot

