可以从多个模块访问包org.w3c.dom:<;未命名>;,java.xml
我无法将可以从多个模块访问包org.w3c.dom:<;未命名>;,java.xml,java,eclipse,dom,w3c,java-12,Java,Eclipse,Dom,W3c,Java 12,我无法将org.w3c.dom.NodeList包导入Eclipse。它正在显示 包org.w3c.dom可以从多个模块访问:,java.xml“eclipse中的错误消息” 请让我知道如何解决这个问题 Eclipse版本: 面向企业Java开发人员的Eclipse IDE 版本:2019-06(4.12.0) 构建id:20190614-1200 Java版本: java版本“12.0.1”2019-04-16 Java(TM)SE运行时环境(构建12.0.1+12) Java HotSpot
org.w3c.dom.NodeList
包导入Eclipse。它正在显示
包org.w3c.dom可以从多个模块访问:,java.xml“eclipse中的错误消息”
请让我知道如何解决这个问题
Eclipse版本:
面向企业Java开发人员的Eclipse IDE
版本:2019-06(4.12.0)
构建id:20190614-1200
Java版本:
java版本“12.0.1”2019-04-16
Java(TM)SE运行时环境(构建12.0.1+12)
Java HotSpot(TM)64位服务器虚拟机(构建12.0.1+12,混合模式,共享)只需打开配置构建路径并验证作为项目一部分添加的所有模块,其中包含以下类文件:*
org.w3c.dom
这个错误,由于在一个项目中添加了相同类型的多个API包,我们通常使用Java。
由于我使用的版本与您提到的相同,我没有遇到任何问题,所以请确保您没有任何重复的模块。在我这方面,我花了几个小时来理解我的问题,非常接近这个问题。
可以从多个模块访问org.w3c.dom包:,java.xml
我想把一个项目从Java 8迁移到Java 11。一些库问题。很容易解决。但是在这个问题上
- 我已经尝试创建module-info.java→ 这是最糟糕的
- 在我的操作系统上查找问题(debian 10)
→ 即使Java11是默认的JRE,$Java_HOME也没有正确地设置为
Maven Bug。当我认为它只是一个Eclipse问题时,我终于认为它是一个全局编译问题。为了解决这个问题,我必须在下面的代码中添加下面的代码:
JAVA_HOME=/usr/lib/jvm/default JAVA
- 对maven依赖关系的深入分析向我展示了对触发问题的xom.jar的第三级依赖关系。依赖关系链接到Saxon HE库→ 升级到版本9.9.X解决了这个令人厌烦的问题
希望这能帮助其他人。我遇到了类似的问题,因为xml API依赖于可传递的xml。我使用Maven排除法解决了这个问题:
org.apache.xmlgraphics
fop
0.95
xml API
xml API
另一个只会带来麻烦的依赖项,除了删除它之外,我没有其他解决方案:
com.oracle.database.xml
xmlparserv2
${oracle.version}
使用mvn dependency:tree
查看谁引入了可传递依赖项,然后从中排除该依赖项。在我的例子中,它是由以下组合使用引起的:
JDK 11
dom4j 2.1.3
library
正如其他人指出的,根本原因是dom4j
及其依赖项(例如,pull parser
)使用了一些JDK使用过的包名(javax.xml.parsers
,org.w3c.dom
)
为了解决这个问题,我不得不删除dom4j
。只需使用JDK自己的XML api。令人失望的是,我没有看到任何编译器标志来显示问题所在的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
而不是org.w3c.dom用于:
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.4.0</version>
</dependency>
org.apache.xmlbeans
xmlbeans
2.4.0
检查是否通过其他依赖项传递导入。
排除相同的
为以下项添加依赖项:
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency>
org.apache.xmlbeans
xmlbeans
2.6.0
对于Java 9和更高版本,从类路径中删除org.w3c.dom jar文件,您就完成了。顺便说一下,也删除模块信息文件。您不需要添加外部jar文件,它已经包含在Java 9和更高版本的系统库中。在我的示例中,我使用:
JDK 14
和xmlbeans.jar
库。
我只需要删除xmlbeans.jar
库,它肯定解决了这个问题。
对我来说什么都不管用,最后当我将版本改为1.8时,它在maven构建之后开始工作
从project转到项目属性或按ALT+ENTER键
转到Java编译器窗口
将版本更改为1.8(参见附图以供参考)
如果您在一个简单的Java项目中,则不要使用Maven。
然后从库中删除domjaxbjar
步骤:
右键单击项目->属性->Java构建路径->库选项卡->在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 9和更高版本的一个限制:同一个包名不能在多个模块中使用。类路径上的所有内容都被视为包含在
模块中。由于系统库中已经使用了org.w3c.dom
,因此即使没有使用JPMS(没有module info.java
文件),您的代码和所有依赖项/jar也不能使用此包。所以,要么使用Java8,要么去掉包含org.w3c.dom
包的代码/依赖项。可能是重复的,谢谢你的更新。我使用的是Java12版本,所以我不能降级版本。请来