java_home必须指向jdk根目录而非bin子目录:例如d:\jdk21\jdk-21.0.10(✅),而非d:\jdk21\jdk-21.0.10\bin(❌);错误会导致maven、gradle、idea等工具因拼接%java_home%\bin失败而无法识别javac。

JAVA_HOME 变量必须填对根目录,不是 bin 目录
很多人配完发现 java -version 还是报错,第一反应是 Path 没加对,其实更大概率是 JAVA_HOME 值写错了。这个变量必须指向 JDK 的安装根目录,比如 D:\JDK21\jdk-21.0.10,而不是 D:\JDK21\jdk-21.0.10\bin。
错误写法会导致 Maven、Gradle、IDEA 等工具读取失败,因为它们默认拼接 %JAVA_HOME%\bin 找 javac,如果 JAVA_HOME 已含 \bin,就变成 ...\bin\bin,路径直接不存在。
- 确认方式:打开
JAVA_HOME对应的文件夹,里面应该有bin、lib、conf等子目录 - 推荐路径写法:避免中文、空格、括号;例如用
D:\Dev\JDK\jdk-21比C:\Program Files\Java\jdk-21更稳妥 - 安装时若没记清路径,可直接在文件资源管理器中定位到
javac.exe,然后往上退一级就是正确JAVA_HOME
Path 里只加 %JAVA_HOME%\bin,别加 jre\bin 或 tools.jar
JDK 21 自带 JRE,且从 JDK 9 起已移除独立 jre 目录结构,%JAVA_HOME%\jre\bin 在 JDK 21 中根本不存在——加了反而报错或被忽略。
CLASSPATH 在现代开发中基本不用,尤其 JDK 21 默认启用模块系统(--module-path),硬加 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 不但无效,还可能干扰构建工具自动类路径解析。
- Path 中只需新增一条:
%JAVA_HOME%\bin - 不要手动添加绝对路径如
C:\...\jdk-21\bin,否则换机器或重装 JDK 就得改 - 多个 JDK 共存时,确保
%JAVA_HOME%\bin在 Path 列表顶部,避免系统优先找到旧版本的java.exe
cmd / PowerShell 必须重启才能生效
环境变量修改后,已打开的命令行窗口不会自动刷新,继续执行 java -version 仍会沿用旧缓存。这不是配置失败,只是进程没加载新变量。
验证前务必关闭所有 CMD/PowerShell 窗口,再新开一个,否则看到的永远是“'java' 不是内部或外部命令”。
- 快捷验证顺序:先运行
echo %JAVA_HOME%,确认输出是你设的路径;再运行java -version和javac -version - 如果
echo %JAVA_HOME%是空,说明变量没生效或拼写错误(注意大小写:Windows 不区分,但某些脚本会严格校验) - 某些终端(如 VS Code 内置终端)需重启整个编辑器,不只是关掉终端标签页
IDE 和构建工具依赖 JAVA_HOME,不是 PATH
IntelliJ IDEA、Eclipse、Maven、Gradle 启动时,优先读取 JAVA_HOME,而不是从 PATH 里找 java。即使 PATH 配对了,JAVA_HOME 错误,IDE 仍会提示 “No JDK specified” 或编译失败。
比如 Maven 报错 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:... Unsupported class file major version 65,往往就是因为 JAVA_HOME 指向了 JDK 17 或更低版本,而项目用了 JDK 21 的语法。
- 检查 IDEA:File → Project Structure → Project → Project SDK,看是否识别到你刚配的 JDK 21
- Maven 默认使用
JAVA_HOME,不走PATH;可通过mvn -v查看它实际用的 JDK 路径 - Gradle 也一样,
gradle --version显示的 Java home 应与%JAVA_HOME%一致
JAVA_HOME 是钥匙,PATH 是门禁卡,两者缺一不可,且不能互相替代。











