依赖冲突的产生
如果添加两个依赖,如下图:
会发现这两个jar包同时都依赖了Spring-beans
希望spring-beans-4.2.4加入工程,发现spring-beans-3.0.5也加入到了工程,这就造成了依赖冲突了。
依赖调节原则
mave 自动按照下边的原则调解:
第一声明优先原则
在pom文件定义依赖,先声明的为准
测试:
如果将上边的struts-spring-plugins和sping-context顺序颠倒,系统将导入spring-beans-4.2.4。
分析:
由于spring-context 在前边以spring-context依赖的spring-beans-4.2.4为准,所以最终spring-beans-4.2.4添加到了工程中。
路径近者优先原则
例如:A依赖spring-beans-4.2.4,A依赖B依赖spring-beans-3.0.5,则spring-beans-4.2.4优先被依赖在A中,因为spring-beans-4.2.4相对于spring-beans-3.0.5被A依赖的路径最近。
测试:
在本工程的pom中加入spring-beans-4.2.4的依赖,根据路径有限原则,系统将导入spring-beans-4.2.4:
排除依赖
上边的问题可以通过排除依赖方法辅助调解,如下:
比如在依赖struts2-spring-plugin的设置中添加了排除依赖,排除spring-beans,下边的配置表示:依赖struts2-spring-plugin,但排除struts2-spring-plugin所依赖的spring-beans。
锁定版本(企业开发中常用方法)
版本锁定后不考虑声明的顺序或依赖的路径,如下:
注意:在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程中需要添加锁定版本的依赖则需要单独添加< dependencies></ dependencies>标签,如下: