Maven依赖冲突的解决方案

第一种方式:使用父子工程的版本锁定

即父工程并不运行,而是在其pom.xml文件中将需要使用的依赖版本进行限制,然后子工程需要引入依赖时不再指定版本,直接默认使用父工程指定的

父工程:注意


    pom
    
        maven_son
    


    
        
            
                junit
                junit
                4.12
                test
            
        
    

子工程:添加依赖时如果指定了版本号就会覆盖父工程的


        
            junit
            junit
            test
        
    

第二种方式:短路径优先

        即项目的直接依赖和间接依赖中都引入了不同版本的相同依赖,此时项目会选择使用离自己最近的那个依赖(路径最短)

第三种方式:相同路径下声明优先

        即在引入的pom.xml文件中如果声明引入了两个项目jar包,而每个项目jar包中都引入了一个依赖的不同版本,那么此时它就会使用先引入声明jar包中的依赖版本。

第四种方式:同一个配置文件下的最后声明优先

        即在同一个pom.xml文件中直接引入了同一个依赖的不同版本,那么Maven就会选择最后的一个版本。

第五种方式:被调用的jar包中可设置依赖是否可被传递——可选依赖

        如果一个jar包被引入到其他项目中,本来该jar包应该被其他项目所当作间接依赖的,但如果不想被当作间接依赖,这个jar包就可以通过对依赖设置true标签来让这个依赖不被看到

第六种方式:防止其他项目中的依赖对当前项目造成影响——排除依赖

        即在引入一个项目jar包依赖时使用标签排除掉该jar包一些依赖的引入。

总结

 1. 当有父子工程时可以进行版本的控制,没有父子工程时,Maven就会根据就近原则为当前项目使用依赖,而如果路径长短相同,则会优先引入先声明的间接依赖。如果是同时在一个pom.xml文件中引入了同依赖的不同版本,这时就会取最后一个,相当于后来的会覆盖前面的。

2. 最后是一个依赖是否可看见,如果自己不想把依赖给别人,那就使用可选依赖。如果是自己不想用别人的依赖,那就使用排除依赖。

        

你可能感兴趣的:(maven,java,前端)