Eclipse中改JDK不生效需确保Installed JREs、Java Compiler compliance level、JRE System Library三者版本一致,且Maven配置同步;JRE未绑定或绑定错误会导致编译报错。

项目右键 Properties 里改 JDK 不生效?检查 Java Compiler 的 compliance 级别
很多人在 Project Properties → Java Compiler 里调了 Compiler compliance level,但编译还是报 lambda expressions are not supported 或 var is not supported —— 这说明 Eclipse 没用上你选的 JDK,只是“假装支持”。compliance level 只控制语法校验,不决定实际编译器和运行时。它必须和 JRE System Library 版本、工作区默认 JDK、以及 Installed JREs 中对应 JDK 的路径三者对齐,否则就是纸面合规。
实操建议:
- 先确认
Window → Preferences → Java → Installed JREs里勾选的是你要用的 JDK(比如jdk-17.0.2),且路径指向jdk-17.0.2的根目录(不是jre/子目录) -
Project Properties → Java Compiler中勾选Use compliance from execution environment,然后选对应环境(如JavaSE-17)——比手动设compliance level更可靠 - 如果项目用了 Maven,
pom.xml中的maven-compiler-plugin配置(source/target)会覆盖 Eclipse 设置,需同步
Build Path 里的 JRE System Library 显示 unbound 怎么办
这是最常见的“JDK 找不到”信号,通常因为项目导入时旧工作区配置残留,或 Installed JREs 列表里删过 JDK 后没重绑。Eclipse 不会自动帮你重新关联,得手动触发。
实操建议:
- 右键项目 →
Build Path → Configure Build Path…→ 左侧选Libraries→ 展开JRE System Library→ 点击右侧Remove - 再点
Add Library…→ 选JRE System Library→Next→ 选Workspace default JRE(确保这个默认值已在Installed JREs中正确配置) - 如果想用特定 JDK 而非工作区默认,选
Alternate JRE,并从下拉列表中选已安装的 JDK 条目(注意:列表为空?回去检查Installed JREs是否真的添加成功)
多个项目共用一个工作区,如何让每个项目用不同 JDK
Eclipse 支持项目级 JDK 绑定,但前提是全局 Installed JREs 里已注册所有要用的 JDK。一旦漏掉某个版本(比如只有 JDK 11 和 17,却想给某项目配 JDK 19),Build Path 就找不到选项,强行改 org.eclipse.jdt.core.prefs 文件也无效。
实操建议:
-
Window → Preferences → Java → Installed JREs→Add…→ 逐个添加你需要的所有 JDK(路径必须是完整 JDK 安装目录,含bin/javac) - 每个项目右键 →
Properties → Java Build Path → Libraries→ 替换JRE System Library为对应版本(例如jdk-11.0.20或jdk-17.0.2) - 不要依赖 “Execution Environment” 名称模糊匹配(如
JavaSE-17),某些 JDK 安装包未正确声明执行环境,会导致项目仍 fallback 到默认 JDK
改完 JDK 编译出错:The type java.lang.Object cannot be resolved
这几乎 100% 是 JRE System Library 没正确绑定到 JDK(而非 JRE),或者绑定到了 JRE(比如只装了 JRE 17,没装 JDK 17)。JRE 不含 rt.jar 或 classes.jsa 等核心编译类,Eclipse 找不到 java.lang.* 的源定义。
实操建议:
- 打开
Build Path → Libraries,展开JRE System Library,看是否显示jdk-xx.x.x(带jdk-前缀);若显示jre1.8.0_301或类似纯 JRE 名称,立刻删掉重绑 - 检查 JDK 安装路径下是否存在
lib/rt.jar(旧版)或lib/classes.jsa(JDK 9+);不存在说明你绑的是 JRE 或损坏安装 - 重启 Eclipse(有时缓存不刷新,即使改了设置也不生效)
真正麻烦的不是改哪几个菜单,而是 Eclipse 会在 Installed JREs、项目 .settings/org.eclipse.jdt.core.prefs、.classpath、Maven 配置、甚至 workspace metadata 里分散存 JDK 信息。只要有一处没对齐,就会出现“看起来改了,其实没用”的情况。










