1.依赖冲突原因详解
依赖冲突的根源是Maven的依赖机制会导致Jar包的冲突。举个栗子,在我们目前的项目中使用了A和B两个Jar包,A包在依赖中依赖了C包,而B包在依赖中也同时依赖了C包,但是A包依赖的C的版本的1.0,B依赖C包的版本是2.0。此时,我们的项目中就出现了1.0.和2.0两个版本的C包,此时Maven会依赖路径最短优先原则,来决定使用哪个版本的Jar包,而另外一个无用的Jar包则未被使用,这就是所谓的依赖冲突
在大多数的时候,依赖冲突并不会对系统造成异常,因为Maven始终会选择一个Jar包来使用,但是在特定的情况下因为Jar包版本不同会造成找不到类的异常,如果存在依赖冲突最好解决掉,不要给系统留下隐患。
2.依赖冲突解决方法
解决依赖冲突的方法就是使用Maven提供的标签
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
实例:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
我们是用标签排除掉了spring-core所依赖的commons-logging,这样Maven就不会下载spring-core中所依赖的commons-logging,也就保证了我们项目只有一个commons-logging
3.使用IDEA中插件查看依赖冲突
IDEA提供了项目的依赖树可以供我们查看项目中Jar的依赖情况
查看项目依赖树
红色的线是目前有依赖冲突的Jar,可以根据依赖树来排查项目中存在的依赖冲突问题。