首页 > 其他分享 >项目一共30个模块,你叫我maven版本一个个手动改?

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

时间:2022-08-19 14:11:06浏览次数:94  
标签:插件 1.2 版本号 30 maven 开源 模块

大家好呀,我是铂赛东,一个乱入公众号博主的开源作者。今天分享一个maven小技巧,希望帮助到大家。

之前有个群友私聊问我,如何快速统一去更改项目中所有的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修改一次就可以了,不管多少子模块,都可以生效。

目前我的开源项目就是采用这种模式去修改版本号了。基本不用担心改错的情况。

其实在日常开发的过程中,我们总希望摆脱一些机械化,无意义的重复操作,使得自己更加高效的方法。如果你觉得在某一方面浪费了太多的精力,那么一定有更加高效简单的办法来解决。我以后也会多分享一些提高工作效率的小技巧,如果大家喜欢这种类型的,点赞分享收藏哦。

我是铂赛东,即是一个开源作者也是一位技术内容博主,希望你关注我,也可以去我的开源主页了解我的两个开源项目:

LiteFlow:

https://gitee.com/dromara/liteFlow

TLog:

https://gitee.com/dromara/TLog

如果你觉得对你有帮助的话,请不要忘了顺手点上你尊贵star

标签:插件,1.2,版本号,30,maven,开源,模块
From: https://www.cnblogs.com/bryan31/p/16601795.html

相关文章

  • 无网络使用本地maven仓库配置,构建上传sonarqube进行代码检查
    #前提需要本地仓库下存在项目的所有依赖包1.mavensettings.xml文件配置。如果idea和本地mvn环境使用的settings.xml路径不一致。则需要同步修改。<!--#前提需要本......
  • 千兆以太网_发送模块设计_udp_rgmii_tx
    功能:在FPGA开发板上,用户数据存于FIFO,经过UDP,IP,MAC封装,通过RGMII接口发送出去。完整的以太网应该包括收发功能,这里介绍发送模块。实现:序列机过程:发送顺序:  MAC帧头—......
  • 一张图看懂 OrchardCore 中的模块加载及依赖管理
    先上图   Manifest.cs  Module与FeatureModule特性 如果模块中只有一个功能【Feature】那么可以直接用Module替代,也就是///<summary>///......
  • 5G/4G外置型无线通信模块
    5G/4G外置型无线通信模块TD210,全网通5G/4G/3G/2G网络,数据透传、加密传输,RS485/RS232/TTL电平接口,支持TCP/UDP/环保212/MQTT协议,工业级32位通信处理器,看门狗、心跳链路检测......
  • Python - PyPDF2模块的简单使用
    1.简介PyPDF的前身是PyPDF包在2005年发布,该包的最后一个版本发布于2010年,后来大约经过一年左右,名为Phasit的公司赞助PyPDF的一个分支后来命名为PyPDF2,两个版本功能都基本......
  • Jave配置Maven
    1.安装Maven  Maven官网:https://maven.apache.org/download.cgi  选择Binaryziparchive下载zip包    将解压的文件放入自己选定的文件路径中  2.配置环......
  • 2、spring+mybatis注解+idea+maven
    1、在idea中配置database连接数据库,用来在idea中编写sql脚本操作数据库         2、sql详细脚本如下:1--1.创建部门表2createtabledept3......
  • MySQL之Navicat和pymysql模块
    Navicat可视化软件下载安装官网地址:http://www.navicat.com.cn/主要功能介绍1.可以创建、管理和维护数据库2.可以充当各种数据库软件的客户端,并且提供操作数据库的快......
  • leetcode 304. Range Sum Query 2D - Immutable 二维区域和检索 - 矩阵不可变(中等)
    一、题目大意https://leetcode.cn/problems/range-sum-query-2d-immutable给定一个二维矩阵matrix,以下类型的多个请求:计算其子矩形范围内元素的总和,该子矩阵的左上角......
  • 关于 SAP 电商云 Spartacus UI 里 Router 模块的 forRoot 方法
    默认路由的配置数据定义在default-routing-config.ts文件内:一些例子:login:{paths:['login'],protected:false,authFlow:true,},register:{......