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

来源:互联网 发布:电商销售数据分析报告 编辑:程序博客网 时间:2024/05/16 14:04

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 

这里写图片描述

或者直接通过开发工具如 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] Maven解决类包依赖冲突

原创粉丝点击