![](/img/trans.png)
[英]Specific question concerning "The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml"
[英]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。一些库问题。 易于修复。 但在这一点上,
在我的操作系统 (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.parsers
、 org.w3c.dom
)。
我不得不删除dom4j
来解决这个问题。 只需使用 JDK 自己的 XML api。
对于 Java 9 及更高版本,从类路径中删除 org.w3c.dom jar 文件,您就完成了。 顺便删除模块信息文件。 您不需要添加外部 jar 文件,它已经包含在 java 9 及更高版本的系统库中。
只需打开配置构建路径并验证您作为项目一部分添加的所有模块,其中包含类文件 *
org.w3c.dom
这个错误,我们通常在Java中由于在一个项目中添加了相同类型的多个API包而出现。
因为,我使用的版本与您提到的相同,所以没有遇到任何问题,所以请确保您没有任何重复的模块。
就我而言,我使用的是:
JDK 14
和xmlbeans.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.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
}
有时即使您删除了重复的类,同样的错误“package org.w3c.dom可以从多个模块访问”可能仍然存在,尤其是对于 IDE。
只找到 org.w3c.dom 并不总是足够的..,。 您可能需要删除共享相同父 package org.w3c.xxx 的重复类,例如 org.w3c.css
我们设法像这样修复它:
如果问题仍然存在:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.