大家好呀,我是铂赛东,一个乱入公众号博主的开源作者。明天分享一个 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/lit…
TLog:
https://gitee.com/dromara/TLog
如果你感觉对你有帮忙的话,请不要忘了棘手点上你尊贵 star😊。