java maven聚合项目-子项目重写父项目的依赖版本无法生效

前言

项目的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 !!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泽众云真机-机型支持ADB调试功能即将上线

最近云真机平台在线客服&#xff0c;收到很多咨询关于ADB调试功能&#xff0c;什么时候能更新&#xff1f;据小编所知&#xff0c;正在升级之中&#xff0c;有一块专门为了解决ADB调试功能提前准备&#xff0c;升级网络硬件设备&#xff0c;目前平台的功能已开发完成&#xff0…

#QT(一种朴素的计算器实现方法)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;这是全靠自己想法写的计算器&#xff0c;没有参考任何教程。 &#xff08;1&#xff09;这个计算器只要有运算符敲入就会进行一次运算&#xff0c;所以他没有先后之后&#xff0c;无法满足运算优先级。 &#xff08;2&#xff…

[Redis]——Redis持久化的两种方式RDB、AOF

目录 RDB快照模式 概念&#xff1a; 触发时机&#xff1a; 异步做快照 AOF追加模式 概念&#xff1a; 触发时机&#xff1a; bgrewriteaof命令&#xff1a; 比较两种模式&#xff1a; RDB快照模式 概念&#xff1a; RDB模式就是保存当前Redis的状态到本地磁盘文件&am…

kubeadm部署Kubernetes(k8s) 1.23.0高可用集群

Kubernetes介绍 kubernetes(k8s)是2015年由Google公司基于Go语言编写的一款开源的容器集群编排系统,用于自动化容器的部署、扩缩容和管理; kubernetes(k8s)是基于Google内部的Borg系统的特征开发的一个版本,集成了Borg系统大部分优势; 官方地址:https://Kubernetes…

AttributeError: cannot assign module before Module.__init__() call

原因 调用了自定义的类&#xff0c;但是在自定义的类的__init__函数下面没有写super( XXX, self ).init() 错误案例 import torch import torch.nn as nnclass SelfAttention(nn.Module):""" Self-Attention """def __init__(self, n_head, d…

HTML5打开本地app应用的方法

大家好我是咕噜美乐蒂&#xff0c;很高兴又和大家见面了&#xff01; 打开本地应用程序是一种常见的需求&#xff0c;特别是在Web应用程序需要与本地设备或应用程序进行交互时。HTML5并不直接支持通过Web页面直接打开本地应用程序&#xff0c;但可以通过一些间接的方式实现这一…

【vue.js】文档解读【day 4】 | 事件处理

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 文章目录 事件处理前言监听事件内联事件处理器方法事件处理器方法与内联事件判断在内联处理器中调用方法在内联事件处理器中访问事件参数修饰符事件修饰符按键修饰符常规按键别名系统按键别名组合按键ex…

3d场景重建图像渲染 | 神经辐射场NeRF(Neural Radiance Fields)

神经辐射场NeRF&#xff08;Neural Radiance Fields&#xff09; 概念 NeRF&#xff08;Neural Radiance Fields&#xff0c;神经辐射场&#xff09;是一种用于3D场景重建和图像渲染的深度学习方法。它由Ben Mildenhall等人在2020年的论文《NeRF: Representing Scenes as Neur…

TVM_深度学习编译器

TVM_深度学习编译器 TVM所做的是要比传统compiler更偏上层的&#xff0c;你可以把它理解成source-to-source compiler&#xff0c;需要其他的后端(backend)来生成最后的指令。比如当编译的Target是Intel CPU时&#xff0c;翻译的顺序是Relay IR -> TVM IR/ Halide IR ->…

一、C#冒泡排序算法

一、C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法&#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大&#xff08;或最小&#xff09;的元素逐步"冒泡"到数列的末尾。 实现原理 冒泡排序是一种简单的排序算法&#xff0c;其…

CSS Module

CSS Module的作用&#xff1a;将CSS样式作用域限制在特定的组件范围内&#xff0c;以避免全局样式污染和命名冲突。 Vue中如何实现样式模块…

【TB作品】MSP430单片机,音乐播放器,四首音乐,八音盒,Proteus仿真

文章目录 题目要求仿真结果实验报告&#xff1a;基于MSP430单片机的八音盒设计实验目的实验设备实验原理总结 代码和仿真图 题目要求 八音盒 本设计利用MSP430单片机结合内部定时器及LED/LCD,设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。 基本要求: 使用LED/LCD显示器…

JAVA基础:数组、重载、数据类型、封装、字符串、静态、继承、重写、多态、代码块、权限、接口、内部类

1 数组 //静态初始化 int[] arr1new int[]{1,2,3,4} //简化形式 int[] arr2{1,2,3,4} //动态初始化 int[] arr3new int[5] 2 方法重载 在同一个类中的多个方法的方法名相同,参数个数不同&#xff0c;参数类型不同&#xff0c;参数类型顺序不同 public class Test1 {public …

【javaWeb】在webapp中手动发布一个应用

标题 &#x1f432;一、为什么要在webapp中手动发布一个应用&#x1f389;二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 &#x1f432;一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

2.24计组碎片

op(a1)说的是对a1存的数&#xff0c;即&#xff08;a1)&#xff0c;进行op操作 访存说的是访问、读写主存&#xff0c;如果是写在寄存器上&#xff0c;就不需要访存 对于C就是说&#xff0c;如果是1100-1110的话&#xff0c;就可以对应取到0000-1111&#xff0c;如果是下面那个…

css性能优化的方法?

CSS 优化在网页性能和用户体验中起着重要作用。以下是一些常见的 CSS 优化方法&#xff1a; 合并和压缩CSS文件&#xff1a; 将多个 CSS 文件合并为一个文件&#xff0c;并对其进行压缩&#xff0c;可以减少 HTTP 请求次数和文件大小&#xff0c;加快页面加载速度。 使用CSS预处…

全面解析 LoRA、QLoRA、RLHF,PPO,DPO,Flash Attention、增量学习等大模型算法

随着大模型的飞速发展&#xff0c;在短短一年间就有了大幅度的技术迭代更新&#xff0c;从LoRA、QLoRA、AdaLoRa、ZeroQuant、Flash Attention、KTO、蒸馏技术到模型增量学习、数据处理、新的开源模型的理解等&#xff0c;几乎每天都有新的发展。 作为算法工程师&#xff0c;面…

【Linux】文本替换Ubuntu 中 sed 指令的使用指南

没什么 大愿望 没有什么事 要赶 看见路口红灯 一直闪 它像 眨眼的小太阳 乌云还 挺大胆 顶在头上 吹不散 我抓在手里 捏成棉花糖 什么烦恼 不能忘 既然 是路一定有转弯 哪个风景 都漂亮 &#x1f3b5; 周深《小美满》 在 Ubuntu&#xff08;或其他类 Unix…

09.JavaScript中的深浅拷贝和异常处理

一、深浅拷贝 1.浅拷贝 首先浅拷贝和深拷贝只针对引用类型 浅拷贝&#xff1a;拷贝的是地址 常见方法&#xff1a; 拷贝对象&#xff1a;Object.assgin() / 展开运算符 {…obj} 拷贝对象拷贝数组&#xff1a;Array.prototype.concat() 或者 […arr] 如果是简单数据类型拷贝…

pdfgear:免费易用的pdf处理软件,轻松进行pdf文件转换、阅读、编辑等

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍①pdfgear②核心功能③PDFgear的优势二、下载安装①下载②安装三、使用方法①阅读②pdf编辑③pdf转换四、总结