碰上了maven依赖冲突,如何解决

maven依赖冲突解决

      • 解决方案
      • maven版本以来的缘由
      • Maven 的依赖仲裁原则
      • IDEA实践
      • 拓展(maven元素含义及注意事项)

解决方案

解决方案: 以idea 操作为例, 打开maven依赖的图,确定要使用的jar的版本,将冲突的jar包给exclude。

maven版本以来的缘由

. 软件工程是多人合作的结果,我们在开发软件的时候经常会使用一些别人编写好的,比较成熟的库。 比如,早期的前端开发用到了 jQuery库,那么通常的做法是去官 下载一个最新版本的
jQuery,然后放在自己本地的项目中。对于简单的前端项目来说,这样可以简单粗暴地达到目的。但当项目越来越庞大,除了 jQuery
之外,你还会依赖一些其他的第三方库。比如 Bootstrap 与 Chosen,这两个流行的前端库也都依赖jQuery,如果这些第三方库依赖的 jQuery 版本一致还好,但大多数情况并没有这么乐观:

所以,你需要在确定依赖之前,就把整个系统的依赖全部梳理一遍,保证每个依赖都不会有冲突问题。

Maven 的依赖仲裁原则

Maven 的依赖仲裁原则如下:
第一原则: 最短路径优先原则。 比如,A 依赖了 B 和 C,而 B 也依赖了 C,那么 Maven 会使用 A 依赖的 C 的版本,因为它的路径是最短的。

IDEA实践

IDEA实践:
打开依赖:

碰上了maven依赖冲突,如何解决

拓展(maven元素含义及注意事项)

在 POM 中,根元素 project 下的 dependencies 可以包含一个或多个 dependency 元素,以声明一个或者多个项目依赖。每个依赖可以包含的元素有:

要想用好 Maven 管理依赖,你必须理解每一项的含义,而新手通常傻傻分不清楚。举个例子,依赖范围这一项,Maven 在不同的时期会使用不同的 classpath :

  • 比如,junit 只有在测试的时候有用,那么将其设为 test scope 就可以;
  • 再比如 ,servlet API 这个 jar 包只需要在编译的时候提供接口,但是实际在运行时会有对应的 servlet 容器提供,所以没必要打到 war 包中去,这时候只需要指定在 provided scope 就可以了。通过指定 provided
    scope 的方式可以让每个依赖各司其职,不用弄成“一锅粥”。
  • 包管理工具还解决了依赖传递的问题,比如你的项目 A 依赖了 B,而 B 依赖了 C 和 D,那么在获取依赖的时候会把 B、C、D 都一起拉下来,这样可以节省大量的时间。

参考博文:https://www.jianshu.com/p/a8a77d6262ed

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树Java概览Maven基础92542 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年5月4日
下一篇 2020年5月4日

相关推荐