批量修改JAVA项目版本号 1.0.0

文档关键字

修改POM文件、Python、处理XML文件


目录

背景

图文解释

待解决问题

问题解决思路

预计节省工时

开发中遇到的问题

脚本使用方法

脚本地址


背景

        首先介绍一下我们公司平时开发前的一小段流程:

  1. 首先在项目管理工具(公司自研,名字叫做“方舟”)中创建项目迭代
    1. 这个迭代会根据不同的需求产生一个三位的随机数,例如:335;
    2. 同时我们会和项管核定一个项目上线日期,例如:20221101;
    3. 然后使用TAPD对应迭代的id,例如:123456
  2. 其次我们会将迭代中涉及到的项目都加入到这个项目迭代中;
  3. 按照步骤1中的几个数字,组合出开发分支并创建分支,例如:feature_20221101_123456
  4. 将迭代中的每一个项目切换到开发分支后,更新POM文件的版本(我们使用openfegin,所以项目与项目会有依赖,所以也需要改引入项目的版本号);例如:将涉及项目的同一改为1.0.20221101-SNAPSHOT,因为一个迭代内可能涉及多个需求,每个需求我们开发环境部署会使用不同实例(实例的编号就是步骤一中的第一步335),所以开发环境对应的项目版本号会带上需求的识别号,例如:1.0.20221101.335-SNAPSHOT
  5. 更改版本号后就可以进行开发了

        上述的这段开发流程,我们的项目管理工具已经实现了自动化,但是独独这个更改版本号这一步骤需要我们手动去更改,如果迭代下的项目少还好,之前我经历了一个迭代下有20个项目,我们项目都是聚合工程,也就意味着每个项目我都需要手动去更改多个POM文件,所以为了解决这个频繁、规则固定的体力工作,决定开发一个Python脚本。

图文解释

        这里担心步骤四我没有描述清除,贴几张图来进行解释

1、我们的项目都是Maven工程,且都为聚合工程

2、POM文件的标签格式都相同

        父工程POM文件:(圈出来的地方就是要更改的版本号,读者不需要知道这是什么,只需要知道我要更换这些XML标签下的数据,而且这些标签的父标签,下面红框中的标签不固定,代表着不同的项目)

         子工程POM文件:(下面红框中不需要改)

3、版本号的格式是固定的

        1.0.yyyyMMdd-SNAPSHOT,yyyyMMdd为项目上线时间

        1.0.yyyyMMdd.XXX-SNAPSHOT,yyyyMMdd为项目上线时间,XXX为迭代号

4、父工程<profiles>标签中,对于需要引入哪些项目,使用的标签存在一定规律,但是注意一个项目存在多种类型的标签

         例如上图,bus-frp-aat项目需要引入bus-frp-rdf项目提供的client接口(使用的FEIGN接口),部署在feature开发环境中,aat的版本号使用<current.project.version>标签,rdf的版本号使用<frp.rdf.version>标签,但是在其他项目中,rdf的版本号可能使用的其他标签。

待解决问题

  1. 扫描迭代下所有项目的所有POM文件
  2. 处理XML文件
  3. 依赖项目的版本号修改,注意不在本次迭代中的项目,对应依赖版本号不做修改(上图中因为auth项目不在本次迭代中,所以<frp.auth.version>标签不做修改)

问题解决思路

  1. 因为没有条件拿到项目管理工具的数据库,所以采用传入参数的方式判断需要处理哪些项目;换句话说,扫描根目录下的哪些文件夹;也由此判断更改哪些标签;
  2. POM.XML文件可以当作TXT文件使用Python进行读写;
  3. 考虑到好多同事没用过Python,降低使用门槛,使用Python标准库xml.etree.ElementTree来解析XML文件

预计节省工时

        平均每个项目迭代5~10分钟

开发中遇到的问题

1、<profiles>标签中,引入依赖标签不规范,同一个项目可能会有不同的标签,所以我写死了一个字典池,用来将项目和标签关联处理

2、xml.etree.ElementTree包的find、findall方法不知道什么原因无法生效(怀疑是XML是带命名空间),暂时由于时间关系,我使用.endswith函数,使用嵌套循环实现xml文件标签匹配逻辑,等有空了后面再优化(这样代码嵌套循环显得很low,勿喷)

3、xml.etree.ElementTree修改XML后,每个标签前增加了命名空间,为了解决这个问题,在处理XML之前,直接设定命名空间

ET.register_namespace('', 'http://maven.apache.org/POM/4.0.0')

4、xml.etree.ElementTree修改XML后,删除了注释及文件头信息<?xml version="1.0" encoding="UTF-8" standalone="no"?>;所以我在代码写文件的时候,增加了xml_declaration=True选项,但是,该选项自动生成的文件头格式不同于idea生成项目时自动生成的pom文件头信息格式,这个不打紧,且没有解决方案,因为xml.etree.ElementTree写死了头部信息(也许换一个处理XML的包就没这么麻烦了)

脚本使用方法

1、首先进入脚本所处文件夹,使用cmd命令窗口

 2、输入Python命令,格式如下:

## 命令格式:
## -- path 工作空间根路径,例如 D:\workspace
## -- yyyyMMdd 项目版本号,例如 20221019
## -- version 迭代号,例如 334
## -- project_a,project_b 本次迭代中的项目,使用,分隔,中间不加空格
##   (注意是项目原始名,不是k8s的实例名,例如 bus-frp-bfs,bus-frp-fes,不能加-web)
python replace_pom_version.py path yyyyMMdd version project_a,project_b

## 举例1
python replace_pom_version.py D:\workspace 20221027 334 bus-frp-aat,bus-frp-rdf

## 举例2 目前工作中使用到的所有项目
python replace_pom_version.py D:\workspace 20221027 334 bus-frp-aat,bus-frp-rdf,bus-frp-fmi,bus-frp-rdf-mirror,bus-frp-auth,bus-frp-fes,bus-frp-fpr,bus-frp-bfs,bus-frp-fpm,bus-frp-job,bus-frp-report,bus-frp-message,bus-frp-file,fofund-i18n,fofund-research,fofund-research-wind

3、idea检查后直接切换分支,脚本修改的内容会直接带到本地切换的分支中

 

脚本地址

https://github.com/MaverickGao/python_utils/blob/feature_20221029/utils/replace_pom_version.pys

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值