gpt4 book ai didi

java - 将构建路径切换到 JDK 10 后 Eclipse 找不到 XML 相关类

转载 作者:IT老高 更新时间:2023-10-28 21:12:50 26 4
gpt4 key购买 nike

我正在开发 Maven project (分支平台-bom_brussels-sr7)在 Eclipse 中。当我最近尝试将项目的 Java 构建路径切换到 JDK 10 时,Eclipse 构建无法再找到诸如 javax.xml.xpath.XPathorg.w3c.dom.Document 之类的类org.xml.sax.SAXException。似乎只有 XML 相关的类受到影响,主要来自 Maven 依赖项 xml-apis-1.4.01

尝试从 Eclipse 构建 Maven 可以正常工作。 Ctrl-LeftClick 在一个假定丢失的类上找到该类并在 Eclipse 编辑器中打开它。似乎只有 Eclipse 构建受到影响。

我尝试了几件事,但没有任何帮助。我试过了:

  • 项目清理
  • 不同的 Eclipse 版本:氧气和光子。
  • 使用 JDK 8 和 JDK 10 运行 Eclipse。
  • 更改项目的编译器合规性级别。它在 JDK 8 构建路径下使用合规级别 8 和 10 构建,但在构建路径中使用 JDK 10 时均失败。

最佳答案

我假设从 Java 1.8 迁移的项目仍然没有 module-info.java。这意味着您正在“未命名模块”中编译代码。

未命名模块中的代码“读取”所有可观察的命名和未命名模块,特别是它从 JRE 系统库中读取模块“java.xml”。此模块导出包,如 java.xml.xpath

此外,您在类路径上有 xml-apis.java,它提供了另一组同名的包(java.xml.xpath 和 friend )。据说这些与未命名的模块相关联,就像您自己的代码一样。

这种情况违反了JLS §7.4.3 中定义的“唯一可见性”要求。 (最后一段)。特别是每个限定类型名称 Q.Id ( JSL §6.5.5.2 ) 要求其前缀 Q 是唯一可见的包(为简单起见,我忽略了嵌套类型的情况)。 Ergo:该程序是非法的,必须被编译器拒绝。

这给我们留下了一个问题和两个解决方案:

(1)问:javac为什么接受程序?

(2) 解决方案:如果你在你的项目中添加module-info.java,你可以通过requires控制你的项目读取哪个模块,或者requires java.xml;需要xml.apis;(其中“xml.apis”是“xml-apis-1.4.01.jar”的自动模块名)。

(3) 解决方案:除了将您的项目变成模块之外,您仍然可以通过将 java.xml 从可观察模块集中排除来避免冲突。在命令行上,这将使用 --limit-modules 来完成。 Eclipse 中的等价物是 "Modularity Details" dialog ,另见 JDT 4.8 New&Noteworthy (寻找内容标签)。由于许多其他默认可观察模块隐式需要 java.xml,因此最好从右侧推送除 java.base 之外的所有内容(“显式包含的模块”)到左侧(“可用模块”)(并有选择地重新添加您的项目需要的那些模块)。

PS:Eclipse 仍然没有提供理想的错误消息,而不是“无法解决”,它实际上应该说:“包 javax.xml.xpath 可以从多个模块访问:javax.xml, .

PPS:也很奇怪:为什么更改 JRE 和类路径上的 jar 之间的顺序(这种顺序不是 javac 和 JEP 261 支持的概念)会改变编译器的行为。

编辑:

  • 亚历克斯·巴克利 confirmed尽管 javac 说了什么,给定的情况是非法的。针对 javac 的错误已提出为 JDK-8215739 .这个错误在 Java 12 发布前几个月就已经得到确认。截至 2019 年 6 月,已经决定 Java 13 也将在没有修复的情况下发布。 Java 14 也是如此。该错误被暂时安排在 Java 15 中,但该计划已于 2020 年 4 月 20 日取消。
  • Eclipse 错误消息 has been improved提到真正的问题。
  • 在 Eclipse 2019-06 中,用于解决方案 (3) 的 UI 为 revamped .最新的文档可以在 online help 中找到。 .

关于java - 将构建路径切换到 JDK 10 后 Eclipse 找不到 XML 相关类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51094274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com