【发布时间】: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