当前位置: 首页 > news >正文

记录 Maven 版本覆盖 Bug 的解决过程

背景

在使用 Maven 进行项目管理时,依赖版本的管理是一个常见且重要的环节。最近,在我的项目中遇到了一个关于依赖版本覆盖的 Bug,这个问题导致了 Apollo 框架的版本不一致,影响了项目的正常运行。以下是我解决这个问题的过程记录。

问题描述

在项目的父 pom.xml 中,引入了 Apollo 的依赖,版本为 3.0.5。然而,在我的子模块的 pom.xml 中定义了一个 <apollo.version>2.2.1</apollo.version>。在执行 Maven 构建时,最终引入的 Apollo 版本却是 2.2.1,而非父级指定的 3.0.5。这导致了与 Apollo 相关的功能出现异常。

问题分析

通过排查发现,Maven 的依赖管理机制遵循“最近优先”的原则,即如果在子模块中定义了某个依赖的版本,它会覆盖父 pom.xml 中定义的版本。这意味着子模块中指定的 2.2.1 版本会取代父模块中的 3.0.5

解决方案

方法一:删除子模块中的版本定义

最直接的解决方案是删除子模块 pom.xml 中的 Apollo 版本定义,让 Maven 使用父模块中定义的版本。具体步骤如下:

  1. 打开子模块的 pom.xml 文件。
  2. 找到 <apollo.version> 的定义,并将其删除。
<properties><!-- <apollo.version>2.2.1</apollo.version> --> <!-- 删除这一行 -->
</properties>

方法二:统一版本

如果需要使用特定版本的 Apollo,可以在子模块中修改版本为父模块中的版本:

<properties><apollo.version>3.0.5</apollo.version>
</properties>

方法三:使用依赖管理

如果项目中有多个子模块,且需要统一管理依赖版本,可以考虑在父 pom.xml 中使用 <dependencyManagement> 标签来管理版本:

<dependencyManagement><dependencies><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-core</artifactId><version>3.0.5</version></dependency></dependencies>
</dependencyManagement>

结论

通过这次问题的解决,我更加深入地理解了 Maven 依赖管理的机制。在项目开发中,合理地管理依赖版本能够有效避免此类问题的发生。希望这篇记录能帮助到其他开发者,减少类似的困扰。


如需更多信息或讨论,欢迎在评论区留言!

相关文章:

记录 Maven 版本覆盖 Bug 的解决过程

背景 在使用 Maven 进行项目管理时&#xff0c;依赖版本的管理是一个常见且重要的环节。最近&#xff0c;在我的项目中遇到了一个关于依赖版本覆盖的 Bug&#xff0c;这个问题导致了 Apollo 框架的版本不一致&#xff0c;影响了项目的正常运行。以下是我解决这个问题的过程记录…...

【K8S系列】Kubernetes Service 基础知识 详细介绍

在 Kubernetes 中&#xff0c;Service 是一种抽象的资源&#xff0c;用于定义一组 Pod 的访问策略。它为这些 Pod 提供了一个稳定的访问入口&#xff0c;解决了 Pod 可能频繁变化的问题。本文将详细介绍 Kubernetes Service 的类型、功能、使用场景、DNS 和负载均衡等方面。 1.…...

python在物联网领域的数据应用分析与实战!

引言 物联网(IoT)是一个快速发展的领域,涉及到各种设备和传感器的连接与数据交换。随着设备数量的激增,数据的产生速度也在不断加快。 如何有效地分析和利用这些数据,成为了物联网应用成功的关键。Python作为一种强大的编程语言,因其简洁易用的特性和丰富的库支持,成为…...

目标跟踪算法-卡尔曼滤波详解

卡尔曼滤波是一种递归的优化算法&#xff0c;用于估计一个系统的动态状态&#xff0c;常用于跟踪、导航、时间序列分析等领域。它的关键在于使用一系列测量数据&#xff08;通常含噪声&#xff09;来估计系统的真实状态&#xff0c;使得估计值更接近实际情况。卡尔曼滤波器适合…...

SpringBoot后端开发常用工具详细介绍——application多环境配置与切换

