39

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

包 org.w3c.dom 可以从多个模块访问:<unnamed>, java.xml" Eclipse 中的错误消息。

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

日食版本:

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

版本:2019-06 (4.12.0)

版本号:20190614-1200

爪哇版:

java版本“12.0.1” 2019-04-16

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

Java HotSpot(TM) 64-Bit Server VM(build 12.0.1+12,混合模式,共享)

4

12 回答 12

15

由于传递xml-apis依赖,我遇到了类似的问题。我使用 Maven 排除解决了它:

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>fop</artifactId>
    <version>0.95</version>
    
    <exclusions>
        <exclusion>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
        </exclusion>
    </exclusions>
</dependency>

另一个只会引起麻烦的依赖项,除了删除它之外我没有其他解决方案:

<dependency>
    <groupId>com.oracle.database.xml</groupId>
    <artifactId>xmlparserv2</artifactId>
    <version>${oracle.version}</version>
</dependency>

用于mvn dependency:tree查看谁带来了传递依赖,然后从那里排除它。

于 2020-04-27T11:11:34.557 回答
12

令人失望的是,我没有看到任何编译器标志来显示问题所在的 jar Even -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

于 2020-07-01T08:22:27.860 回答
5

在我的情况下,它是由结合使用引起的:

  • JDK 11
  • dom4j 2.1.3图书馆

正如其他人所指出的,根本原因是它dom4j及其依赖项(例如, )使用了一些已被 JDK使用的pull-parser包名称(javax.xml.parsers, )。org.w3c.dom

我必须删除dom4j才能解决问题。只需使用 JDK 自己的 XML api。

于 2020-06-08T08:34:09.747 回答
5

就我而言,我花了几个小时来了解我的问题,真的很接近这个问题。
The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml

我想将一个项目从 Java 8 迁移到 Java 11。一些库问题。易于修复。但在这一点上,

  • 我试图创建 module-info.java → 这是最糟糕的。
  • 在我的操作系统(debian 10)上找到问题 → 即使 Java 11 是默认的 JRE,$JAVA_HOME 也没有正确设置为 maven 构建。当我认为这只是一个 Eclipse 问题时,我终于认为这是一个全局编译问题。为了解决这个问题,我必须添加以下行~/.mavenrc

    JAVA_HOME=/usr/lib/jvm/default-java

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

希望这对其他人有所帮助。

于 2020-02-22T17:34:34.510 回答
3

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

于 2020-11-29T02:16:09.113 回答
2

就我而言,罪魁祸首是 Apache POI 库。添加排除如下

<!-- Apache POI Library for Parsing Excel Sheets -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.0.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.xmlbeans</groupId>
                <artifactId>xmlbeans</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
于 2021-09-28T20:52:51.423 回答
2

org.w3c.dom用于:

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

检查这是否是通过其他依赖项传递导入的。 排除相同的

添加依赖项:

<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>2.6.0</version>
</dependency>
于 2020-09-02T12:59:19.710 回答
1

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

org.w3c.dom

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

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

于 2020-02-13T19:56:48.553 回答
1

就我而言,我使用的是:
JDK 14xmlbeans.jar库。
我只需要删除xmlbeans.jar图书馆,它肯定解决了这个问题。

于 2021-02-03T06:49:12.367 回答
0

您可以使用此代码(例如在单元测试中)来确定所有包含类的 JAR:

getClass().getClassLoader().getResources("org/w3c/dom/NodeList.class");

这给了你一个Enumeration. 最简单的打印方法是:

Collections.list(e).forEach(System.out::println);
于 2022-02-10T17:57:34.323 回答
0

您需要手动检查并删除所有可能与java.xml包冲突的jar(库)。

就我而言,我编辑了我的.classpath文件并删除了以下 jar,它解决了这个问题:

jtidy.jar, castor-0.9.5.4-xml.jar, xercesImpl.jar, xml-apis.jar
于 2021-09-04T09:27:47.087 回答
0

如果您在一个简单的Java Project中,而不是 Maven。然后从库中删除 dom-jaxb jar

步骤:右键单击项目 -> 属性 -> Java BuildPath -> 库选项卡 -> 选择 jars,例如 dom-2.3.0-jaxb-1.0.6(版本可能不同) -> 删除。

现在它将无错误地构建。

发生错误是因为“org.w3c.dom.Document”来自已删除的“dom-2.3.0-jaxb-1.0.6”jar 和 Java 的内置库。删除额外的 jar 将使其仅来自 Java 的内置库。

于 2021-06-01T06:58:58.467 回答