今天遇到了一个让人抓狂的现象:在 Windows 的 CMD 里输入 java -version
和在 IntelliJ IDEA 终端输入 java -version
,居然显示了不同的 JDK 版本!
本以为是环境变量、缓存或者 IDEA 设置的问题,折腾了一整天,翻遍了各种资料,才终于找到真正的原因。
这篇文章详细记录我的排查过程,以及 IDEA 在 JDK 版本管理上的一个“坑”。如果你也遇到类似的问题,希望这篇文章能帮到你!
在 Windows 上,打开 CMD 输入:
java -version
得到的结果是 JDK 17。
然后打开 IDEA 终端,输入同样的命令:
java -version
结果显示的是 JDK 11?!
而且,即使在 IDEA 里切换了 JDK 版本,java -version
依然输出 JDK 11,怎么改都没用。
为了找出原因,我做了以下尝试:
检查环境变量:
在 Windows 中 java -version
依赖 JAVA_HOME
和 Path
变量,于是我在 CMD 里执行:
echo %JAVA_HOME%
发现指向的是 C:\Program Files\Java\jdk-17
.
清理缓存 & 重启 IDEA:
以为是 IDEA 终端的缓存问题,清理缓存并重启 IDEA,但 java -version
依然显示 JDK 11。
切换项目 JDK 版本:
在 IDEA 中:
文件 → 项目结构(Project Structure),切换 JDK 版本为 17。
应用(Apply)并重启 IDEA。
但问题依旧,IDEA 终端依然输出 JDK 11。
在 IDEA 中打开 设置 → 终端(Settings → Terminal),发现 IDEA 终端会优先使用系统环境变量 Path
中最靠上的 JDK 版本。
换句话说,即使在 IDEA 里切换了 JDK 版本,IDEA 终端执行 java -version
时,仍然使用的是 Path
里靠上的 JDK 版本,而不是项目里配置的 JDK。
⚠ 重点:IDEA 终端
java -version
并不能反映项目的 JDK 版本,而是受到系统环境变量的影响!
如果你希望 IDEA 终端和 CMD 一致,可以这样做:
Path
变量打开 Windows 环境变量(Win + R
→ 输入 sysdm.cpl
→ 高级 → 环境变量)。
找到 Path
变量,把你的目标 JDK(比如 C:\Program Files\Java\jdk-17\bin
)移动到最上面。
关闭 CMD 和 IDEA,重新打开,检查 java -version
。
在 IDEA 终端手动设置 JAVA_HOME
:
set JAVA_HOME=C:\Program Files\Java\jdk-17
set Path=%JAVA_HOME%\bin;%Path%
java -version
这样,当前终端会使用你指定的 JDK 版本。
如果你只是想确保项目运行时使用正确的 JDK,而不管终端显示的 java -version
,可以在 运行/调试配置 中手动指定 JDK。
这个问题的本质是:
CMD 使用系统 JAVA_HOME
和 Path
变量。
IDEA 终端的 java -version
依赖于 Path
变量中靠上的 JDK,而不是 IDEA 里设置的 JDK。
解决方案:调整 Path
变量顺序,或在 IDEA 终端里手动指定 JAVA_HOME
。
如果你遇到了类似问题,不要再纠结 IDEA 终端的 java -version
了,关键是你的项目是否正确使用了目标 JDK!
你有遇到过类似的坑吗?欢迎在评论区分享你的经历!