当前位置:   article > 正文

Maven 隐式依赖包冲突导致程序报错_xml-apis

xml-apis

Maven 隐式依赖包冲突导致程序报错


问题描述

将一个独立的功能程序从原 Maven 工程中抽取出来,并创建为 web 工程,同样使用 Maven 依赖。
依赖包、Java Build Path 配置好后,处理 xml 节点的程序报错,提示“The method getTextContent() is undefined for the type Node”:

这里写图片描述

注:两个工程引用的包都是 org.w3c.dom.Node。

原因

查看 Node 反编译类得知新建的web工程中引用的是 xml-apis-1.0.b2.jar 包里面的 org.w3c.dom.Node 类,该包没有定义 textContent 的 setter 和 getter;
而原工程引用的是 JRE lib 中的 rt.jar 包里面的 org.w3c.dom.Node 类。
可知新建的web工程中这两个 org.w3c.dom.Node 类冲突了。

问题解决

首先想着改 pop.xml, 去掉 xml-apis-1.0.b2.jar 依赖,但 pop.xml 文件里面没有显式地依赖 xml-apis-1.0.b2.jar,那应该是被间接隐式引入的。

查找隐式依赖包可以通过 maven 依赖包树结构来分析。
在命令窗口切换到包所在路径,然后执行 mvn dependency:tree 命令:

E:\**\**>mvn dependency:tree 
  • 1

这里写图片描述

或者直接通过开发工具如 eclipse 的 依赖层级树结构:

这里写图片描述

可以看出是 dom4j 依赖包隐式载入了,现通过 Maven 排除隐式包依赖:

<dependency>                               
    <groupId>dom4j</groupId>             
    <artifactId>dom4j</artifactId>       
    <version>1.6.1</version>             
    <exclusions>                         
        <exclusion>                        
            <groupId>xml-apis</groupId>      
            <artifactId>xml-apis</artifactId>
        </exclusion>                       
    </exclusions>                        
</dependency>   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这样,被间接隐式引入的依赖包就不会被引入了。




参考:
[1] Maven解决类包依赖冲突

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/817632
推荐阅读
相关标签
  

闽ICP备14008679号