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元素含义及注意事项)
在 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进行处理,非常感谢!