依赖冲突:
这个是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从2.9版本开始,在解决依赖冲突和改进类加载机制上的策略。包括优先级规则、声明优先级、覆写优先级等,以及在Eclipse环境下类路径的加载顺序。
1055

被折叠的 条评论
为什么被折叠?