文章目录 引言介绍application.yml&#xff08;主配置文件&#xff09;application-dev.yml&#xff08;开发环境配置&#xff09;application-test.yml&#xff08;测试环境配置&#xff09;application-prod.yml&#xff08;生产环境配置&#xff09;激活配置文件参考内容 引…...

php反序列化漏洞典型例题

1.靶场环境 ctfhub-技能树-pklovecloud 引用题目&#xff1a; 2021-第五空间智能安全大赛-Web-pklovecloud 2.过程 2.1源代码 启动靶场环境&#xff0c;访问靶场环境&#xff0c;显示源码&#xff1a;直接贴在下面&#xff1a; <?php include flag.php; class pks…...

浅析Android View绘制过程中的Surface

前言 在《浅析Android中View的测量布局流程》中我们对VSYNC信号到达App进程之后开启的View布局过程进行了分析&#xff0c;经过对整个App界面的View树进行遍历完成了测量和布局&#xff0c;确定了View的大小以及在屏幕中所处的位置。但是&#xff0c;如果想让用户在屏幕上看到…...

基于卷积神经网络的大豆种子缺陷识别系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 大豆种子缺陷识别系统&#xff0c;卷积神经网络&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神…...

HarmonyOS项目开发一多简介

目录 一、布局能力概述 二、自适应布局 三、响应式布局 四、典型布局场景 一、布局能力概述 布局决定页面元素排布及显示&#xff1a;在页面设计及开发中&#xff0c;布局能力至关重要&#xff0c;主要通过组件结构来确定使用何种布局。 自适应布局与响应式布局&#xff1…...

C++基础三

构造函数 构造函数(初始化类成员变量)&#xff1a; 1、属于类的成员函数之一 2、构造函数没有返回类型 3、构造函数的函数名必须与类名相同 4、构造函数不允许手动调用(不能通过类对象调用) 5、构造函数在类对象创建时会被自动调用 6、如果没有显示声…...

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛:台风预测与分析

利用ChatGPT完成2024年MathorCup大数据挑战赛-赛道A初赛&#xff1a;台风预测与分析 引言 在2024年MathorCup大数据挑战赛中&#xff0c;赛道A聚焦于气象数据分析&#xff0c;特别是台风的生成、路径预测、和降水风速特性等内容。本次比赛的任务主要是建立一个分类评价模型&…...

Linux系统操作篇 one -文件指令及文件知识铺垫

Linux操作系统入门-系统篇 前言 Linux操作系统与Windows和MacOS这些系统不同&#xff0c;Linux是黑屏的操作系统&#xff0c;操作方式使用的是指令和代码行来进行&#xff0c;因此相对于Windows和MacOS这些带有图形化界面的系统&#xff0c;Linux的入门门槛和上手程度要更高&…...

隨筆20241028 ISR 的收缩与扩展及其机制解析

在 Kafka 中&#xff0c;ISR&#xff08;In-Sync Replicas&#xff09; 是一组副本&#xff0c;它们与 Leader 保持同步&#xff0c;确保数据一致性。然而&#xff0c;ISR 的大小会因多种因素而变化&#xff0c;包括收缩和扩展。以下是 ISR 收缩与扩展的详细解释及其背后的机制…...

linux-字符串相关命令

1、cut 提取文件每一行中的内容 下面是一些常用的 cut 命令选项的说明&#xff1a; -c, --characters列表&#xff1a;提取指定字符位置的数据。-d, --delimiter分界符&#xff1a;指定字段的分隔符&#xff0c;默认为制表符。-f, --fieldsLIST&#xff1a;提取指定字段的数据…...

ES6 函数的扩展

ES6 之前&#xff0c;不能直接为函数的参数指定默认值&#xff0c;只能采用变通的方法 ES6 允许为函数的参数设置默认值&#xff0c;即直接写在参数定义的后面 参数变量是默认声明的&#xff0c;所以不能用 let 或 const 再次声明 使用参数默认值时&#xff0c;函数不能有同名参…...

Mac 查看占用特定端口、终止占用端口的进程

