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

Maven - 优雅的管理多模块应用的统一版本号

文章目录

  • 概述
  • 一、使用 `versions-maven-plugin` 插件
      • 1. 在主 `pom.xml` 中定义插件
      • 2. 修改版本号
      • 3. 回退修改
      • 4. 提交修改
  • 二、使用占位符统一管理版本号
      • 1. 在主 `pom.xml` 中定义占位符
      • 2. 使用 `flatten-maven-plugin` 插件自动替换占位符
      • 3. 修改版本号
      • 4. 为什么这种方式更方便?
  • 总结

在这里插入图片描述


概述

在大型项目中,尤其是涉及多个子模块的Maven项目,统一管理版本号是一个棘手的问题。尤其当项目的子模块多达几十个时,手动修改每个模块的版本号不仅容易出错,还会导致大量的重复工作。如何高效且准确地管理这些版本号,成为了开发中的一大挑战。


一、使用 versions-maven-plugin 插件

versions-maven-plugin 是一个非常强大的插件,它能帮助我们轻松管理整个项目中所有模块的版本号。无论是修改依赖版本,还是修改整个项目的版本号,都可以通过这个插件轻松实现。

1. 在主 pom.xml 中定义插件

首先,在主 pom.xml 中添加 versions-maven-plugin 插件的配置:

<build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>versions-maven-plugin</artifactId><version>2.3</version></plugin></plugins>
</build>

2. 修改版本号

如果要修改所有子模块的版本号,只需执行以下命令:

mvn versions:set -DnewVersion=2.0

这条命令会将项目中所有模块的版本号统一更新为 2.0

3. 回退修改

如果在修改版本号之后后悔了,可以通过以下命令撤销更改:

mvn versions:revert

4. 提交修改

如果一切确认无误,可以通过 versions:commit 命令来提交修改:

mvn versions:commit

这样, pom.xml 中的父模块引用、以及所有子模块中的版本号都会自动被更新,简化了很多手动操作的步骤。

这种方式的优点在于,无论项目中有多少个子模块,只需要执行一次命令就能完成版本号的统一更新,避免了漏改和手动修改的麻烦。


二、使用占位符统一管理版本号

除了 versions-maven-plugin 插件外,还有一种更便捷的方式来管理项目版本号,这种方法通过使用占位符来管理版本号,并结合 flatten-maven-plugin 插件在编译时自动替换占位符值。

1. 在主 pom.xml 中定义占位符

在主 pom.xml 中定义一个 ${revision} 占位符:

<properties><revision>1.2.0</revision>
</properties>

在子模块的 pom.xml 中,你可以通过占位符 ${revision} 来引用这个版本号。例如:

<dependency><groupId>com.example</groupId><artifactId>module-a</artifactId><version>${revision}</version>
</dependency>

2. 使用 flatten-maven-plugin 插件自动替换占位符

为了让这个占位符能够在编译和打包时自动替换成实际的版本号,需要在主 pom.xml 中添加 flatten-maven-plugin 插件的配置:

<build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>1.2.7</version><configuration><updatePomFile>true</updatePomFile><flattenMode>resolveCiFriendliesOnly</flattenMode></configuration><executions><execution><id>flatten</id><phase>process-resources</phase><goals><goal>flatten</goal></goals></execution><execution><id>flatten.clean</id><phase>clean</phase><goals><goal>clean</goal></goals></execution></executions></plugin></plugins>
</build>

3. 修改版本号

有了占位符后,你只需修改 pom.xml 中的 <revision> 值即可,所有引用 ${revision} 的子模块版本都会自动更新,无需执行额外命令。

4. 为什么这种方式更方便?

这种方式的最大好处在于,所有子模块的版本号管理都通过统一的占位符进行,避免了手动修改每个模块的版本号的繁琐。当你需要修改版本号时,只需修改主 pom.xml 中的 <revision> 值即可,这样修改将自动传播到所有子模块,极大地减少了出错的机会。


总结

