Maven依赖传递致使的依赖冲突以及解决方法

什么是Maven依赖传递?

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
    </dependencies>

在这里插入图片描述
    当咱们导入spring-webmvc的依赖时,咱们发如今spring-webmvc下同时也导入了别的依赖。这是由于spring-webmvc建立的时候也导入了这些依赖,同时在这些依赖下也有别的依赖存在,这就是maven依赖传递web

什么是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依赖冲突spring

如何解决Maven依赖冲突?

1.第一声明者优先原则,掉换Maven依赖的顺序,在pom中以先声明的为准。
2.路径近者优先原则,屡次依赖传递中,靠前的依赖优先,以下
<dependencies>
		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        
    </dependencies>

在这里插入图片描述
先声明的spring-webmvc依赖 可是spring-beans的路径更近,因此下面的依赖有效。bash

3 排除依赖
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.0.5.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

在这里插入图片描述
能够发现这时spring-webmvc下的spring-beans依赖没有了mvc

4 版本锁定 (常用)

在pom中使用dependencyManagement进行版本锁定,使用方法以下:(注意dependencyManagement中只是声明使用的版本,不会导入依赖)
当咱们只导入spring-aop时,里面的spring-beans是5.2.8版本的
在这里插入图片描述
加入版本锁定后:maven

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</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>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
    </dependencies>

在这里插入图片描述
spring-beans的版本被锁定在了5.0.5版本svg

帮助到您请点赞关注收藏谢谢!!