前言:离谱的 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 配置
为了找出原因,我做了以下尝试:
检查环境变量:
在 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。
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
变量
打开 Windows 环境变量(
Win + R
→ 输入sysdm.cpl
→ 高级 → 环境变量)。找到
Path
变量,把你的目标 JDK(比如C:\Program Files\Java\jdk-17\bin
)移动到最上面。关闭 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_HOME
和Path
变量。IDEA 终端的
java -version
依赖于Path
变量中靠上的 JDK,而不是 IDEA 里设置的 JDK。解决方案:调整
Path
变量顺序,或在 IDEA 终端里手动指定JAVA_HOME
。
如果你遇到了类似问题,不要再纠结 IDEA 终端的 java -version
了,关键是你的项目是否正确使用了目标 JDK!
你有遇到过类似的坑吗?欢迎在评论区分享你的经历! 😊