对于大型的多模块 Maven 项目,使用 versions-maven-plugin 插件和占位符方式来统一管理版本号,都能帮助我们高效、准确地完成版本更新。无论是通过命令行一次性修改版本,还是通过占位符简化修改流程,这些方法都能大大提高开发效率,避免因为漏改版本号而引发的生产事故。

在这里插入图片描述

相关文章:

Maven - 优雅的管理多模块应用的统一版本号

文章目录 概述一、使用 versions-maven-plugin 插件1. 在主 pom.xml 中定义插件2. 修改版本号3. 回退修改4. 提交修改 二、使用占位符统一管理版本号1. 在主 pom.xml 中定义占位符2. 使用 flatten-maven-plugin 插件自动替换占位符3. 修改版本号4. 为什么这种方式更方便&#x…...

国际网络安全趋势

1. 亲近拥抱人工智能自动化。 随着安全协调、人工智能自动化和响应(SOAR)的日益普及&#xff0c;人工智能自动化开始成为现实并将继续扩展到其他安全行动领域。寻求将人工智能自动化整合到原有的工具中&#xff0c;通过将威胁情报整合在一起&#xff0c;将其转换为可用格式并主…...

基于米尔全志T527开发板的FacenetPytorch人脸识别方案

本篇测评由优秀测评者“小火苗”提供。 本文将介绍基于米尔电子MYD-LT527开发板&#xff08;米尔基于全志 T527开发板&#xff09;的FacenetPytorch人脸识别方案测试。 一、facenet_pytorch算法实现人脸识别 深度神经网络 1.简介 Facenet-PyTorch 是一个基于 PyTorch 框架实…...

Altium Designer脚本工具定制

原理图设计自动化 ➡️Altium原理图检查工具 ➡️元器件参数集导入导出 ➡️原理图符号自动创建 ➡️原理图高级查找 ➡️原理图库文档高级查找 ➡️原理图文档对比 ➡️原理图库文档对比 PCB设计自动化 ➡️各种各样的PCB线圈自动创建 ➡️PCB文档导出成SVG格式文档…...

贝锐自研智慧网关系统OrayOS升级,适配Banana PI开发板BPI-R3 Mini

为了满足多元化的应用场景&#xff0c;贝锐与Banana PI携手合作&#xff0c;贝锐自研新一代云智慧网关系统OrayOS不仅已成功适配BPI-R3&#xff0c;还进一步扩展至BPI-R3 Mini&#xff0c;提供了更丰富的选择。在全球工业物联网、视频监控管理以及企业级办公存储等领域&#xf…...

搭建环境-PHP简介及环境搭建教程

搭建环境-PHP简介及环境搭建教程 前言 在现代Web开发中,PHP是一种广泛使用的服务器端脚本语言,它以简洁、高效和跨平台的特性受到开发者的青睐。无论是小型网站还是大型企业应用,PHP都能提供强大的支持。本文将为您详细介绍PHP的基本概念、特点,以及如何搭建PHP开发环境。…...

Maven 配置

参考学习&#xff1a; eclipse&#xff08;或myeclipse&#xff09;通过maven配置连接neo4j_eclipse 链接 neo4j-CSDN博客 爆肝十小时—我终于用Java连上Neo4j数据库 - 知乎 全站最全Maven下载安装配置教学&#xff08;2024更新...全版本&#xff09;建议收藏...赠送IDEA配置Ma…...

js常见函数实现

文章目录 一、数组Array1、forEach2、filter3、map4、reduce5、find6、findIndex7、includes8、join 二、对象Object1、Object.keys2、深复制 js环境中有很多工具函数&#xff0c;比如es6添加了很多新的属性和方法&#xff0c;这些方法也可以自定义实现&#xff0c;但是官方也提…...

点云3DHarris角点检测算法推导

先回顾2D的Harris角点检测算法推导 自相关矩阵是Harris角点检测算法的核心之一&#xff0c;它通过计算图像局部区域的梯度信息来描述该区域的特征。在推导Harris角点检测算法中的自相关矩阵时&#xff0c;我们首先需要了解自相关矩阵的基本思想和数学背景。 参考 1. 能量函数…...

mysql-binlog的三种模式

