maven依赖传递和冲突解决

1. 传递依赖:A依赖于B,而B依赖于C,那么C就可以称为A的传递依赖。
        * 例如:项目依赖于struts的jar包,而struts又依赖xwork的jar包,并且xwork这些jar包也出现在了项目中,这种现象称为传递依赖。
    
    2. 传递依赖冲突
        * 使用maven创建web项目,引入struts-spring-plugin的插件坐标,再引入spring-context的坐标,会发现这个jar包都依赖了spring-beans的jar包
        * spring-beans的版本不同,这个时候就产生了传递依赖冲突。
    
    3. 解决传递依赖冲突
        * 第一种方式:maven自己调节原则
            * 第一声明者优先原则:谁先传递依赖进来的使用谁的传递依赖。
                * 效果如下
                    <dependency>
                        <groupId>org.apache.struts</groupId>
                        <artifactId>struts2-spring-plugin</artifactId>
                        <version>2.3.24.1</version>
                    </dependency>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-context</artifactId>
                        <version>4.2.4.RELEASE</version>
                    </dependency>
            
            * 路径近者优先原则:如果自己导入了依赖,那么就使用自己的依赖,不会使用传递依赖。
                * 效果如下
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-beans</artifactId>
                        <version>4.2.4.RELEASE</version>
                    </dependency>
        
        * 第二种方式:排除依赖
            * 打开pom.xml --> 选择dependency hierarchy --> 在要排除依赖的jar包上右键 --> 选择excude maven artifact --> 点击OK
                * 效果如下
                    <dependency>
                        <groupId>org.apache.struts</groupId>
                        <artifactId>struts2-spring-plugin</artifactId>
                        <version>2.3.24.1</version>
                        <exclusions>
                            <exclusion>
                                <artifactId>spring-beans</artifactId>
                                <groupId>org.springframework</groupId>
                            </exclusion>
                        </exclusions>
                    </dependency>
        
        * 第三种方式:版本锁定(推荐使用的方式)    
            * 在pom的配置文件配置版本锁定,效果如下
                <dependencyManagement>
                    <dependencies>
                        <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-beans</artifactId>
                            <version>4.2.4.RELEASE</version>
                        </dependency>
                    </dependencies>
                </dependencyManagement>
            
            * 在版本锁定的基础上,可以定义常量,锁定版本,下面都可以引用该常量。    
                <!-- 定义版本常量 -->
                <properties>
                    <!-- 标签自定义的 -->
                    <spring-version>4.2.4.RELEASE</spring-version>
                </properties>
                
                <!-- 版本锁定 -->
                <dependencyManagement>
                    <dependencies>
                        <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-beans</artifactId>
                            <version>${spring-version}</version>
                        </dependency>
                    </dependencies>
                </dependencyManagement>
        
        * 注意:版本锁定只是锁定了版本,没有导入依赖。导入依赖必须要使用<dependency>标签来导入。    
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值