开发Java必须安装JDK而非JRE,因JDK包含javac等开发工具,JRE仅支持运行字节码;常见错误是MSI安装时未勾选“Development Tools”,导致javac不可用。

你装的是 JRE 而不是 JDK,javac 不在 PATH 里
Windows 上双击安装 OpenJDK 的 MSI 包,默认可能只勾选了「Java Runtime Environment」(JRE),没选「Development Tools」。结果 java -version 能跑,但 javac -version 报“不是内部或外部命令”。这不是环境变量配错了,是根本没装上开发工具组件。
解决办法很简单:
- 重新运行安装包(比如
OpenJDK17U-jdk_x64_windows_hotspot_17.0.6_10.msi),选择「Modify」而不是「Repair」 - 展开「Features」列表,确保
Development Tools和Source Code都设为「Will be installed on local hard drive」 - 完成后再检查
%JAVA_HOME%\bin\javac.exe是否存在
tools.jar 找不到?JDK 9+ 根本不提供这个文件
如果你在构建脚本或旧版 IDE(如 Eclipse Luna)里看到 tools.jar not found 报错,别急着去网上搜下载链接——从 JDK 9 开始,tools.jar 就被移除了。它里面的功能(比如 javax.tools.JavaCompiler)已通过 jdk.compiler 模块内建到 JVM 运行时镜像中。
常见触发场景和应对方式:
- Ant 构建失败:升级到 Ant 1.10+,它已适配模块化 JDK,不再硬依赖
tools.jar - IDE 启动报错:检查 IDE 的 JDK 配置是否指向完整 JDK 目录(而非仅
jre/子目录),并确认其自身版本支持 JDK 11+ - 自定义脚本里写了
-cp $JAVA_HOME/lib/tools.jar:删掉这行,改用标准 API,例如ToolProvider.getSystemJavaCompiler()
Linux/macOS 下用包管理器装的 OpenJDK 缺少 javac?检查包名后缀
Ubuntu/Debian 用 apt install openjdk-17-jre 只会装运行时;CentOS/RHEL/Fedora 默认仓库里的 java-17-openjdk-headless 也不含编译器。这是故意设计的轻量级包,不是漏装。
对应补全方式如下:
- Debian/Ubuntu:
sudo apt install openjdk-17-jdk(注意是-jdk,不是-jre) - RHEL/CentOS 8+:
sudo dnf install java-17-openjdk-devel(-devel是关键后缀) - macOS + Homebrew:
brew install openjdk@17,然后手动把$(brew --prefix openjdk@17)/bin加进PATH
验证开发工具是否真齐全:跑个最小闭环测试
光看 javac -version 成功还不够。有些发行版(尤其 ARM64 或嵌入式定制版)会缺 javadoc、jdeps 或调试工具 jdb,导致 Maven 或 Gradle 插件执行失败。
建议执行这几条命令快速摸底:
-
which javac javadoc jlink jdeps—— 确认关键工具都在PATH中 -
java --list-modules | grep compiler—— 应该输出jdk.compiler - 写个
Hello.java,用javac Hello.java && java Hello走通全流程
如果 jlink 或 jdeps 缺失,说明你装的是「headless」或「minimal」精简版 JDK,得换用完整版发行包,比如 Eclipse Temurin 的 jdk 构建,而不是 jre 或 headless 构建。











