升级到 JDK 10 并在 Eclipse 中遇到大量编译错误

Upgrade to JDK 10 and encountered extensive compile errors in Eclipse

更新:我最终发现下面描述的问题只是最初出现的问题。实际问题是,从 Java 8 更新到 Java 10(和 11)后,Eclipse 无法正确编译我的项目。 JDK 库和其他设置配置正确,我遇到了将近 1,000 个编译错误。

没有理由再读下去了

我将 swing 应用程序从 JDK 8 升级到 JDK 10(Mac 上的 Oracle Java),eclipse 抱怨 javax.accessibility.Accessible 是丢失了,我的 classes 之一需要它。我明白那个错误是什么意思,但我不明白为什么 eclipse 找不到那个包。我已经在网上搜索了一个多小时,但我找不到任何人遇到这个问题的迹象。看来我应该只能从 JDK 中访问该包,但我显然遗漏了一些东西。

编辑 2:

我关闭了出现错误时中止构建的标志,现在我看到有数百个错误。很难说哪些是主要的,但常见的情况是 class java.awt.<SomeClass> is not accessible。这似乎对每个 awt class 都会发生。我的代码没有组织为模块,我看到 java.desktopModulepath 上隐式可用。此外,此代码的 ant 构建工作正常。

编辑:

正如评论中所建议的,这可能是 IDE 配置错误,但我不知道我可以修复什么。我已经离开 Java 好几年了,虽然我一直都知道 JDK 是用 JDK 9 重新组织的,并且引入了模块,我不知道我是否应该明确地做些什么来使 javax.accessibility 包在 class 路径上可用。我刚刚将 JRE 系统库添加到项目的构建路径中,就像我在 Eclipse 中对 Java 项目所做的那样。

在构建路径配置 UI 中,我看到 JRE 系统库(绑定到 JDK 10)是 Modulepath 下的唯一条目。在 JRE System Library 下,我看到了一些模块,在它们上面是一个条目 Is Module,我可以编辑它。它在左侧向我显示了可用模块,并在右侧的两个树表中显式和隐式地包含了模块。 None 其中包括 javax.accessibility,但 jdk.accessibility 被列为明确包含。 None 左侧的可用模块似乎与可访问性有任何关系。所以我不知道我还能做些什么来包含那个丢失的包裹。一些 swing classes 依赖于它,所以它似乎应该默认存在。

事实证明,Eclipse 不支持 Java 10+,特定(较旧)版本除外。我一直在使用最新版本 (4.9.0),并且在使用 Java 10 和 Java 11 JDK 时出现了广泛的编译问题(近 1,000 个错误)。 (我的问题中描述的 javax.accessibility 问题只是第一个呈现系统。)

我安装了 Eclipse Oxygen.3a (4.7.3a),使用 JDK 10 和 11 的所有编译问题都消失了。起初有一个问题,很容易解决。将现有的 Java 项目导入工作区后,编译错误比以前更多。这是因为 .project 文件中的 JRE 系统库设置显然不兼容。 JRE 在 Classpath 下显示为未绑定的库。我刚刚删除了它并在 Modulepath 下添加了 JRE 系统库,并且所有内容都已编译且没有错误。

我在几个月前看到 post 说 Eclipse Photon 对 Java 10 的支持正在开发中,但我没有尝试。