- Maven的传递依赖
1.1什么是传递依赖
当A 依赖B、B依赖C,在A中导入B后会自动导入C,C是A的传递依赖,如果C依赖D则D也可能是A的传递依赖。
1.2依赖版本冲突解决
1.2.1什么是依赖版本冲突
当一个项目依赖的构件比较多时,它们相互之前存在依赖,当你需要对依赖版本统一管理时如果让maven自动来处理可能并不能如你所愿。
1.2.2依赖调解原则
maven自动按照下边的原则调解:
1、路径近者优先原则
例如:A依赖 spirng-beans-4.2.4,A依赖B依赖 spirng-beans-3.0.5,则spring-beans-4.2.4优先被依赖在A中,因为spring-beans-4.2.4相对spirng-beans-3.0.5被A依赖的路径最近。
2、第一声明者优先原则
如果路径相同在pom文件定义依赖,先声明的依赖为准。
1.2.3排除依赖
依赖版本冲突的问题可以通过排除依赖的方式来解决,将传递依赖中不合理的依赖排除,使用合理的依赖来构建我们的工程。
排除依赖可以在依赖的配置dependency中使用exclusion标签来进行排除操作。
1.2.4锁定版本
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。锁定依赖的版本可以使用dependencyManagement标签来设置。
需要注意的是在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程需要添加锁定版本的依赖则需要单独添加<dependencies></dependencies>标签。