MySQL的binlog&#xff08;二进制日志&#xff09;有三种主要模式&#xff0c;分别是Statement、Row和Mixed。这三种模式在记录数据库更改的方式上有显著的区别&#xff0c;以下是对这三种模式的详细解释及对比&#xff1a; 一、Statement模式&#xff08;基于SQL语句的复制&a…...

自动类型推导(auto 和 decltype);右值引用和移动语义

1) 自动类型推导&#xff08;auto 和 decltype&#xff09; 自动类型推导&#xff08;auto&#xff09; 在C11及以后的版本中&#xff0c;auto关键字被引入用于自动类型推导。这意味着编译器会自动推断变量的类型&#xff0c;基于其初始化的表达式。使用auto可以让代码更加简…...

(Linux 系统)进程控制

目录 一、进程创建 1、fork函数初识 二、进程终止 1、正常终止 2、异常终止 三、进程等待 1、进程等待必要性 2、进程等待的方法&#xff1a; 四、获取子进程status 1、基本概念 2、进程的阻塞等待方式 3、进程的非阻塞等待方式 五、进程程序替换 1、六种替换函数…...

【Nativeshell】flutter的pc跨平台框架学习记录<二> 窗口间通信

首先是初始化&#xff1a; 查看Nativeshell的demo代码 // ignore_for_file: undefined_hidden_name, // not in main import package:flutter/material.dart hide MenuItem; import package:nativeshell/nativeshell.dart;import pages/other_window.dart; import pages/plat…...

今日codeforces刷题(1)

一、前言 新栏目&#xff0c;每隔几天就保质保量地刷个10道codeforces题左右的样子 筛选1200-1500难度的题&#xff0c;然后按通过题目的人数降序排列的前10题 二、题目总览 三、具体题目 3.1 25A. IQ test 我的代码 看奇数出现的次数为1还是偶数出现的次数为1&#xff0c…...

【C++算法】20.二分查找算法_x 的平方根

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 69. x 的平方根 题目描述&#xff1a; 解法 暴力解法&#xff1a; 如果x17 从1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5......这些数里面找他们的平方…...

图像显示的是矩阵的行和列,修改为坐标范围。

x 3; y 3; f1x x^2 y^2; guance1 f1x; F (x, y) sqrt((x.^2 y.^2 - guance1).^2); % 使用点乘 [x, y] meshgrid(0:1:5, 0:1:5); Z F(x, y); figure; imagesc(Z); % 由于 imagesc 使用矩阵索引作为坐标&#xff0c;我们需要手动添加刻度 % 这里我们假设 x 和 y 的范围…...

通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 通义灵码走进北京大学创新课堂&#xff0c;与 400…...

LeetCode Hot100 1~10

目录 哈希1. 两数之和2. 字母异位词分组3. 最长连续子序列 双指针4. 移动零5. 盛最多水的容器6. 三数之和7. 接雨水 子串8. 无重复字符的最长子串9. 找到字符中所有字母的异位词10. 和为K的子数组 哈希 1. 两数之和 利用哈希表找出当前数字还差多少 看看差值时候在哈希表中即…...

npm 最新国内淘宝镜像地址源 (旧版已不能用)

注意&#xff1a;原域名https://registry.npm.taobao.org/ 在 2022.06.30 号正式下线和停止 DNS 解析 最新地址&#xff1a; #最新地址 淘宝 NPM 镜像站喊你切换新域名啦! npm config set registry https://registry.npmmirror.com 查看镜像使用状态 npm config get registr…...

DepthAI 2.29版本 发布

2024年11月29日 增加在设备运行时使用新的 dai::Device.setCalibration() 更改设备校准能力的方法&#xff0c;并使用 dai::Device.getCalibration() 进行检索校准 1&#x1f343; 新的立体深度预设属性&#xff1a; 预设 面部 高细节 机器人 2&#x1f343; 多项摄像…...

别再死记ResNet结构了!用PyTorch手把手带你复现ResNet-50(附完整代码与可视化)

