如何处理maven的依赖冲突?

大家好,我是IT修真院上海分院第2期的学员蒋新益,一枚正直纯洁善良的JAVA程序员

今天给大家分享一下,修真院官网JAVA任务七,深度思考中的知识点——如何处理maven的依赖冲突?

1.背景介绍

有人认为Maven是一个依赖管理工具,当然这种想法是错误的(确切的说Maven是一个项目管理工具,贯穿了整个项目生命周期,编译,测试,打 包,发布…),但Maven给人造成这种错误的印象也是有原因的,因为Maven的依赖管理十分强大,用好了Maven,你不再需要面对一大堆jar 感到头大,依赖冲突,无用依赖等问题也能够得到有效的防止和解决。

2.知识剖析

maven在依赖管理中有以下几个原则

依赖是使用Maven坐标来定位的,而Maven坐标主要由GAV(groupId, artifactId, version)构成。如果两个相同的依赖包,如果groupId, artifactId, version不同,那么maven也认为这两个是不同的。

依赖会传递,A依赖了B,B依赖了C,那么A的依赖中就会出现B和C。

Maven对同一个groupId, artifactId的冲突仲裁,不是以version越大越保留,而是依赖路径越短越优先,然后进行保留。

依赖的scope会影响依赖的影响范围。

3.常见问题

怎么解决依赖冲突

4.解决方案

以idea为例,在打开的pom.xml文件上右键Diagrams–Show Dependencies,就可以看到了。

5.编码实战

6.扩展思考

随着项目的增大,你的依赖越来越多,比如说你依赖了一堆spring的jar,有 org.spring.framework:spring-core, org.spring.framework:beans, org.spring.framework:spring-web, org.spring.framework:spring-mock。它们的groupId是相同的,artifactId不同。为了管理其版本,你对它 们进行过统一的升级,逐个的将version改成了最新版。但是,显然,当POM很大的时候你说不定会犯错误,而当版本不一致的时候,一些诡异的兼容性问 题就可能出现。

我们可以定义一个Maven属性,其名称为spring.version,值为4.1.3。在这个POM中,我们就能 用${spring.version}的方式来引用该属性。我们看到,所有spring相关的依赖的version元素现在都成 了${spring.version},当Maven运行的时候,它会自动用值4.1.3来替换这个引用。

如果没有idea,我们怎么查看依赖关系

mvn dependency:tree

7.参考文献

参考一:maven 依赖调解 依赖冲突 排除

参考二:maven scope含义的说明

参考三:Maven依赖管理

参考四:如何快速的解决Maven依赖冲突

8.更多讨论

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

作者:蒋新益

链接:http://www.jnshu.com/login/1/15188308

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    原文作者:深夏夏夏夏
    原文地址: https://www.jianshu.com/p/d828766786d4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