maven依赖管理中冲突调解及重复类的类加载顺序
2015-05-13 09:42
260 查看
依赖冲突:
这个是dependency的GA一样但V不同,Maven自2.9(还是2.0.9,不清楚了)开始为了确保确定性,采用如下方法解决:
1. 依赖路径浅的优先:
假设,A->B->slf4j:1.6.2,A->C->E->slf4j:1.4.1,则slf4j:1.6.2优先
2. 声明优先,如果在dependencyManagement中声明的话会优先采用对应插件
3. 覆写优先,子POM内声明的优先于父POM中的依赖
*上述的依赖均假定为compile依赖
********************************************************************************************************
重复类的类加载:
同样是2.9还是2.0.9开始,Maven在classpath中下了一点功夫,由于各个容器对类加载规则的不一,所以以下仅讨论对Eclipse的类路径影响。
现在,由Maven插件向Eclipse提供的类路径是有顺序的,以当前工程为原点,加载顺序为:
1. 首先加载test-class,这个m2eclipse的jira上显示为fixed的一个issue:http://jira.codehaus.org/browse/MECLIPSE-318
2. 当前POM的依赖,顺序按照pom.xml内使用的顺序(由上至下,靠上优先加载)
3. 父POM使用的依赖会被最后加载
*上述观点均为资料收集后理解结果,并未经过测试!
这个是dependency的GA一样但V不同,Maven自2.9(还是2.0.9,不清楚了)开始为了确保确定性,采用如下方法解决:
1. 依赖路径浅的优先:
假设,A->B->slf4j:1.6.2,A->C->E->slf4j:1.4.1,则slf4j:1.6.2优先
2. 声明优先,如果在dependencyManagement中声明的话会优先采用对应插件
3. 覆写优先,子POM内声明的优先于父POM中的依赖
*上述的依赖均假定为compile依赖
********************************************************************************************************
重复类的类加载:
同样是2.9还是2.0.9开始,Maven在classpath中下了一点功夫,由于各个容器对类加载规则的不一,所以以下仅讨论对Eclipse的类路径影响。
现在,由Maven插件向Eclipse提供的类路径是有顺序的,以当前工程为原点,加载顺序为:
1. 首先加载test-class,这个m2eclipse的jira上显示为fixed的一个issue:http://jira.codehaus.org/browse/MECLIPSE-318
2. 当前POM的依赖,顺序按照pom.xml内使用的顺序(由上至下,靠上优先加载)
3. 父POM使用的依赖会被最后加载
*上述观点均为资料收集后理解结果,并未经过测试!
相关文章推荐
- Maven依赖管理中冲突调解及重复类的类加载顺序
- maven解决重复依赖版本冲突问题
- maven 依赖调解 依赖冲突 排除
- 用maven工具解决jar包冲突问题或重复加载问题
- 使用maven管理依赖,spring版本冲突解决 java.lang.NoSuchMethodError: org.springframework.core.GenericTypeResolver.r
- maven冲突管理及依赖管理实践
- 利用maven工具解决jar包冲突问题或重复加载问题
- maven项目管理之-08-依赖冲突
- 项目管理利器(Maven)——依赖冲突
- Maven管理项目依赖-依赖冲突快速处理
- 利用maven工具解决jar包冲突问题或重复加载问题
- Maven依赖调解、 可选依赖、 依赖冲突 排除、 归类依赖、优化依赖
- spring3的一个报错,原因是maven依赖包冲突,有重复的依赖。
- Maven里Xerces依赖冲突导致Spring加载xml出错
- 在Intellij IDEA 中自动加载Maven管理的依赖包的源码
- Maven依赖冲突处理
- maven项目加载本地依赖jar文件
- idea 中maven依赖加载失败
- Maven依赖调解
- Maven的依赖管理