Java11引用org.w3c.dom 时报错The package org.w3c.dom is accessible from more than one module: , java.xml

Java11 引用 org.w3c.dom 时报错The package org.w3c.dom is accessible from more than one module: , java.xml 的解决方法

运行环境

IDE:Eclipse 2021-12

JDK:jdk-11.0.14.101-hotspot

Maven项目

原因

在Java9或者更高版本中,相同的包名不能在多个模组之中,而org.w3c.dom包已经包含在系统的库中,所以有其他依赖库中包含org.w3c.dom时会报出这个错误。

解决方法

解决方法是将包含org.w3c.dom的库删去,或者用exclusion的方式将部分包删去。

首先我们需要全局搜索项目中名为org.w3c.dom的Package,Limit To选择Declarations。

这时候我们发现:
在这里插入图片描述
在这里插入图片描述
在jaxen-1.1.6.jar中包含了这个包。如果我们在pom.xml中并没有引入同样名字的包,又是怎么回事呢?这个情况下,可能是我们在pom中引入的包的子包中引入了jaxen。

这时候,我们需要定位这个包在哪一个引用里面。在项目目录下使用命令行 maven dependency:tree 打出当前依赖库的树形结构。

[INFO] +- javax.servlet:javax.servlet-api:jar:4.0.1:compile
[INFO] +- org.apache.commons:commons-lang3:jar:3.8.1:compile
[INFO] +- commons-beanutils:commons-beanutils:jar:1.9.4:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO] +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] +- org.dom4j:dom4j:jar:2.0.0:compile
[INFO] |  \- jaxen:jaxen:jar:1.1.6:compile
[INFO] +- org.apache.poi:poi:jar:3.11:compile
[INFO] |  \- commons-codec:commons-codec:jar:1.11:compile
[INFO] +- org.apache.poi:poi-scratchpad:jar:3.11:compile
[INFO] +- org.apache.poi:poi-ooxml:jar:3.11:compile
[INFO] +- org.apache.poi:poi-ooxml-schemas:jar:4.1.2:compile
[INFO] |  \- org.apache.xmlbeans:xmlbeans:jar:3.1.0:compile
[INFO] +- commons-fileupload:commons-fileupload:jar:1.1.1:compile
[INFO] |  \- commons-io:commons-io:jar:1.1:compile

通过搜索上述节选出来的树状结构可以发现,在dom4j中引入了jaxen的包。接下来就要从dom4j中除去这个包的引用:

<exclusions>
    <exclusion>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
    </exclusion>
</exclusions>

将上述包排除之后,项目恢复正常。

假如你必须要使用这个包怎么办?绕过org.w3c.dom这个包,用别的实现方法吧。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值