项目一共30个模块,你叫我maven版本一个个手动改?

news2025/1/11 11:47:03

之前有个群友私聊问我,如何快速统一去更改项目中所有的maven版本号,他说之前都是手动一个个去修改,项目一共有30多个maven模块,上次因为漏改了一个,还造成了生产事故。

其实我自己开源项目有的工程也非常多,有的项目连同测试用例模块也能达到个30,40个之多。以前我都是用全局查找替换来操作的,可后来发现,有的时候无脑全局替换也容易替换错,比如项目的版本是1.2.0,想到替换成1.2.1,但是全局无脑替换的时候,会把一些其他的本来是1.2.0的包的版本号也替换成了1.2.1。所以即便是全局替换,也要一个个再check一遍。

那有没有方便又不容易出错的方法呢?

今天推荐2个小技巧,尤其是第二个,多数人不知道,用完之后,我感觉哪怕有100个模块,都不用慌了。

使用versions-maven-plugin这个插件来完成。

首先在你的主pom文件里定义如下maven插件:

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

然后如果你要修改所有模块的版本号,一行命令皆可解决:

mvn versions:set -DnewVersion=1.2.1

如果你后悔更新了,还可以回退:

mvn versions:revert

如果你确定了,则输入提交命令,就完成了:

mvn versions:commit

这种方式修改的,无论你有几个子模块,都可以统一修改。修改后的pom,parent引用,包括子模块之间的引用版本号,都会连同更改的。

是不是特别方便。

其实我之前很多项目,都是用以上这个插件来更新子模块版本号的。

但是之前一段时间,有一个贡献者给我的开源项目提了个pr,用了另外一种方式去修改版本号,这种方式我后来看了下,更加的方便。甚至都不用去输入命令!

这种方式的核心思想使用占位符去统一管理。

主pom里是这样定义的:

子模块引用其他子模块版本也是同样定义:

这个${reversion}参数在主pom里定义:

<properties>
        <revision>2.8.5</revision>
</properties>

如果你光这样定义,那么编译是通不过的,你还需要加上一个插件,这个插件的作用是在编译打包时,会自动替换${reversion}占位:

<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>

做好以上这几步,那么你要修改版本号的时候,只需要在主pom里把reversion修改一次就可以了,不管多少子模块,都可以生效。

其实在日常开发的过程中,我们总希望摆脱一些机械化,无意义的重复操作,使得自己更加高效的方法。如果你觉得在某一方面浪费了太多的精力,那么一定有更加高效简单的办法来解决。

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

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

相关文章

Java入门必备知识你能掌握多少?

1、Java是一种高级计算机语言&#xff0c;是可以编写跨平台应用软件、完全面向对象的程序设计语言。 2、Java划分为三个技术平台&#xff1a;Java SE、Java EE、Java ME Java SE是桌面应用&#xff0c;Java EE是web应用&#xff0c;平台企业版&#xff0c;Java ME是手机应用&…

亚马逊鲲鹏系统批量注册功能可以让你快速拥有大量亚马逊买家号

亚马逊鲲鹏系统是一款能批量注册买家号、AI智能一键养号、模拟真人行为轨迹进行刷单测评的软件&#xff0c;而对于批量注册买家号&#xff0c;操作也是比较简单的。 主要流程是购买了相应的账号所需资料后&#xff0c;通过批量导入邮箱、邮箱密码、信用卡、收货地址进入软件然后…

嵌入式分享合集114

一、DMA DMA&#xff0c;全称Direct Memory Access&#xff0c;即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间&#xff0c;提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 我们知道CPU有转移数据、计算、控制程序转移等很多功能&…

拿到8000元的火焰杯比赛奖金,感谢霍格沃兹测试开发学社

下面是我们获奖学员自己主动分享的 然后发给霍格沃兹测试开发学社表示感谢的&#xff0c;收到她的反馈我们也由衷的开心。所以也分享给大家&#xff0c;目前无论是应届生 在校生还是从业人员&#xff0c;都可以加入第三届火焰杯比赛&#xff0c;赢取属于专属于自己的荣耀。 我…

