maven 依赖调解 依赖冲突 排除
2015-10-13 11:05
585 查看
情景再现:
项目A依赖于项目B,项目B依赖于项目C(v1), 项目A依赖于项目D,项目D依赖于项目E,项目E依赖于C(v2),
1、A--->B---->C(v1) ,
2、A------>D---->E----->C(v2)
项目A隐形依赖了两个版本的C,那到底采用哪个版本呢?
分析:
依赖调解第一原则:路径优先,很明显,第一种路径深度是3,第二种路径深度是4,所以,maven会采用C(v1)
依赖调解第二原则:声明优先,假设路径深度相等,那么声明在前的会被引用。
让我们继续思考,假设C(v1)、C(v2)版本,项目都不用,而是用C(v3),那么我们就用到了排除,
如下httpcomponent、poi各自排除codec,然后声明项目中需要的codec版本,exclusion只需要声明groupid、artifactid,不需要声明version,因为根据“依赖调解”的原则,一个项目中不可能出现groupid、artifactid相等而version相等的多个依赖。
exclusion,只会排除所在依赖项目中的依赖;就是说,我在httpcomponent声明了排除codec,并不会排除掉poi引用codec,要想poi中也排除,那么在poi中也声明排除
项目A依赖于项目B,项目B依赖于项目C(v1), 项目A依赖于项目D,项目D依赖于项目E,项目E依赖于C(v2),
1、A--->B---->C(v1) ,
2、A------>D---->E----->C(v2)
项目A隐形依赖了两个版本的C,那到底采用哪个版本呢?
分析:
依赖调解第一原则:路径优先,很明显,第一种路径深度是3,第二种路径深度是4,所以,maven会采用C(v1)
依赖调解第二原则:声明优先,假设路径深度相等,那么声明在前的会被引用。
让我们继续思考,假设C(v1)、C(v2)版本,项目都不用,而是用C(v3),那么我们就用到了排除,
如下httpcomponent、poi各自排除codec,然后声明项目中需要的codec版本,exclusion只需要声明groupid、artifactid,不需要声明version,因为根据“依赖调解”的原则,一个项目中不可能出现groupid、artifactid相等而version相等的多个依赖。
exclusion,只会排除所在依赖项目中的依赖;就是说,我在httpcomponent声明了排除codec,并不会排除掉poi引用codec,要想poi中也排除,那么在poi中也声明排除
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4.1</version> <exclusions> <exclusion> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> <exclusions> <exclusion> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency>
相关文章推荐
- maven学习
- maven插件maven-war-plugin的使用
- jenkins------部署项目到jboss eap下
- maven使用经验集
- 使用maven+eclipse搭建struts2开发环境
- maven中下载jar包源码和javadoc的命令介绍
- Maven学习笔记
- Maven for Eclipse
- maven 使用 问题记录
- 《Maven权威指南》学习笔记四_创建一个简单的Maven项目
- 《Maven权威指南》学习笔记十七_一个多模块项目 3ff0
- 《Maven权威指南》学习笔记十八_多模块企业级项目 3ff0
- 《Maven权威指南》学习笔记二十_关于POM
- 近日maven学习概况
- Eclipse Maven Tomcat的利用配置
- (转)Vaadin 使用 Maven
- Maven和Eclipse联合开发
- Maven intall OR Maven build
- JFBlog 1.0 maven版本开源
- 使用Maven开发Android的常见问题