IDEA 终端 vs CMD:为什么 java -version 显示的 JDK 版本不一致?

发布于:2025-03-31 ⋅ 阅读:(24) ⋅ 点赞:(0)

前言:离谱的 JDK 版本问题

今天遇到了一个让人抓狂的现象:在 Windows 的 CMD 里输入 java -version 和在 IntelliJ IDEA 终端输入 java -version,居然显示了不同的 JDK 版本!
本以为是环境变量、缓存或者 IDEA 设置的问题,折腾了一整天,翻遍了各种资料,才终于找到真正的原因。

这篇文章详细记录我的排查过程,以及 IDEA 在 JDK 版本管理上的一个“坑”。如果你也遇到类似的问题,希望这篇文章能帮到你!


1. 现象复现:CMD 和 IDEA 终端输出不同

在 Windows 上,打开 CMD 输入:

java -version

得到的结果是 JDK 17。

然后打开 IDEA 终端,输入同样的命令:

java -version

结果显示的是 JDK 11?!

而且,即使在 IDEA 里切换了 JDK 版本,java -version 依然输出 JDK 11,怎么改都没用。


2. 排查思路:环境变量、缓存、IDEA 配置

为了找出原因,我做了以下尝试:

  1. 检查环境变量:
    在 Windows 中 java -version 依赖 JAVA_HOMEPath 变量,于是我在 CMD 里执行:

    echo %JAVA_HOME%
    

    发现指向的是 C:\Program Files\Java\jdk-17.

  2. 清理缓存 & 重启 IDEA:
    以为是 IDEA 终端的缓存问题,清理缓存并重启 IDEA,但 java -version 依然显示 JDK 11。

  3. 切换项目 JDK 版本:
    在 IDEA 中:

    • 文件 → 项目结构(Project Structure),切换 JDK 版本为 17。

    • 应用(Apply)并重启 IDEA
      但问题依旧,IDEA 终端依然输出 JDK 11。


3. 关键发现:IDEA 终端的环境变量优先级

在 IDEA 中打开 设置 → 终端(Settings → Terminal),发现 IDEA 终端会优先使用系统环境变量 Path 中最靠上的 JDK 版本

换句话说,即使在 IDEA 里切换了 JDK 版本,IDEA 终端执行 java -version 时,仍然使用的是 Path 里靠上的 JDK 版本,而不是项目里配置的 JDK

⚠ 重点:IDEA 终端 java -version 并不能反映项目的 JDK 版本,而是受到系统环境变量的影响!


4. 解决方案

如果你希望 IDEA 终端和 CMD 一致,可以这样做:

方法 1:手动调整 Path 变量
  1. 打开 Windows 环境变量Win + R → 输入 sysdm.cpl → 高级 → 环境变量)。

  2. 找到 Path 变量,把你的目标 JDK(比如 C:\Program Files\Java\jdk-17\bin)移动到最上面。

  3. 关闭 CMD 和 IDEA,重新打开,检查 java -version

方法 2:在 IDEA 终端中手动指定 JDK

在 IDEA 终端手动设置 JAVA_HOME

set JAVA_HOME=C:\Program Files\Java\jdk-17
set Path=%JAVA_HOME%\bin;%Path%
java -version

这样,当前终端会使用你指定的 JDK 版本。

方法 3:使用 IDEA 运行配置

如果你只是想确保项目运行时使用正确的 JDK,而不管终端显示的 java -version,可以在 运行/调试配置 中手动指定 JDK。


5. 总结

这个问题的本质是:

  • CMD 使用系统 JAVA_HOMEPath 变量。

  • IDEA 终端的 java -version 依赖于 Path 变量中靠上的 JDK,而不是 IDEA 里设置的 JDK。

  • 解决方案:调整 Path 变量顺序,或在 IDEA 终端里手动指定 JAVA_HOME

如果你遇到了类似问题,不要再纠结 IDEA 终端的 java -version 了,关键是你的项目是否正确使用了目标 JDK!

你有遇到过类似的坑吗?欢迎在评论区分享你的经历! 😊