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:

 
   
   
 
  1. <dependencyManagement>

  2. <dependencies>

  3. <dependency>

  4. <groupId>com.fasterxml.jackson.core</groupId>

  5. <artifactId>jackson-databind</artifactId>

  6. <version>2.9.9.1</version>

  7. </dependency>

  8. </dependencies>

  9. </dependencyManagement>

子module:

 
   
   
 
  1. <dependencies>

  2. <dependency>

  3. <groupId>com.fasterxml.jackson.core</groupId>

  4. <artifactId>jackson-databind</artifactId>

  5. </dependency>

  6. </dependencies>



以上是关于maven加载策略的主要内容,如果未能解决你的问题,请参考以下文章

Android Picasso图片加载库源码剖析

Android Picasso图片加载库源码剖析

是否可以在OnStop()上回收所有数据并使用保留片段?

c_cpp 加载源图像固定用法(代码片段,不全)

分享前端开发常用代码片段

收藏|分享前端开发常用代码片段