繁体   English   中英

package org.w3c.dom 可以从多个模块访问:<unnamed> , java.xml</unnamed>

[英]The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml

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

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

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

Eclipse 版本:

Eclipse IDE 适用于企业 Java 开发人员。

版本:2019-06 (4.12.0)

版本号:20190614-1200

Java版本:

java 版本“12.0.1” 2019-04-16

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

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

由于可传递的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查看谁引入了传递依赖,然后从那里排除。

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

在我这边,我花了几个小时来了解我的问题,对这个问题真的很接近。
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库 → 升级到版本 9.9.X解决了这个无聊的问题。

希望这会帮助其他人。

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

  • JDK 11
  • dom4j 2.1.3

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

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

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

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

org.w3c.dom

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

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

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

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>

我无法将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 运行时环境(构建 12.0.1+12)

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

如果您在一个简单的Java 项目中,而不是 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 的内置库。

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

就我而言,我编辑了.classpath文件并删除了以下 jars 并解决了问题:

jtidy.jar, castor-0.9.5.4-xml.jar, xercesImpl.jar, xml-apis.jar

就我而言,罪魁祸首是 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>

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

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

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

Collections.list(e).forEach(System.out::println);

在 Gradle 土地中,您可以通过运行以下命令来跟踪哪些依赖项对xml-api有贡献:

gradlew -q dependencies

(或核心:多项目环境中core项目的core:dependencies项)。

就我而言, net.sourceforge.htmlunitxom都请求了xml-apis ,因此解决方案是在您的build.gradle中排除xml-apis

dependencies {
  implementation("net.sourceforge.htmlunit:neko-htmlunit:$nekoHtmlUnitVersion") {
    exclude group: "xml-apis"
  }
  testImplementation("xom:xom:$xomVersion") {
    exclude group: "xml-apis"
  }
  // ...other dependencies
}

有时即使您删除了重复的类,同样的错误“package org.w3c.dom可以从多个模块访问”可能仍然存在,尤其是对于 IDE。

只找到 org.w3c.dom 并不总是足够的..,。 您可能需要删除共享相同父 package org.w3c.xxx 的重复类,例如 org.w3c.css

我们设法像这样修复它:

  • 在 IDE 搜索类开头:org.w3c
  • 添加 pom.xml 排除项或增加库版本,因为 org.w3c 在一些较新的库版本中已被删除
  • 在 IDE 和命令行中测试编译

如果问题仍然存在:

  • 将所有依赖项导出到文件: mvn dependency:copy-dependencies -DincludeScope=test -DoutputDirectory=deps
  • 从 jar 文件中找到 org.w3c 的任何类
  • 继续调整pom.xml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM