依赖冲突:
这个是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使用的依赖会被最后加载
*上述观点均为资料收集后理解结果,并未经过测试!