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



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

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

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

日食版本:

Eclipse IDE for Enterprise Java Developers。

版: 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 位服务器 VM(内部版本 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查看谁带来了传递依赖项,然后从中排除它。

令人失望的是,我没有看到任何编译器标志来显示问题出在哪个罐子上 甚至 -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。一些库问题。易于修复。但在这一点上,

  • 我尝试创建模块信息.java →这是最糟糕的。
  • 在我的操作系统(debian 10)上查找问题 →即使Java 11是默认的JRE,$JAVA_HOME也没有正确设置。 马文构建。当我认为这只是一个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。

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

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

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

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

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

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

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

org.w3c.dom

这个错误,我们通常会在 Java 中得到,因为在一个项目中添加了相同的多个 API 包。

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

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>

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

在 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
}

对我来说,问题是:

<dependency>
<groupId>com.monitorjbl</groupId>
<artifactId>xlsx-streamer</artifactId>
<version>2.2.0</version>
</dependency>

这个包依赖于xml-api。

我添加了此排除项:

<dependency>
<groupId>com.monitorjbl</groupId>
<artifactId>xlsx-streamer</artifactId>
<version>2.2.0</version>
<exclusions>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
</exclusions>
</dependency>

如果你在一个简单的Java项目中,而不是Maven。 然后只需从库中删除 dom-jaxb jar

步骤: 右键单击项目 -> 属性 -> Java BuildPath -> 库选项卡 ->选择 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.xmljar(库)。

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

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

<</div> div class="one_answers">有时,即使您删除了重复的类,也可能仍然存在相同的错误">包org.w3c.dom可以从多个模块访问",尤其是在IDE中。

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

我们设法像这样修复它:

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

如果问题仍然存在:

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

当我将类DocumentBuilderFactory添加到我的maven项目中时,我遇到了错误。在投入了几个小时后,我得到了一个与 maven 依赖相关的固定解决方案。

我看到相同的javax.xml存在于许多jar文件中。 所以我把它排除在外。

从 Maven 依赖项--->中排除 JAR 文件

  1. 右键单击 jar 文件
  2. 点击专家
  3. 使用看到打开的排除单击,它被取消。

签入您的 POM.xml 文件。 请参阅我下面的代码以获取您的参考。

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
<exclusions>
<exclusion>
<artifactId>xml-apis</artifactId>
<groupId>xml-apis</groupId>
</exclusion>
<exclusion>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
</exclusion>
<exclusion>
<groupId>stax</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
</exclusion>
</exclusions>
</dependency>

对我来说,问题出在dom4j.2.1.3依赖项上。我用最新的 dom4j 依赖项替换了它

<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.4</version>
</dependency>

此外,对代码进行了一些更改以删除 jdk11 的 org.w3c.dom 依赖项并替换以下方法,例如

文档文档 =dBuilder.parse(inputFile); ===>文档文档 = reader.read(inputFile);

doc.getDocumentElement().normalize();===>doc.getDocument().normalize();

NodeList nList =doc.getElementsByTag("STOCKITEM") ===>List nList = doc.selectNodes("STOCKITEM");

String closesingQty = eElement .getElementsByTagName("CLOSINGQTY") .item(0).getTextContent(); ===>String closesingQty = eElement.selectSingleNode("CLOSINGQTY").getText();

相关内容

最新更新