学生HTML个人网页作业作品:基于HTML实现教育培训机构网站模板毕业源码(8页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[附源码]JAVA毕业设计霍山石斛网站(系统+LW)

[附源码]JAVA毕业设计霍山石斛网站&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

AutoJs7打包薅羊毛时间版

AutoJs7打包薅羊毛时间版 一、准备工作&#xff1a; autojs7 app 下载地址&#xff1a;Auto.js Pro7.apk - 蓝奏云薅羊毛时间版 下载地址&#xff1a; 亚丁号---文件下载 安卓手机一部外加数据线&#xff08; Type-C或者USB&#xff09;&#xff0c;最好是安卓7的系统。电脑…

云服务器购买流程

云服务器购买流程 在技术学习的路上&#xff0c;除了虚拟机外最贴近实战的机器就是服务器。实际上在企业中有些小企业用的也是租赁的云服务器&#xff0c;有些是自己公司搭建的服务器。不管什么服务器了&#xff0c;实际上都是一样的&#xff0c;如果想更靠近企业级开发&#x…

Kotlin高仿微信-第52篇-搜索好友

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

HTTP

文章目录一、HTTP 基本概念GET 与 POSTHTTP 特性HTTP 与 HTTPSHTTP/1.1、HTTP/2、HTTP/3 演变HTTP/1.1如何优化如何避免发送 HTTP 请求&#xff1f;如何减少 HTTP 请求次数减少重定向请求次数合并请求延迟发送请求如何减少 HTTP 响应的数据⼤⼩&#xff1f;⽆损压缩有损压缩HTT…

YGG 和 BlockchainSpace 举办全国最大的 Web3 活动:Philippine Web3 Festival

2022 年 11 月 14 日至 18 日&#xff0c;Yield Guild Games (YGG) 和 BlockchainSpace 在菲律宾共同举办了迄今为止最大的 web3 活动&#xff0c;汇集了来自世界各地的游戏玩家、建设者、投资者、开发者、教育工作者和艺术家加入 web3 的应用。该活动吸引了来自 web3 社区的数…

计算机网络——TCP/IP模型

OSI参考模型与TCP/IP标准模型 OSI模型先出现理论&#xff0c;并没有实践&#xff0c;只是一个法定参考模型。 TCP/IP模型出现早&#xff0c;应用早。TCP/IP模型其实是先诞生一个协议栈。 再出现TCP/IP参考模型 TCP/IP模型中的网络接口层其实是把数据链路层和物理层进行合并了…

电脑桌面文件不见了怎么恢复?

众所周知&#xff0c;我们都会在电脑桌面上放置各种文件、文件夹等&#xff0c;这样很容易造成文件堆积过多&#xff0c;桌面杂乱无章&#xff0c;影响查找文件速度。这不可避免的要对电脑桌面进行整理&#xff0c;但有时候我们会出现重要文件突然就找不到了&#xff0c;这时电…

RabbitMQ延时队列

延时队列内部是有序的&#xff0c;最重要的特性就是延时&#xff0c;延时队列中的元素是希望在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列。 使用场景 订单在十分钟之内未支付则自动取消新创建…

新上线软件需不需要防御?

导语&#xff1a;随着5G时代到来和ipv6的普及&#xff0c;攻击者手段层出不穷&#xff0c;从一开始简单的DDOS分布式拒绝服务&#xff0c;后到蔓延ACK 从不同协议通讯层面发起的攻击&#xff0c;现在CC请求类型攻击&#xff0c;已经可以绕过域名验证&#xff0c;以及模拟正常用…

css实现价格降价线

比较简单&#xff0c;直接上代码 <div class"container"><div>今日价格&#xff1a;$9.99</div><div>商品原价&#xff1a;<span class"price">$49.99</span></div> </div>.price {text-decoration: lin…

GJB 5000B二级-II实施基础

本实践域为新增实践域   思想:以GJB5000A的共用过程域中不乏实践为基础进行提炼并提升,结合各个行业的优秀实践和行业特点,坚持问题导向,使标准更具有指导性和可操作性;充分借鉴GJB9001C中:“4组织环境”、“7支持”的相关内容,形成实施基础实践域。本实践域强调突出重…

让你真实的看见 TCP 三次握手和四次挥手到底是什么样!

前言 TCP 建立连接是三次握手&#xff0c;而断开连接是四次挥手。 但事实上从你打开这篇文章&#xff0c;到关掉这篇文章&#xff0c;你是看不见这个过程的。 那 TCP 建立连接和断开连接的过程是不是真的如大多数文章所描绘的一样&#xff1f; 带着这些疑问&#xff0c;那就…

揭晓:一条SQL语句的执行过程是怎么样的?

数据库系统能够接受 SQL 语句&#xff0c;并返回数据查询的结果&#xff0c;或者对数据库中的数据进行修改&#xff0c;可以说几乎每个程序员都使用过它。 而 MySQL 又是目前使用最广泛的数据库。所以&#xff0c;解析一下 MySQL 编译并执行 SQL 语句的过程&#xff0c;一方面…

seata在nacos上注册IP为内网,启动时加了 -h 外网ip还是显示内网?

版本&#xff1a; 部署位置&#xff1a;Linux seata版本&#xff1a;1.5.1 问题&#xff1a; seata在nacos上注册IP为内网&#xff0c;启动时加了 -h 外网ip还是显示内网? 解决&#xff1a; 该版本存在-h失效问题&#xff0c;后面1.5.2就修掉-h失效的问题了。 可以在sea…