在 macOS 上&#xff0c;可以使用以下命令来查看占用特定端口&#xff08;例如 8080&#xff09;的进程&#xff1a; lsof -i :8080命令说明 lsof&#xff1a;列出打开的文件和网络连接信息。-i :8080&#xff1a;筛选出正在监听 8080 端口的进程。 输出结果结构 执行上述命…...

C#入坑JAVA MyBatis入门 CURD 批量 联表分页查询

本文&#xff0c;分享 MyBatis 各种常用操作&#xff0c;不限于链表查询、分页查询等等。 1. 分页查询 在 下文的 的「3.4 selectPage」小节&#xff0c;我们使用 MyBatis Plus 实现了分页查询。除了这种方式&#xff0c;我们也可以使用 XML 实现分页查询。 这里&#xff0c…...

RabbitMQ 安装(Windows版本)和使用

安装 安装包获取 可以自己找资源&#xff0c;我这里也有百度云的资源&#xff0c;如果没失效的话可以直接用。 通过百度网盘分享的文件&#xff1a;RabbitMQ 链接&#xff1a;https://pan.baidu.com/s/1rzcdeTIYQ4BqzHLDSwCgyw?pwdfj79 提取码&#xff1a;fj79 安装教程…...

Apache paimon表管理

表管理 2.9.4.1 管理快照 1)快照过期 Paimon Writer每次提交都会生成一个或两个快照。每个快照可能会添加一些新的数据文件或将一些旧的数据文件标记为已删除。然而,标记的数据文件并没有真正被删除,因为Paimon还支持时间旅行到更早的快照。它们仅在快照过期时被删除。 …...

java 第19天

一.Lambda表达式 前提是&#xff1a;参数是函数式接口才可以书写Lambda表达式 函数式接口条件&#xff1a; 1.接口 2.只有一个抽象方法 lambda表达式又称为匿名函数&#xff0c;允许匿名函数以参数的形式传入方法&#xff0c;简化代码 lambda表达式分为两部分()->{} …...

什么是服务器?服务器与客户端的关系?本地方访问不了网址与服务器访问不了是什么意思?有何区别

服务器是一种高性能的计算机&#xff0c;它通过网络为其他计算机&#xff08;称为客户端&#xff09;提供服务。这些服务可以包括文件存储、打印服务、数据库服务或运行应用程序等。服务器通常具有强大的处理器、大量的内存和大容量的存储空间&#xff0c;以便能够处理多个客户…...

Spring(1)—Spring 框架:Java 开发者的春天

一、关于Spring 1.1 简介 Spring 框架是一个功能强大的开源框架&#xff0c;主要用于简化 Java 企业级应用的开发&#xff0c;由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立&#xff0c;并由Pivotal团队维护。它提供了全面的基础设施支持&#xff0c;使开发者…...

MT1401-MT1410 码题集 (c 语言详解)

目录 MT1401归并排序 MT1402堆排序 MT1403后3位排序 MT1404小大大小排序 MT1405小大大小排序II MT1406数字重排 MT1407插入 MT1408插入 MT1409旋转数组 MT1410逆时针旋转数组 MT1401归并排序 c 语言实现代码 #include <stdio.h>// merge two subarrays void merge(int a…...

React基础语法

1.React介绍 React由Meta公司开发&#xff0c;是一个用于构建Web和原生交互界面的库 1.1 React优势 相较于传统基于DOM开发的优势 1.组件化的开发方式 2.不错的性能 相较于其他前端框架的优势 1.丰富的生态 2.跨平台支持 1.2React的时长情况 全球最流行&#xff0c;大厂…...

《Kadane‘s Algorithm专题:最大和连续子数组》

&#x1f680; 博主介绍&#xff1a;大家好&#xff0c;我是无休居士&#xff01;一枚任职于一线Top3互联网大厂的Java开发工程师&#xff01; &#x1f680; &#x1f31f; 在这里&#xff0c;你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人&#xff0c;我不仅热衷…...

Vue基础(5)

ref属性 在 Vue2 中&#xff0c;ref是一个特殊的属性&#xff0c;用于在模板中获取对某个 DOM 元素或子组件的引用。通过 ref&#xff0c;我们可以在 JavaScript 代码中直接访问该 DOM 元素或组件实例。 示例: <template><div><input ref"inputField&quo…...

