大家好呀,我是铂赛东,一个乱入公众号博主的开源作者。今天分享一个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。

项目一共30个模块,你叫我maven版本一个个手动改?的更多相关文章

  1. 大数据技术之_25_手机APP信息统计系统项目_01_APP 数据生成模块 + 数据收集模块 + 数据处理模块框架搭建 + 业务需求处理 + 数据展示模块 +项目总结 + 问题总结

    一 项目概述1.1 角色1.2 业务术语1.3 项目效果展示二 项目需求三 项目概要3.1 项目技术架构3.2 项目目录结构3.3 项目技术选型3.4 项目整体集群规划3.5 创建项目工程四 APP ...

  2. maven 单独构建多模块项目中的单个模块

    maven 单独构建多模块项目中的单个模块, maven选项说明 -pl, --projects Build specified reactor projects instead of all pro ...

  3. Maven单独构建多模块项目中的单个模块

    Maven单独构建多模块项目中的单个模块   说明: 1.可能存在的场景,多模块项目没有互相引用,那么此时可以单独构建单个项目,指定到子模块的pom.xml文件即可完成编译. 2.如果多模块项目各自都 ...

  4. 项目中有私有仓库模块时,使用 npm ci 命令的安装步骤

    项目中有私有仓库模块时,使用 npm ci 命令的安装步骤: 先安装私有仓库模块:npm install <npm包名> --registry=<npm包源> 再运行命令:np ...

  5. 使用Scala实现Java项目的单词计数:串行及Actor版本

    其实我想找一门“具有Python的简洁写法和融合Java平台的优势, 同时又足够有挑战性和灵活性”的编程语言. Scala 就是一个不错的选择. Scala 有很多语言特性, 建议先掌握基础常用的: ...

  6. 使用eclipse搭建springboot项目pom.xml文件第一行报错(Maven Configuration Problem)

    今天在https://start.spring.io/上搭建了一个2.1.5版本的springboot项目,但是把它导入后,pom.xml第一行报错了,查看Problems发现下面的错误 百度后发现方 ...

  7. 【SSH网上商城项目实战30】项目总结

      转自:https://blog.csdn.net/eson_15/article/details/51479994 0. 写在前面 项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了 ...

  8. 【SSH网上商城项目实战30】项目总结(附源码下载地址)

    项目基本完成了,加上这个总结,与这个项目相关的博客也写了30篇了,积少成多,写博客的过程是固化思路的一个过程,对自己很有用,同时也能帮助别人.顺便说个题外话,在学习的过程中肯定会遇到很多异常出现,我们 ...

  9. eclipse在多modules项目结构下避免模块间依赖引用的场景

    这个在单一classLoader时,不会有问题.如果多classloader下会有问题. 假设工程有两个模块,module2 依赖module1 当我们执行mvc eclipse:eclipse后,然 ...

随机推荐

  1. 儿童节,和 AI 一起通关 “超级马里奥兄弟”

    摘要:六一儿童节,快来训练一款自己的游戏 AI,用代码让马里奥从大反派酷霸王的魔掌里救回桃花公主. 本文分享自华为云社区<儿童节,和 AI 一起通关 "超级马里奥兄弟"> ...

  2. Flink使用Pod Template将状态快照(Checkpoint、Savepoint)存储在NFS

    背景 Flink 版本 1.13.3,使用 native k8s 部署模式,原采用 HDFS 作为状态快照(Checkpoint.Savepoint)的存储地址,但是由于仅使用了其 HDFS 作为状态 ...

  3. js 表面学习 - 认识事件

    事件 描述 onchange HTML 元素已被改变 onclick 用户点击了 HTML 元素 onmouseover 用户把鼠标移动到 HTML 元素上 onmouseout 用户把鼠标移开 HT ...

  4. Linux shell环境的配置

    shell配置文件分类 按生效范围分类:全局和局部 按登录方式分类:交互式和非交互式 按功能分类:profile和bashrc shell配置文件按生效范围分类: 全局配置:针对有所用户有效 /etc ...

  5. .NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)

    一.引言 上一篇.NET ORM框架HiSql实战-第一章-集成HiSql 已经完成了Hisql的引入,本节就把 项目中的菜单管理改成hisql的方式实现. 菜单管理界面如图: 二.修改增删改查相关代 ...

  6. 零基础学Java(4)字符串

    字符串 从概念上讲,Java字符串就是Unicode字符序列.例如,字符串"Java\u2122"由5个Unicode字符J.a.v.a和组成.Java没有内置的字符串类型,而是在 ...

  7. 【cartogarpher_ros】三: 发布和订阅雷达scan信息

    上一节介绍和测试了cartographer的官方demo. 本节会编写ros系统中,最常用的激光雷达LaserScan传感数据的订阅和发布,方便在cartographer中加入自己的数据进行建图与定位 ...

  8. 实战模拟│单点登录 SSO 的实现

    目录 什么是单点登录 单点登录的凭证 父域 Cookie 方式 用户认证中心方式 localstorage方式 什么是单点登录 单点登录: SSO(Single Sign On) 用户只需登录一次,就 ...

  9. javascript基本属性访问对象的属性和方法

    var myName = "Shelley"; //字符串基本类型 alert(myName.length);  //隐式创建String对象,数值与myName相同,并执行len ...

  10. 有关golang信道的面试笔记

    信道是一个goroutine之间很关键的通信媒介. 理解golang的信道很重要,这里记录平时易忘记的.易混淆的点. 1. 基本使用 刚声明的信道,零值为nil,无法直接使用,需配合make函数进行初 ...