maven导入jar包冲突的三种解决方法

maven导入jar包冲突的三种解决方法

直接依赖:A项目中导入了B包,我们可以说A项目直接依赖于B
传递依赖:A项目中导入了B包,B包直接依赖于C包,最终A项目也可以使用C包,那么我们可以说A项目传递依赖于C

解决jar包冲突的三个原则

一:第一声明原则

二:路径优先原则

三:直接排除法

一:第一声明原则(哪个jar包的坐标在靠上的位置,哪个就是第一声明,最终进入项目的就是哪个包的依赖包)

我们添加依赖


        
            org.springframework
            spring-beans
            4.2.5.RELEASE
        

        
            org.springframework
            spring-context
            4.2.8.RELEASE
        
    

这时我们发现spring-core的版本为4.2.5,虽然spring-context下面的spring-aop下也有spring-core,但是因为我们配置的spring-beans在上面,所以会有限选择spring-beans下面的spring-core的版本
maven导入jar包冲突的三种解决方法_第1张图片

二:路径优先原则(直接依赖比传递依赖路径近,哪个路径近,进入到项目的就是哪个的依赖包)

现在我们直接导入spring-core包的坐标,版本为4.3.6


        
            org.springframework
            spring-beans
            4.2.5.RELEASE
        

        
            org.springframework
            spring-context
            4.2.8.RELEASE
        

        
            org.springframework
            spring-core
            4.3.6.RELEASE
        
    

这时我们发现spring-core的版本变成了4.3.6
maven导入jar包冲突的三种解决方法_第2张图片

三:直接排除法(用exclusion标签直接排除某个包下的依赖包)

现在我们将spring-core核心包的坐标删除,只保留spring-beans与spring-context,根据第一声明原则,spring-core显示的版本应该为4.2.5
但是我们在spring-beans中添加手动排除


        
            org.springframework
            spring-beans
            4.2.5.RELEASE
            
                
                    org.springframework
                    spring-core
                
            
        

        
            org.springframework
            spring-context
            4.2.8.RELEASE
        

    

这时我们发现spring-core版本变成了4.2.8
maven导入jar包冲突的三种解决方法_第3张图片

你可能感兴趣的:(maven,jar包冲突)