开发 Java 程序必须安装 JDK 而非 JRE,因 JDK 包含 javac 等开发工具,JRE 仅用于运行字节码;常见错误包括 javac 报“command not found”、IDE 提示“No JDK specified”及 Maven 编译失败。
开发 Java 程序必须装 JDK,不是 JRE;JRE 只负责运行已编译的 .class 文件,不包含 javac、javadoc、jdb 等开发工具。如果你装了 JRE 后执行 javac 报错 “command not found” 或 “不是内部或外部命令”,基本就是只装了 JRE。
常见错误现象:
java -version 成功,但 javac -version 失败Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:... Compilation failure
去官网下载时注意三点:选对版本号(如 21.0.4)、选对操作系统(Windows/macOS/Linux)、选对架构(x64 还是 ARM64)。Mac M1/M2 用户务必选 aarch64 版本,否则 java -version 会报错 Bad CPU type in executable。
安装后验证是否生效:
where javac,输出路径应和 JAVA_HOME 一致which javac 和 readlink -f $(which java),确认指向 jdk-xx/bin/java 而非系统自带的 /usr/bin/java
echo $JAVA_HOME(Linux/macOS)或 echo %JAVA_HOME%(Windows),值必须是 JDK 根目录(不含 /bin)JAVA_HOME 必须指向 JDK 安装根目录,比如 /Library/Java/JavaVirtualMachines/jdk-21.0.4.jdk/Contents/Home(macOS),不是 .../Home/bin,也不是 /usr/libexec/java_home 的输出结果本身(那是命令,不是路径)。
不同场景下配置方式不同:
~/.zshrc(或 ~/.bash_profile):export JAVA_HOME=$(/usr/libexec/java_home -v 21)——注意用命令动态获取比硬编码路径更可靠
JAVA_HOME,值为 C:\Program Files\Java\jdk-21.0.4;再编辑 Path,追加 %JAVA_HOME%\bin
iJ → Preferences → Build → SDKs;VS Code 的 java.home 设置项必须填完整路径,不能只写 jdk-21
不用卸载旧版。关键是让 java 和 javac 指向当前要用的版本,而不是靠改 JAVA_HOME 单点控制。
推荐做法:
/usr/libexec/java_home -V 查看已安装列表,再用 export JAVA_HOME=$(/usr/libexec/java_home -v 17) 切换;可封装为 alias(如 jdk17)setx JAVA_HOME "C:\path\to\jdk-17" 临时改(需重启终端),或借助工具如 jabba / SDKMAN!
JAVA_HOME,所以项目级 JDK 选错时,即使终端里 java -version 正确,编译仍可能失败真正容易被忽略的是:IDE 启动时读取的是它自己的启动环境,不是你当前终端的 shell 环境。Mac 上从 Dock 启动 IntelliJ,默认没加载 ~/.zshrc,JAVA_HOME 为空——这时必须在 IDE 内显式指定 SDK,不能依赖系统变量。