赞
踩
问题描述
将一个独立的功能程序从原 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解决类包依赖冲突
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。