maven加载策略
Posted 算法技术猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven加载策略相关的知识,希望对你有一定的参考价值。
1、maven依赖传递:项目A在pom.xml中依赖jar B,而jar B的pom.xml文件中又依赖了jar C,当加载项目A时,会一次将B、C两个jar都加载进去
2、maven加载jar策略:最短路径优先策略、最先声明优先策略;
最短路径优先策略:两个不同的jar都引入了同一个jar D的不同版本。如E->F->D2 和 A->B->C->D1,maven会选择最短路径的D版本,即D2版本进行加载
最先声明优先策略:如果路径一直的情况下,如A->B->C1 和 E->F->C2,pom中先引入了A,在引入了E,按照最先声明优先策略,只会加载C1,而不会加载C2
3、解决jar冲突:通过 mvn denpendency:tree 命令可查看jar依赖树结构;可根据maven加载jar的策略解决jar冲突,如可在父module中的dependencyManagement中定义所有子module中需要依赖的jar,并制定版本号,然后子module中直接引用;
如spring-boot-starter-data-redis中引入了jackson-databind-2.9.7,spring-data-commons引入了jackson-databind-2.9.6,现在需要将jackson-databind升级到jackson-databind-2.9.9.1版本,只需要在父module声明jackson-databind-2.9.9.1版本,然后在子module中的最前面引入jackson-databind,即将jackson-databind升级到2.9.9.1版本,按照最先声明优先原则及路径最短优先策略,pom加载时,就会只加载jackson-databind-2.9.9.1版本
父module:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9.1</version>
</dependency>
</dependencies>
</dependencyManagement>
子module:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
以上是关于maven加载策略的主要内容,如果未能解决你的问题,请参考以下文章