可以从多个模块访问包org.w3c.dom:<;未命名>;,java.xml

可以从多个模块访问包org.w3c.dom:<;未命名>;,java.xml,java,eclipse,dom,w3c,java-12,Java,Eclipse,Dom,W3c,Java 12,我无法将org.w3c.dom.NodeList包导入Eclipse。它正在显示 包org.w3c.dom可以从多个模块访问:,java.xml“eclipse中的错误消息” 请让我知道如何解决这个问题 Eclipse版本: 面向企业Java开发人员的Eclipse IDE 版本:2019-06(4.12.0) 构建id:20190614-1200 Java版本: java版本“12.0.1”2019-04-16 Java(TM)SE运行时环境(构建12.0.1+12) Java HotSpot

我无法将
org.w3c.dom.NodeList
包导入Eclipse。它正在显示

包org.w3c.dom可以从多个模块访问:
,java.xml“eclipse中的错误消息”

请让我知道如何解决这个问题

Eclipse版本:

面向企业Java开发人员的Eclipse IDE

版本:2019-06(4.12.0)

构建id:20190614-1200

Java版本:

java版本“12.0.1”2019-04-16

Java(TM)SE运行时环境(构建12.0.1+12)


Java HotSpot(TM)64位服务器虚拟机(构建12.0.1+12,混合模式,共享)

只需打开配置构建路径并验证作为项目一部分添加的所有模块,其中包含以下类文件:*

org.w3c.dom

这个错误,由于在一个项目中添加了相同类型的多个API包,我们通常使用Java。


由于我使用的版本与您提到的相同,我没有遇到任何问题,所以请确保您没有任何重复的模块。

在我这方面,我花了几个小时来理解我的问题,非常接近这个问题。
可以从多个模块访问org.w3c.dom包:,java.xml

我想把一个项目从Java 8迁移到Java 11。一些库问题。很容易解决。但是在这个问题上

  • 我已经尝试创建module-info.java→ 这是最糟糕的
  • 在我的操作系统上查找问题(debian 10) → 即使Java11是默认的JRE,$Java_HOME也没有正确地设置为 Maven Bug。当我认为它只是一个Eclipse问题时,我终于认为它是一个全局编译问题。为了解决这个问题,我必须在下面的代码中添加下面的代码:
    JAVA_HOME=/usr/lib/jvm/default JAVA

  • 对maven依赖关系的深入分析向我展示了对触发问题的xom.jar的第三级依赖关系。依赖关系链接到Saxon HE库→ 升级到版本9.9.X解决了这个令人厌烦的问题


希望这能帮助其他人。

我遇到了类似的问题,因为xml API依赖于可传递的
xml。我使用Maven排除法解决了这个问题:


org.apache.xmlgraphics
fop
0.95
xml API
xml API
另一个只会带来麻烦的依赖项,除了删除它之外,我没有其他解决方案:


com.oracle.database.xml
xmlparserv2
${oracle.version}

使用
mvn dependency:tree
查看谁引入了可传递依赖项,然后从中排除该依赖项。

在我的例子中,它是由以下组合使用引起的:

  • JDK 11
  • dom4j 2.1.3
    library
正如其他人指出的,根本原因是
dom4j
及其依赖项(例如,
pull parser
)使用了一些JDK使用过的包名(
javax.xml.parsers
org.w3c.dom


为了解决这个问题,我不得不删除
dom4j
。只需使用JDK自己的XML api。

令人失望的是,我没有看到任何编译器标志来显示问题所在的jar 偶数-Xlint:module似乎没有显示任何有用的内容,eclipse也没有对这个问题给出任何解释

相反,为了找到org.w3c.dom的来源,我一直在使用以下脚本:

mvn dependency:copy-dependencies -DincludeScope=test -DoutputDirectory=deps
for i in deps/*.jar; do if unzip -l $i| grep -q org.w3c.dom; then echo $i; fi ; done

严格地说,您不必指定范围测试,因为这是默认设置,但我已将其包括在内,因为您可能希望使用
compile
而不是org.w3c.dom用于:

<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>2.4.0</version>
</dependency>

org.apache.xmlbeans
xmlbeans
2.4.0
检查是否通过其他依赖项传递导入。 排除相同的

为以下项添加依赖项:

<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>2.6.0</version>
</dependency>

org.apache.xmlbeans
xmlbeans
2.6.0

对于Java 9和更高版本,从类路径中删除org.w3c.dom jar文件,您就完成了。顺便说一下,也删除模块信息文件。您不需要添加外部jar文件,它已经包含在Java 9和更高版本的系统库中。

在我的示例中,我使用:
JDK 14
xmlbeans.jar
库。
我只需要删除
xmlbeans.jar
库,它肯定解决了这个问题。

对我来说什么都不管用,最后当我将版本改为1.8时,它在maven构建之后开始工作

  • 从project转到项目属性或按ALT+ENTER键
  • 转到Java编译器窗口
  • 将版本更改为1.8(参见附图以供参考)

  • 如果您在一个简单的Java项目中,则不要使用Maven。 然后从库中删除domjaxbjar

    步骤: 右键单击项目->属性->Java构建路径->库选项卡->在JAR上选择,如dom-2.3.0-jaxb-1.0.6(版本可能不同)->删除。

    现在它将毫无错误地构建


    出现此错误是因为“org.w3c.dom.Document”来自已删除的“dom-2.3.0-jaxb-1.0.6”“jar和Java的内置库。删除额外的jar只会让它来自Java的内置库。

    这是Java 9和更高版本的一个限制:同一个包名不能在多个模块中使用。类路径上的所有内容都被视为包含在
    模块中。由于系统库中已经使用了
    org.w3c.dom
    ,因此即使没有使用JPMS(没有
    module info.java
    文件),您的代码和所有依赖项/jar也不能使用此包。所以,要么使用Java8,要么去掉包含
    org.w3c.dom
    包的代码/依赖项。可能是重复的,谢谢你的更新。我使用的是Java12版本,所以我不能降级版本。请来