从零构建ResNet-50&#xff1a;PyTorch实战与架构解密 当你第一次看到ResNet的残差连接时&#xff0c;是否曾被那个"跳跃"的结构所困惑&#xff1f;为什么简单的跨层连接就能解决深度网络的退化问题&#xff1f;本文将以工程师视角&#xff0c;带你用PyTorch从第一行…...

try-catch到底有没有性能开销

有一种说法是”try-catch 有性能开销&#xff0c;关键路径上不要用”。另一种说法是”try-catch 不抛异常的话没有开销”。这两种说法都不全对&#xff0c;开销在哪里要看具体用法。try-catch 本身不贵&#xff0c;异常对象才贵JVM 里&#xff0c;try-catch 的实现方式是在字节…...

从零到一:手把手教你用Cornerstone.js搭建一个基础的医学影像查看器

从零到一&#xff1a;手把手教你用Cornerstone.js搭建一个基础的医学影像查看器 医学影像的数字化呈现一直是医疗技术发展的重要方向。随着Web技术的进步&#xff0c;直接在浏览器中查看和操作DICOM等专业医学影像已成为可能。本文将带领前端开发新手一步步实现一个基础的医学影…...

RK3562核心板开发指南:从硬件设计到AI部署的全流程解析

1. 项目概述&#xff1a;从一颗芯片到一套完整的开发资源最近在嵌入式圈子里&#xff0c;RK3562这颗芯片的热度持续攀升。作为瑞芯微面向中高端AIoT和工业应用推出的新一代处理器&#xff0c;它凭借其均衡的CPU/GPU/NPU性能和出色的能效比&#xff0c;吸引了不少开发者的目光。…...

从“整蛊脚本”到实战:在虚拟机里安全玩转Windows批处理与VBS的5个实验

从“整蛊脚本”到实战&#xff1a;在虚拟机里安全玩转Windows批处理与VBS的5个实验 当你第一次在网上看到那些号称能让电脑蓝屏、自动关机甚至修改注册表的脚本时&#xff0c;是否既好奇又害怕&#xff1f;这些看似神秘的代码背后&#xff0c;其实隐藏着Windows系统管理的核心…...

深耕 AI 全域布局,探词科技凭硬核实力领跑 GEO 新赛道

在人工智能全面渗透各行各业的当下&#xff0c;传统线上流量玩法逐渐触顶&#xff0c;依托大模型生态搭建品牌长效传播阵地&#xff0c;已然成为企业数字化转型的核心突破口。作为国内专注 AI 品牌全域布局的专业服务商&#xff0c;探词科技深耕 GEO 智能优化领域&#xff0c;凭…...

从LED闪烁到任务调度:手把手教你用英飞凌AURIX的STM系统定时器构建简单时间片

从LED闪烁到任务调度&#xff1a;基于英飞凌AURIX的STM系统定时器构建轻量级时间片框架 在嵌入式开发中&#xff0c;系统定时器&#xff08;STM&#xff09;常被简化为"高级延时工具"&#xff0c;但它的潜力远不止于此。当开发者面对需要同时处理LED状态控制、按键扫…...

基于QT5的串口上位机开发:从零实现数据收发与可视化

1. 项目概述&#xff1a;为什么我们需要自己动手写串口上位机&#xff1f;在嵌入式开发、工业控制、物联网设备调试这些领域&#xff0c;串口通信就像设备与电脑之间最古老也最可靠的“方言”。你可能用过各种现成的串口调试助手&#xff0c;它们功能强大&#xff0c;但当你需要…...

终极风扇控制解决方案:FanControl让Windows散热管理变得简单高效

终极风扇控制解决方案&#xff1a;FanControl让Windows散热管理变得简单高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_T…...

【免费下载】 FFmpeg 6.0 Android 编译库

FFmpeg 6.0 Android 编译库 简介 本仓库提供了一个预编译的 FFmpeg 6.0 库&#xff0c;专门为 Android 平台编译。该库基于 NDK 25C 进行编译&#xff0c;并集成了 v4l2 视频采集和 pulse 音频采集功能。 资源文件描述 FFmpeg 版本: 6.0编译工具链: NDK 25C平台: Android集成功…...