转载I地址:http://blog.sina.com.cn/s/blog_4d1085940102x2gx.html
先下结论,现在能百度到的依赖包解决办法全他妈是垃圾。首先是检查依赖包的程序,压根不好使;另外一个使用mvn dependency:tree > tree.txt 把依赖树都打印出来的,也是垃圾,因为打印出来的最终树并没有包涵所有的依赖包。而且就像我说的,码农的语文老师都是傻逼。写problem solving的文章首先要把问题描述清楚,其次再在解决问题中把道理讲明白,上来就是这么干这么干,而且缺失步骤,你不是傻逼谁是傻逼。
拿我遇到的问题来说一下,公司的项目,使用elasticsearch做索引,在实际项目启动中它的Netty4Utils工具类初始化,所用到的类报NoSuchMethodError。直接搜索一下这个类,发现在项目下起码引入了三个版本的netty,分别是:4.0.24、4.029、4.1.7。我查了具体在使用netty的类应该在4.1.7版本的包里,所以我们的目标就是要把4.0.24 和4.0.29的依赖从项目中解决掉,但这俩版本都是间接依赖,很不好找。
在网上找到多种解决方案,首先用mvn dependency:tree 打印出依赖树,很不幸,丫能找到4.1.7和4.0.29的依赖关系,但没找到24的,所以这个破官方工具也是有深度限制的,一旦依赖关系太深丫也找不着。另一个解决方案是用IDEA本身的diagram->show dependency,这个更不好用,自动生成一个鬼画符似的依赖关系图,如果项目大了根本看不过来。
最后找到了个特别牛逼的工具,是一个IDEA插件,叫Maven Helper,在 File->Settings->Plugins里安装就好了,另外这个工具依赖maven intergration,在安装后一定也要把它打上勾,然后重启IDEA。重启后,你打开你的pom.xml,编辑器左下角会多出来个“Dependency Analyzer”,打开后会发现,丫把所有依赖包的版本和冲突全都列出来了,而且还会把冲突包的路径显示出来,这时候你只要把冲突包的所有低版本从pom中exclude掉就好了,太他妈好用了。
如果还有不明白的留言,我看到了会更新回答。