记一次RocketMQ+Cloud Alibaba版本依赖冲突问题

博主在清理项目依赖时发现RocketMQ存在版本冲突,通过 IDEA 查看依赖及检查 pom 文件未找到原因。经过排查,发现在 spring-cloud-alibaba 的依赖管理中隐藏了版本冲突。最终通过在父工程的依赖管理中覆盖 RocketMQ 版本成功解决问题。
摘要由CSDN通过智能技术生成

背景

  • 最近在梳理项目的第三方依赖
  • 准备清理相关无用依赖,减少依赖jar的数量与大小
  • 此时,同事反馈了一个问题,说在某项目上发现Rocketmq依赖存在多个版本冲突
  • 然后开始确认并调查原因

排查过程

  • 第一步,当然先看下idea里面的依赖情况
  • 果不其然,确实发现明显存在两套rocketmq配套版本
  • 然后去查maven 的 pom文件,全局查找rocketmq关键字
  • 仅在一个全局的common模块中发现一个rocketmq-spring-boot-starter依赖

  • 这里明显可以看到,rocket的版本确实是2.1.1,但为什么到最后打fatjar时打进去的就是2.0.2配套呢?

  • 该死的问题,一下让我陷入了沉思,觉得很不可思议,我都在公共模块中显示指定了版本,怎么还是一个未显示的2.0.2?
  • 然后连蒙带猜的排查排查,查spring-boot-parent、cloud-parent、以及他们的dependency模块,无果
  • 我创建一个当独的,干净的模块,依赖这个common模块
  • 结果打出来的jar里面还是2.0.2,绝望了感觉,不科学
  • 来回折腾,大概查了有3个小时,终于来了灵感
  • 想起了,rocketmq 是谁的?不是阿里开源的?既然不是spring原生家族里的,那应该看看spring cloud alibaba不是吗?
  • 于是打开父工程里的依赖管理,找到spring-cloud-alibaba-dependencies

  • 点进去一块,傻眼了,总算是找到罪魁祸首了!

解决方案

  • 问题总算定位到了,就好解决了
  • 这里试了下几个方案,在父工程中,直接覆盖版本变量,也就是加下面这个内容到properties
<rocketmq.starter.version>2.1.1</rocketmq.starter.version>
  • 不行,不能干预原本依赖的版本,于是再直接在父工程的依赖管理中添加
<!-- mq rocketmq ,此处覆盖 alibaba-dependencies 默认版本 -->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>${rocketmq.starter.version}</version>
</dependency>
  • 最后也就是这一个样子

  • 重新clean package,OK,完美解决,最后可以把common模块里的版本定义也可以去掉了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值