必须先在Preferences → Java → Installed JREs中注册并勾选JDK,否则Eclipse不识别;常见原因是路径填错(如指向jre子目录而非JDK根目录)、未手动勾选、IDE版本不兼容OpenJDK 17+模块化结构,或eclipse.ini缺失--add-modules=all-system参数。

必须先在 Preferences → Java → Installed JREs 里注册并勾选它,否则 Eclipse 不会认这个 JDK,新建项目、编译、运行全都会出问题。
为什么“添加了却还是用不了”?
常见现象是:JDK 已下载、JAVA_HOME 已设好、命令行 java -version 能正常输出,但 Eclipse 新建项目仍报 The project cannot be built until build path errors are resolved,或 JRE System Library 显示红色叹号。
- 根本原因:Eclipse 不读取系统
JAVA_HOME,也不自动扫描 JDK 安装路径 —— 你必须手动把它加进Installed JREs列表,并主动勾选 - 路径填错:比如指向了
jre/子目录(如C:\...\jdk-17\jre),而不是 JDK 根目录(C:\...\jdk-17);macOS 上尤其容易错填成openjdk.jdk/Contents/Home/jre - 权限或符号链接问题:macOS 用
brew install openjdk后,真实路径是/opt/homebrew/opt/openjdk/libexec/openjdk.jdk,直接点 Finder 选中可能无效,建议复制粘贴路径 - 列表为空时,Eclipse 连 Java 项目模板都加载不出来 —— 这不是 bug,是设计行为
怎么正确添加 OpenJDK 到 Installed JREs
关键动作只有三步,缺一不可:
- 打开
Window → Preferences → Java → Installed JREs(macOS 是Eclipse → Preferences) - 点
Add…→ 选Standard VM→Next - 在
JRE home栏点击Directory…,精准选中 JDK 根目录:
• Windows 示例:C:\Program Files\Eclipse Adoptium\jdk-17.0.3.7-hotspot
• macOS ARM 示例:/opt/homebrew/opt/openjdk/libexec/openjdk.jdk
• Linux 示例:/usr/lib/jvm/temurin-17-jdk-amd64 - 确认后点
Finish,再**手动勾选**刚添加的条目 →Apply and Close
注意:Eclipse 4.21+ 才能完整识别 OpenJDK 17+ 的模块化结构;若用老版本(如 4.13),会提示找不到 rt.jar —— 那不是你配错了,是 IDE 版本不兼容。
项目级 JDK 覆盖默认设置
全局默认设好了,不代表每个项目就自动用它。特别是多 JDK 混合开发(比如同时维护 Java 8 和 Java 21 项目)时,必须单独指定:
- 右键项目 →
Properties → Java Build Path → Libraries - 找到
JRE System Library→Remove - 点
Add Library… → JRE System Library → Next→ 选Alternate JRE→ 从下拉菜单挑已注册的 OpenJDK 版本 - 再进
Properties → Java Compiler→ 勾选Enable project specific settings→ 把Compiler compliance level设为对应版本(如17)
这个设置优先级高于全局默认值,但只作用于当前项目 —— 切换项目时不会联动变更。
eclipse.ini 里漏加 --add-modules=all-system 就可能启动失败
OpenJDK 17+ 默认不导出所有模块,而老版 Eclipse 启动类加载器依赖部分被封装的内部 API。如果 Eclipse 启动卡在闪退、报 exit code=1 或控制台刷一堆 Module not found,大概率是这个配置缺失:
- 编辑 Eclipse 安装目录下的
eclipse.ini - 在
-vmargs行之后、其他 JVM 参数之前,插入一行:--add-modules=all-system - 保存,重启 Eclipse
这步常被忽略,尤其当你用的是 Eclipse 2023-09 或更早版本搭配 OpenJDK 17/21 时 —— 它不报 JDK 配置错误,而是静默崩溃,让人误以为是路径问题。











