【问题标题】:ElementNSImpl does not work in Eclipse with Java Zulu 11ElementNSImpl 不适用于带有 Java Zulu 11 的 Eclipse
【发布时间】:2019-05-09 14:28:33
【问题描述】:

编辑

我试图做gradle build,它给了我这个错误:

com.sun.org.apache.xerces.internal.dom 包在模块 java.xml 中声明,它不会导出它

我检查了gradle dependencies,但没有人使用java.xml


我们只在代码的一部分中使用了 ElementNSImpl(我不知道为什么......)。无论如何,当我尝试切换到 Java 11 Zulu 时,Eclipse 给了我这个错误:

com.sun.org.apache.xerces.internal.dom.ElementNSImpl 类型不可访问

对于 OpenJDK 8,我们必须使用 xerces:xercesImpl:2.6.2-jaxb-1.0.6 导入它

我用 Eclipse 检查了这个类,它是一个公共类,在 Zulu 11 jar 下。

【问题讨论】:

  • com.sun.org.apache.xerces.internal.dom 是 JDK 内部的。您应该收到 JDK 8(及更早版本)的编译器警告来警告您。从 JDK 9 开始,JDK 内部是在编译时封装的,所以这就是您收到编译错误的原因。正确的做法是修复直接使用 JDK 内部类的问题。您可以通过使用--add-exports java.xml/com.sun.org.apache.xerces.internal.dom=ALL-UNNAMED 编译来临时解决它。
  • 当您使用外部 Xerces lib 时,该类应该是 org.apache.xerces.internal.dom.ElementNSImpl(注意:没有前面的 com.sun.),但我仍然想知道您是否真的需要访问其名称的实现类已经承载了“internal”和“Impl”,而不是使用标准的 DOM API(org.w3c.dom.Element 接口)。
  • @Holger 不知道,我们在代码中找到了它,由过去的某个人添加...无论如何 Eclipse 向我询问了 com.sun.org.apache.xerces。这就是为什么我们之前使用xerces version 2.6.2-jaxb-1.0.6
  • 然后,我会尝试更改对标准Element 接口的引用时代码是否仍然有效。
  • @Holger 与Element 一起工作。如果你写一个答案,我会接受。

标签: java eclipse java-11 azul-zulu


【解决方案1】:

正如@Holger 在its comment 和@AlanBateman 在its comment 中所说的那样, com.sun.org.apache.xerces.internal.dom 是 JDK 内部的。您只需将com.sun.org.apache.xerces.internal.dom.ElementNSImpl 替换为org.w3c.dom.Element

【讨论】:

    【解决方案2】:

    在我的情况下,将导入更改为 org.apache.xerces.dom.ElementNSImpl 有效。参考https://xerces.apache.org/xerces-j/apiDocs/org/apache/xerces/dom/ElementNSImpl.html

    我正在使用 Red Hat openjdk 11 btw。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 2016-03-24
      • 2021-03-03
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多