学习笔记——Maven 如何处理传递性依赖
2014-07-23 16:38
183 查看
maven引入的传递性依赖机制,一方面大大简化和方便了依赖声明,另一方面,大部分情况下我们只需要关心项目的直接依赖是什么,而不用考虑这些直接依赖会引入什么传递性依赖。但有时候,当传递性依赖造成问题的时候,我们就需要清楚地知道该传递性依赖是从哪条依赖路径引入的。
例如,项目A有这样的依赖关系 : A-->B-->C-->X(1.0)、A-->D-->X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版 本的X,那么哪个X会被maven解析使用呢?两个版本都被解析显然是不对的,因为那会造成依赖重复,因此必须选择一个。maven依赖调解的第一原则:路径最近者优先。该例中X(1.0)的路径长度为3,而X(2.0)的路径长度为2,因此X(2.0)会被解析使用。
依赖调解第一原则不能解决所有问题,比如这样的依赖关系:A-->B-->Y(1.0),A-->C-->Y(2.0),Y(1.0)和Y(2.0)的依赖路径长度是一样的,都为2。那么到底谁会被解析使用呢?在maven2.0.8及之前的版本中,这是不确定的,但是maven2.0.9开始,为了尽可能避免构建的不确定性,maven定义了依赖调解的第二原则:第一声明者优先。在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被解析使用。顺序最靠前的那个依赖优胜。
例如,项目A有这样的依赖关系 : A-->B-->C-->X(1.0)、A-->D-->X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版 本的X,那么哪个X会被maven解析使用呢?两个版本都被解析显然是不对的,因为那会造成依赖重复,因此必须选择一个。maven依赖调解的第一原则:路径最近者优先。该例中X(1.0)的路径长度为3,而X(2.0)的路径长度为2,因此X(2.0)会被解析使用。
依赖调解第一原则不能解决所有问题,比如这样的依赖关系:A-->B-->Y(1.0),A-->C-->Y(2.0),Y(1.0)和Y(2.0)的依赖路径长度是一样的,都为2。那么到底谁会被解析使用呢?在maven2.0.8及之前的版本中,这是不确定的,但是maven2.0.9开始,为了尽可能避免构建的不确定性,maven定义了依赖调解的第二原则:第一声明者优先。在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被解析使用。顺序最靠前的那个依赖优胜。
相关文章推荐
- 学习笔记——Maven 如何处理传递性依赖
- Maven学习笔记十二:Maven坐标和依赖(传递性依赖)
- Maven 如何处理传递性依赖
- Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(报表登录处理)
- 【hadoop】Hadoop学习笔记(八):如何使用Maven构建《hadoop权威指南3》随书的源码包
- 学习Altas 笔记[js调用重载的方法出错,如何处理]
- Android(java)学习笔记82:我们到底该如何处理异常?
- AJAX 学习笔记[五] AJAX 如何处理多个异步请求
- [设计模式学习笔记][之四]如何处理变化的需求?
- [Maven学习笔记四]Maven依赖特性
- Maven学习笔记十六:Maven坐标和依赖(最佳实践之归类依赖)
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
- struts2学习笔记--struts2中如何处理properties文件中的占位符{0}
- seaJs学习笔记之如何依赖模块
- servlet学习笔记--如何处理cookies
- Struts学习笔记之如何处理没有勾选的checkbox
- maven 学习笔记一 (坐标和依赖)
- Maven学习笔记九:Maven坐标和依赖(坐标详解)
- Maven学习笔记十:Maven坐标和依赖(依赖的配置)
- 学习Altas 笔记[js调用重载的方法出错,如何处理]