JAVA_HOME和echo %JAVA_HOME%对应的JDK版本不一样或maven中JDK版本和系统JDK版本不一致解决办法——检查用户级环境变量覆盖
楼主遇到这个问题是因为发现了
java -version
和
mvn -v
返回的java version是不一致的,这就让人很纳闷了!!!
然后我继续往后筛查,发现了echo %JAVA_HOME%返回的java -version也是不一样的(和mvn -v是一致的)
因为maven中对应的JDK版本太高,导致我要切换maven中的版本
但是我发现切换JAVA_HOME中的JDK版本没有用
切换方法:
用户级环境变量覆盖了系统级变量
在 Windows 中,环境变量分为系统级和用户级。如果在用户级环境变量中设置了 JAVA_HOME 为 JDK 21,它会覆盖系统级的设置。
检查用户级环境变量:
- 右键点击 “此电脑” 或 “计算机”,选择 “属性”。
- 点击 “高级系统设置”,然后点击 “环境变量”。
- 在 环境变量 窗口中,检查 用户变量 部分,查看是否存在
JAVA_HOME变量。如果存在,并且它指向 JDK 21,你需要修改或删除它。- 如果存在
JAVA_HOME变量且它指向 另一个版本的JDK,将其修改为 你需要的JDK的路径。 - 如果你不需要用户级
JAVA_HOME,可以将其删除。
- 如果存在

1. echo %JAVA_HOME% 的行为:
-
echo %JAVA_HOME%输出的是 当前命令行会话中 的JAVA_HOME环境变量的值。 -
用户级
JAVA_HOME会覆盖 系统级JAVA_HOME。所以,命令行窗口中的JAVA_HOME优先级是:- 用户级
JAVA_HOME(如果在用户环境变量中定义) - 系统级
JAVA_HOME(如果在系统环境变量中定义)
结论: 如果你在 用户环境变量 中设置了
JAVA_HOME,echo %JAVA_HOME%会显示用户级的 JDK 版本。 - 用户级
2. Maven (mvn -v) 的行为:
-
Maven 使用的是你设置的
JAVA_HOME环境变量,它会读取系统或用户级的JAVA_HOME,优先使用 用户级的JAVA_HOME(如果它被设置)。 -
因此,如果你在 用户环境变量 中设置了 JDK 版本,那么执行
mvn -v时,Maven 会使用用户级JAVA_HOME指定的 JDK 版本。- 如果没有用户级
JAVA_HOME设置,那么 Maven 会使用系统级JAVA_HOME。
结论: Maven 会优先使用 用户级的
JAVA_HOME(如果设置了),如果没有,则使用 系统级的JAVA_HOME。 - 如果没有用户级
3. java -version 的行为:
-
java -version命令显示的是当前PATH环境变量中 第一个java.exe所指向的 Java 版本。 -
当你运行
java -version时,系统会搜索PATH中的路径,并使用PATH中优先的 JDK。- 如果你在
PATH中的 JDK 21 路径排在前面,即使你的JAVA_HOME设置为 JDK 8,java -version也可能会显示 JDK 21。 - 如果
JAVA_HOME被正确设置,并且PATH中的 JDK 8 路径在前面,那么java -version会显示 JDK 8。
结论:
java -version取决于PATH中的顺序,但通常,JAVA_HOME和PATH中的bin路径一起影响最终的 Java 版本。PATH中 JDK 路径的顺序更优先于JAVA_HOME。 - 如果你在
更多推荐
所有评论(0)