前言
项目的springboot版本2.6.13
项目主pom 引入了springboot的依赖配置
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
用途 可以方便管理springboot的组件的依赖版本
问题
由于是多个module结构 由于项目的主pom声明了springboot的依赖版本
那么子项目在引入jar时 如果spring-boot-dependencies的pom中包含此依赖 就自动引入spring-boot-dependencies的pom中定义的依赖版本
现在 子项目中引入 spring-kafka 由于spring-boot-dependencies 包含了spring-kafka 然后自动给引入了 如下版本
<!-- spring-boot-dependencies 中定义的spring-kafka版本 -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.8.10</version>
</dependency>
因为这个版本过于旧 想更新为3.1.1 于是在子项目的依赖中更新为3.1.1
子项目的pom
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>3.1.1</version>
</dependency>
然后刷新依赖树 本来以为生效了 但是 使用测试类测试 一直提示 使用的kafkaTemplate的方法不存在,
排查
- 再次刷新依赖树 依赖有问题
- 强制更新项目的依赖 仍然有问题
然后。。。。。 - 猜测可能依赖还是有问题
- 最后使用终端查看依赖树 发现版本还是使用的 2.8.10
那有问题也可以理解了
然后开始漫长的寻找解决办法。。。
解决办法
因为项目的顶级pom已经在依赖管理中导入 spring-boot-dependencies pom 所以子类的项目要想重写这个依赖 只能在定义一个 依赖管理 并且指定 spring-kafka的版本
操作如下父pom内容不变
在子项目中增加依赖管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
</dependencyManagement>
这样的话 就达到了 重写父类中引入的spring-boot-dependencies pom 中依赖管理定义的 spring-kafka 的版本
这种简单的maven 项目就算结束了
可碰巧今天目录结构有点复杂
说明:
红框的那个项目是根pom 其中定义了 spring-boot-dependencies pom
infrastructure 集成了spring-kafka 并想使用新的版本
app 依赖infrastructure
adaptor依赖 app
biz里 包含 app infrastructure adaptor
这个infrastructure pom中定义了 依赖管理 并定义了新版本的spring-kafka
项目测试依然报错,然后在次依赖管理
发现 infrastructure 中依赖的spring-kakfa已经成了3.1.1
但是在app和adaptor中依赖的spring-kakfa还是2.8的版本
想这还是依赖重写问题 于是将 spring-kafka 依赖管理 移动到了 他们的父项目里 biz
然后刷新依赖 这次测试正常了。
总结
- 简单的module项目 直接在子 pom重新 定义 依赖管理并覆盖需要替换版本的依赖
- 例如说 多个module间存在依赖的项目 要在其 公用的 父pom中定义 依赖管理并覆盖需要替换版本的依赖‘
the end !!!
good day !!!