Maven依赖冲突的解决
在maven项目开发中,由于引入了太多的Jar包,所以免不了会产生依赖冲突,同时存在几个不同版本的jar包。下面有两个解决办法。
1.使用exclusion排查依赖传递
通过这种方式排查依赖传递,避免与我们定义的依赖产生冲突。


但是很多时候,我们并不知道会产生冲突,因为依赖的比较隐蔽,光从表面看不出来。通过看依赖数我们可以看到上面spring-context的依赖都来自哪,版本是否一致。如果产生了冲突,再通过exclusion进行排除。

2.使用<dependencyManagement>统一管理版本
使用<dependencyManagement>可以使得mave强制使用固定版本的依赖,不用担心产生了依赖冲突。
<dependencyManagement><dependencies><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>${httpclient.version}</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.14</version></dependency></dependencies></dependencyManagement>
版本优先级总结如下,从高到低的优先级:
dependencyManagement中声明的版本 (最可靠)
当前POM中显式声明的版本 (可能被覆盖)
父POM中的版本声明
依赖调解:路径最近优先
依赖调解:第一声明优先
传递性依赖的版本
