当发生版本冲突时,首先要定位冲突的jar包,其次通过<exclusions>排除冲突的依赖。
一、定位冲突的jar包
1、编译项目,当项目运行报错时,根据错误信息,寻找报错的依赖。
2、解压编译好的jar包或者war包,在lib文件夹下,找到相同jar包的不同版本。
![](http://dl2.iteye.com/upload/attachment/0126/8794/2c125ce5-f464-30c1-a2e0-c9413720808e.png)
如图,找到冲突的jar包asm。
二、找到引入冲突jar包的依赖
接下要找到是哪个<dependecy>引入的不同版本的asm。有两种方式:
1、使用命令
mvn dependency:tree >tree.txt,在生成的文件中搜索ams
2、如果IDE使用的intellij Idea,可以在pom文件中,生成依赖树的可视化视图寻找冲突。
![](http://dl2.iteye.com/upload/attachment/0126/8796/9bff8018-63ce-3f0c-9454-562109c2ab24.png)
![](http://dl2.iteye.com/upload/attachment/0126/8798/6a4b2d47-1453-3c4b-ace2-cd5963176cf2.png)
三、解决冲突
在pom的配置里用<exclusion>来排除一些不需要同时下载的依赖jar
<!-- hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.7.Final</version> <exclusions> <exclusion> <groupId>asm</groupId> <artifactId>asm</artifactId> </exclusion> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.6.7.Final</version> <exclusions> <exclusion> <groupId>asm</groupId> <artifactId>asm</artifactId> </exclusion> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency>
重新编译,冲突解决。
参考资料:
引用
http://blog.csdn.net/rocklee/article/details/51692054
引用
http://www.cnblogs.com/dingyingsi/p/3725340.html