• 项目一共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.mojogroupId>
                <artifactId>versions-maven-pluginartifactId>
                <version>2.3version>
            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.5revision>
    properties>
    

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

    <plugin>
      <groupId>org.codehaus.mojogroupId>
      <artifactId>flatten-maven-pluginartifactId>
      <version>1.2.7version>
      <configuration>
        <updatePomFile>trueupdatePomFile>
        <flattenMode>resolveCiFriendliesOnlyflattenMode>
      configuration>
      <executions>
        <execution>
          <id>flattenid>
          <phase>process-resourcesphase>
          <goals>
            <goal>flattengoal>
          goals>
        execution>
        <execution>
          <id>flatten.cleanid>
          <phase>cleanphase>
          <goals>
            <goal>cleangoal>
          goals>
        execution>
      executions>
    plugin>
    

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

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

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

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

    LiteFlow:

    https://gitee.com/dromara/liteFlow

    TLog:

    https://gitee.com/dromara/TLog

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

  • 相关阅读:
    计算机毕业设计ssm基于SSM的社区疫情防控管理信息系统的设计与实现khjit系统+程序+源码+lw+远程部署
    java 正则表达式解析数据
    collect 详细解析 Java 8 Stream API 中的 collect 方法
    ESDA in PySal (5):空间数据的探索性分析:空间自相关
    小阿轩yx-Shell编程之正则表达式与文本处理器
    导出pdf高清
    京东JD开放平台API接口调用采集商品详情数据获取商品规格信息、销量、卖家信息抓取案例
    Python 机器学习入门之K近邻算法
    【力扣算法简单五十题】17.路径总和
    Github一夜爆火的阿里术小册究竟有什么魅力?才能引大家趋之若鹜
  • 原文地址:https://www.cnblogs.com/bryan31/p/16601795.html