您的位置:首页 > 其它

maven依赖传递和冲突解决

2017-12-02 15:21 344 查看
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>标签来导入。    
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  maven