我无法将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.parsers
,org.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 14
和xmlbeans.jar
library.
我只需要删除xmlbeans.jar
库,它肯定解决了这个问题。
在 Gradle 土地上,您可以通过运行以下命令来跟踪哪些依赖项对xml-api
有贡献:
gradlew -q dependencies
(或多项目环境中core
项目的core:dependencies
)。
就我而言,net.sourceforge.htmlunit
和xom
都要求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.xml
jar(库)。
就我而言,我编辑了我的.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 文件
- 右键单击 jar 文件
- 点击专家
- 使用看到打开的排除单击,它被取消。
签入您的 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();