JAVA_HOME必须指向JDK根目录(含bin、lib、jre的父目录),不可指向jre或bin子目录;PATH需包含%JAVA_HOME%\bin或$JAVA_HOME/bin;须用java -version和javac -version双重验证;IDE需独立配置并重启。
很多人把 JAVA_HOME 设成 C:\Program Files\Java\jdk-17.0.1\jre 或 .../bin,这会导致 Maven、Gradle、Tomcat 等工具启动失败,报错类似 The JAVA_HOME environment variable is not defined correctly。
正确路径必须是 JDK 安装的最外层目录,即包含 bin、lib、jre 子目录的那个文件夹:
JAVA_HOME = C:\Program Files\Java\jdk-17.0.1 ✅JAVA_HOME = /usr/lib/jvm/java-17-openjdk-amd64 ✅(Linux/macOS)JAVA_HOME = C:\Program Files\Java\jdk-17.0.1\bin ❌JAVA_HOME = C:\Program Files\Java\jre-17.0.1 ❌只配 JAVA_HOME 不够,系统命令行仍找不到 java、javac。PATH 必须显式引用它,否则 java -version 会提示“命令未找到”或调用到旧版本。
Windows 示例(系统环境变量 PATH 新增):
%%JAVA_HOME%%\bin
macOS/Linux(在 ~/.zshrc 或 ~/.bash_profile 中):
export PATH=$JAVA_HOME/bin:$PATH
注意顺序:把 $JAVA_HOME/bin 放在 PATH 开头,避免系统自带的 OpenJDK 覆盖你配置的 JDK。
很多人只运行 java -version 就以为 OK,但实际项目编译依赖 javac。如果 JAVA_HOME 指向 JRE(无 javac),Maven 构建会直接失败,报错 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:... Compiler not found。
务必同时执行:
java -version —— 检查运行时版本javac -version —— 检查编译器是否存在且版本一致echo $JAVA_HOME(macOS/
echo %JAVA_HOME%(Windows)—— 确认变量值无空格、符号或拼写错误即使终端里 java -version 正确,IDE 仍可能沿用旧的 JDK 配置。IntelliJ 默认不读取系统 JAVA_HOME,而是从 Project Structure → SDKs 里手动指定;Eclipse 则在 Preferences → Java → Installed JREs 中管理。
常见表现:
Unsupported class file major version 61(实际是 IDE 用了 JDK 11 编译)解决方式:
JAVA_HOME 对应的 JDK(例如 17.0.1,而非 17 或 corretto-17 这类模糊别名)