面对复杂的软件需求:5大关键策略!

面对软件需求来源和场景的复杂性&#xff0c;有效地管理和处理需求资料是确保项目成功的关键&#xff0c;能够提高需求理解的准确性&#xff0c;增强团队协作和沟通&#xff0c;降低项目风险&#xff0c;提高开发效率。反之&#xff0c;项目可能面临需求理解不准确、团队沟通不…...

使用Git进行版本控制的最佳实践

文章目录 Git简介基本概念仓库&#xff08;Repository&#xff09;提交&#xff08;Commit&#xff09;分支&#xff08;Branching&#xff09; 常用命令初始化仓库添加文件提交修改查看状态克隆仓库分支操作合并分支推送更改 最佳实践使用有意义的提交信息定期推送至远程仓库使…...

【入门1】顺序结构 - B2025 输出字符菱形

题目描述 用 * 构造一个对角线长 55 个字符&#xff0c;倾斜放置的菱形。 输入格式 没有输入要求。 输出格式 如样例所示。用 * 构成的菱形。 输入输出样例 输入 #1 输出 #1**** ********* <C> : #include<stdio.h>int main() {printf(" *\n ***\n**…...

C#DLL热加载|动态替换

我有一个项目 开始取数据和结束数据部分是一样的&#xff0c;但中间处理数据是根据客户需求来转换的 又要求增加一个客户数据转换 主程序是不能停下来的 所以这个项目转数据转换部分做成插件式 每个客户的数据转换都是一个项目 都是一个DLL 主程序里面定义好接口类或者抽象…...

怎样创造网站/企业查询平台

点击上方“学士科技”&#xff0c;选择“设为星标”资讯、技术干货第一时间送达&#xff01;C语言基础合集&#xff0c;点我点我~~~C语言进阶&#xff1a;01.图解C语言冒泡排序算法&#xff0c;含代码分析02.C语言最常用的贪心算法就这么被攻克了03.常见的C语言内存错误及对策&…...

淄博网站制作公司托管/电子商务说白了就是干什么的

contest&#xff1a;Dashboard - Codeforces Round 859 (Div. 4) - Codeforces A:水题 题意&#xff1a;给定三个数&#xff0c;a&#xff0c;b&#xff0c;c。如果cab&#xff0c;输出“”&#xff0c;如果ca-b&#xff0c;输出“-”。&#xff08;题目只有加减两种情况&am…...

wordpress修改注册表/制作网站需要什么技术

Python没有switch语句&#xff0c;只能通过模拟来对应实现&#xff1a;**方法一&#xff1a;使用dictionary**values {value1: do_some_stuff1,value2: do_some_stuff2,...valueN: do_some_stuffN,}values.get(var, do_default_stuff)()根据需求可以自行更改参数内容&#xff…...

做网站怎么排版/手机免费建站系统

第一篇&#xff1a;第二章&#xff08;为圆满人生做准备&#xff09; 开篇 开篇就是讲习惯很重要&#xff0c;习惯就像引力&#xff0c;坏的习惯可以阻碍我们&#xff08;天天不学无术吃喝嫖赌&#xff09;&#xff0c;好的习惯可以帮助我们&#xff08;天天读书天天锻炼&…...

网站悬浮窗代码/楚雄seo

现在很多小伙伴们都会用WordPress来发送html邮件&#xff0c;但是对于一些新手朋友们来说&#xff0c;会不知道在WordPress中如何发送HTML邮件&#xff0c;接下来我们就和西部数码小编一起去看看WordPress中发送HTML邮件的方法。方法一&#xff0c;用filter发送HTML邮件发邮件用…...

网站开发需要英语/网络营销推广处点

第十一篇&#xff1a;REST调用 上篇写的是Ajax调用WCF&#xff0c;今天写一篇如何以REST方式调用WCF服务。不知道REST是什么的同学&#xff0c;可以去google一下。对某些类型的应用&#xff0c;REST还是相当不错的方式&#xff0c;所以专门写一篇来说明一下开发方法。 老规矩&a…...