楼主遇到这个问题是因为发现了

java -version

mvn -v

返回的java version是不一致的,这就让人很纳闷了!!!

然后我继续往后筛查,发现了echo %JAVA_HOME%返回的java -version也是不一样的(和mvn -v是一致的)

因为maven中对应的JDK版本太高,导致我要切换maven中的版本

但是我发现切换JAVA_HOME中的JDK版本没有用

切换方法:

用户级环境变量覆盖了系统级变量

在 Windows 中,环境变量分为系统级和用户级。如果在用户级环境变量中设置了 JAVA_HOME 为 JDK 21,它会覆盖系统级的设置。

检查用户级环境变量:
  1. 右键点击 “此电脑”“计算机”,选择 “属性”
  2. 点击 “高级系统设置”,然后点击 “环境变量”
  3. 环境变量 窗口中,检查 用户变量 部分,查看是否存在 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 优先级是:

    1. 用户级 JAVA_HOME(如果在用户环境变量中定义)
    2. 系统级 JAVA_HOME(如果在系统环境变量中定义)

    结论: 如果你在 用户环境变量 中设置了 JAVA_HOMEecho %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_HOMEPATH 中的 bin 路径一起影响最终的 Java 版本。PATH 中 JDK 路径的顺序更优先于 JAVA_HOME

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