【原】java(maven工程)包冲突解决办法

开发java应用,包冲突是经常遇见的,如何快速的定位冲突,并且解决十分重要。

下面通过工作中的一个例子来引出一些排查的常用工具。


(1)查看某一个方法是引用的那个包,可以在debug的时候通过反射中的这个方法看一下

例如查看CollectionUtils这个类的jar包的信息,可以这样:

CollectionUtils.class.getProtectionDomain().getCodeSource();


(2)如何查看maven工程中的jar包的情况?

在maven工程的父目录来执行这个命令,显示全部工程的包的信息

mvn compile dependency:tree

可以通过">"来重定向到一个文件,方便来进行查看。

如果知道特定的子module,则可以进入到特定的module,来进行打印依赖树。



上面的例子。在web这个module下面,果然没有看到commons-collections这个jar包。

所以问题就定位了呵呵。



(3)如何解决冲突?


一般情况下问题定位了就能够很快的解决冲突了。

上述情况是因为没有引入jar包导致的,解决办法,直接在pom文件中加入jar包即可,当然这是最简单的包问题了。

其余的一般可以通过修改pom文件来进行解决,下面就pom文件解决冲突的几类常见方法说明一下。

maven的冲突解决需要对于maven的依赖机制了解比较深入,这样处理问题才能游刃有余,推荐一个博客,上面的文章很好,可以学习一下。

http://www.juvenxu.com/

还有博客作者的书《maven实战》上面写的很详细,对于maven入门以及深入了解很有帮助。

(4)线上的话如何来看代码的类的jar包的信息呢?

上面的一些方法能够解决大部分的问题,但是如果是线上出现这种情况,或者上面的方法没有办法查看到,那如何处理呢。

不用担心,公司的一位大神撒迦写了一个类,来搞定这些。

博客地址在这里:http://rednaxelafx.iteye.com/blog/1295944

代码和执行命令都在这里,有了这个之后,线上排查问题就能够非常方便了呵呵。

https://gist.github.com/1441625#file_command_prompt

猜你喜欢

转载自iamzhongyong.iteye.com/blog/1386503