开发 Java 程序必须安装 JDK 而非 JRE,因 JDK 包含 javac 等开发工具,JRE 仅用于运行字节码;常见错误包括 javac 报“command not found”、IDE 提示“No JDK specified”及 Maven 编译失败。

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










