IDEA能运行Java而终端报“java未识别”是因为终端未继承新环境变量:IDEA启动时固化环境快照,修改PATH后必须彻底退出并重启IDEA才能使内嵌终端生效,否则子进程始终沿用旧配置。

IDE里能跑 Java 代码,终端执行 java -version 却报“不是内部或外部命令”——这不是 JDK 没装,而是终端根本没继承到正确的环境变量。问题出在进程继承链上,不是路径写错了,是压根没刷新。
为什么终端找不到 java,而 IDEA 能用?
IDEA 启动时会一次性读取系统环境变量(包括 JAVA_HOME 和 PATH),然后把这一整套环境“固化”下来,所有后续打开的内嵌 Terminal 都只是它的子进程,只继承这份快照。你改了系统 PATH,但没重启 IDEA,它就永远看不到新配置。
- 系统自带 CMD/PowerShell:每次新开窗口都会重新读取最新环境变量
- IDEA 内嵌 Terminal:只继承 IDEA 启动那一刻的环境,关掉再开 Terminal 标签页也无效
- IDEA 自身运行用的 JDK(Boot Runtime)和你项目用的 JDK 是两回事,不影响终端命令是否可用
java 命令在终端失效的 3 个真实检查点
别急着重装 JDK,按顺序验证这三项,90% 的问题当场定位:
- 在系统终端(非 IDEA 内嵌)中执行
echo $JAVA_HOME(macOS/Linux)或echo %JAVA_HOME%(Windows),确认输出是完整 JDK 根目录(如/usr/lib/jvm/jdk-17.0.2),且不含空格或中文 - 执行
echo $PATH(或echo %PATH%),看输出里是否包含$JAVA_HOME/bin(或%JAVA_HOME%\bin);注意:不能只靠where java或which java,它们可能返回系统残留的旧版本 - 执行
java -version和javac -version,两者的输出必须完全一致(包括厂商、主次版本号),否则说明PATH里混了不同 JDK 的bin
修复方案:只做一件事,但必须做对
修改完环境变量后,唯一有效的生效方式是彻底退出 IDEA 进程(不是关 Terminal 标签页,不是关项目窗口,是右上角 × 关闭整个 IDEA 窗口,或者任务管理器里杀掉 idea64.exe / jetbrains-toolbox 相关进程),再重新启动。
- Windows 用户特别注意:
setx命令修改的变量不会影响已运行进程,必须重启 IDE 才行 - macOS/Linux 用户如果用
~/.zshrc修改,记得确认 IDEA 是从桌面图标(而非终端里用idea命令启动)打开的;后者会继承 shell 环境,前者不会 - 不要试图在 IDEA Terminal 里执行
source ~/.zshrc来“手动加载”,它只是临时改了当前 shell 进程,关掉 Terminal 就丢,且不解决其他命令(如mvn、npm)的继承问题
最常被跳过的动作,就是忘记彻底关闭 IDEA。环境变量改得再准,只要 IDE 还在跑,它的子进程 Terminal 就永远活在旧世界里。


















