JAVA_HOME必须指向JDK根目录(如C:\Program Files\Java\jdk-17.0.1),不可包含bin;需验证路径下存在bin、lib、jre等子目录,并确保PATH中%JAVA_HOME%\bin优先且终端已重启。

检查 JAVA_HOME 是否指向 JDK 根目录而非 bin 目录
常见错误是把 JAVA_HOME 设成 C:\Program Files\Java\jdk-17.0.1\bin,这会导致后续所有依赖 JAVA_HOME 的工具(如 Maven、Tomcat)找不到 lib 或 jre。正确路径必须是 JDK 安装根目录,即不含 bin:
-
JAVA_HOME=C:\Program Files\Java\jdk-17.0.1✅ -
JAVA_HOME=C:\Program Files\Java\jdk-17.0.1\bin❌
验证方式:在命令行运行 echo %JAVA_HOME%(Windows)或 echo $JAVA_HOME(macOS/Linux),再手动进入该路径,确认里面存在 bin、lib、jre 等子目录。
PATH 中的 %JAVA_HOME%\bin 没有生效?先看终端是否重启
Windows 和 macOS/Linux 都不会自动继承环境变量变更——修改后新开的终端才读取新配置。旧终端里执行 java -version 仍可能显示旧版本或报错 'java' is not recognized。
- Windows:关闭所有 CMD/PowerShell,重新打开;若用 IDE(如 IntelliJ),需完全退出再启动
- macOS/Linux:执行
source ~/.zshrc(或~/.bash_profile)后,仍建议新开 Terminal 窗口验证 - IDE 内置终端通常不继承系统环境变量,应改用系统终端排查
顺带确认 PATH 中 %JAVA_HOME%\bin(Windows)或 $JAVA_HOME/bin(macOS/Linux)是否拼写正确,且没有被其他 java 路径(如 /usr/bin/java)覆盖。
立即学习“Java免费学习笔记(深入)”;
java -version 和 javac -version 输出不一致?说明 JDK 和 JRE 混用了
如果 java -version 显示 17,但 javac -version 报错或显示 8,基本是 PATH 里混入了独立 JRE 的 bin,或者系统自带的旧 java 优先级更高。
- 运行
where java(Windows)或which java(macOS/Linux)查实际调用路径 - 运行
where javac或which javac,两者输出应同属一个 JDK 的bin目录 - 若不一致,检查
PATH中各路径顺序,把%JAVA_HOME%\bin移到最前面
注意:某些 Windows 系统会预装 OpenJDK JRE(位于 C:\Program Files (x86)\Common Files\Oracle\Java\javapath),该目录下是几个硬链接,容易掩盖真实 JDK 设置。
IDE(如 IntelliJ、Eclipse)不认系统环境变量?别依赖它自动探测
IDE 启动时往往只读取其启动进程的环境变量,而图形界面程序(尤其从桌面图标启动的)可能根本没加载你的 shell 配置。这时候改系统级环境变量也不一定奏效。
- IntelliJ:File → Project Structure → Project → Project SDK,手动指定 JDK 路径,不要选 “Detect”
- Eclipse:Preferences → Java → Installed JREs,点击 Add,选择标准 VM 并指向
JAVA_HOME目录 - Maven 项目还需检查
pom.xml中maven-compiler-plugin的source和target是否与 JDK 版本匹配,否则编译会失败,和环境变量无关
真正棘手的是多 JDK 共存场景:系统变量设对了,但 IDE 或构建工具用的是嵌入式 JDK 或自定义配置,这时候得一层层查日志里实际加载的 java.home 是什么。










