什么是Maven依赖传递?
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
当我们导入spring-webmvc的依赖时,我们发现项目的External Libraries下同时也引入了别的依赖。这是因为spring-webmvc创建的时候也导入了这些依赖,同时在这些依赖下也有别的依赖存在,这就是maven依赖传递。
什么是Maven依赖冲突?
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
</dependencies>
spring-webmvc和spring-aop下都有spring-beans依赖但是两个的版本不一致,上图中可以看出spring-aop下面的依赖是红色显示冲突失效的,这就是Maven依赖冲突。
如何解决Maven依赖冲突?
第一声明者优先原则,调换Maven依赖的顺序,在pom中以先声明的为准。
路径近者优先原则,多次依赖传递中,靠前的依赖优先,如下: