Eclipse 无法定位 JDK 10 构建路径转换后的 XML 类:解决方案
尝试将 Maven 项目的构建路径切换到 JDK 10 时在 Eclipse 中,用户可能会遇到 Eclipse 构建过程无法找到 XML 相关类(包括 javax.xml.xpath.XPath)的问题, org.w3c.dom.Document 和 org.xml.sax.SAXException。这些困难主要影响从 xml-apis-1.4.01 依赖项派生的类。
根本原因
项目从 Java 1.8 转换到 Java 时会触发该行为10 无需使用 module-info.java 文件显式声明为模块。这意味着项目的代码是在未命名模块中编译的,该模块对命名的命名模块和未命名模块具有完全可见性,包括 JRE 系统库中的 java.xml,该库导出这些有问题的包。
此外,xml-类路径上的 apis.java 提供了另一组相同的包。然而,这些包与未命名的模块关联,导致违反 JLS §7.4.3 中定义的“唯一可见性”要求。因此,程序将变得无效并面临编译器的拒绝。
解决方案
要解决此问题,可以采用以下三种方法之一:
(1) 将项目声明为模块
项目内引入一个 module-info.java 文件,定义具体哪些模块项目应该仔细阅读“requires”关键字的使用。这种方法通过明确说明导入哪些包来确保唯一的可见性。
(2) 限制可观察模块
如果不将项目转换为模块,则可以排除来自可观察模块集的 java.xml。在 Eclipse 中,这可以通过“内容”选项卡下的“模块化详细信息”对话框来完成。可能需要将除 java.base 之外的大多数模块推送到“可用模块”列,并有选择地重新添加必要的模块。
(3) 排除 java.xml (JDK Bug)
不太推荐这种方法,因为它利用了 javac 中的一个错误,允许非法情况通过编译。通过将 java.xml 移动到构建路径的末尾,可以有效地对未命名模块隐藏它。然而,这可能会导致意外的行为,并且不是一个可靠的长期解决方案。
总之,在 Eclipse 中切换到 JDK 10 时出现与 XML 相关的类未找到问题是由于违反了独特的可见性要求。该问题可以通过模块化项目或限制可观察的模块来解决。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3