python自动更新pom文件

本文介绍了使用Python和Shell脚本自动更新POM文件中版本号的方法。对比了Shell脚本的实现及其局限性,如处理XML文件的能力有限,不易在Windows环境下运行。接着详细讲述了Python的xml.etree.ElementTree模块在处理XML文件的优势,如何解析和修改POM文件,以及解决过程中遇到的命名空间、中文乱码和注释丢失等问题。
摘要由CSDN通过智能技术生成

前言

  • 项目越来越多,版本管理越来越麻烦,在项目上我使用 maven version 来进行版本管理。主要还是在分布式项目中模块众多的场景中使用,毕竟各个模块对外的版本需要保持统一。

  • 关于这个插件如何使用呢?也是非常的简单。只需要在maven视图中进行设置版本号即可将分模块项目的版本进行升级了。

  • 除了idea插件外,maven本身也提供了一个版本管理工具 versions-maven-plugin 。 具体用法以后有机会在赘述。

自定义实现版本更新

  • 作为一个专业懒人,我还是觉得idea的插件不够智能,确切的说还不够自动化。之前我已经动手实现了防 jenkins 自动打包上传启动服务的脚本的功能了,难道提交合并代码这种简单的事情还需要我自己处理吗。不得不承认代码冲突了的确还是需要认为干涉的,但是在平时开发中有多少概率会发生代码冲突呢?我们都是分工合作基本上代码冲突概率很低。
  • 关于代码提交,自己分支如何合并到dev, 如何保证自己分支代码最新等等这些场景我们只需要通过脚本来进行自动化操作就行了。针对这些功能场景我大概写了两个脚本 batfhmerge.sh 和 batchgrade.sh 就搞定了。
  • 然而我想说的是关于项目的版本如何升级。上面也提到了我们分工合作就必然涉及到别人使用你的jar的场景了。你可以使用 SNAPSHOT 版本来保证别人拉取到你最新的功能代码,但是有些公司会要求使用非 SNAPSHOT 版本进行管理也就是正式版本,这样做的好处就是容易找到之前的版本代码功能。

SHELL 实现

  • 之前用SHELL 实现了自动更新置顶项目的版本号为最新日期后缀。虽然使用起来没发现有什么BUG, 但是感觉代码实现上还是很弱智的。
# 该脚本主要用来升级发包期间修改各服务版本
FILEPATH=$1
GROUPID=$2
ARTIFACTID=$3
FILENAME=$4
while getopts ":f:g:a:" opt
do
    case $opt in
        f)
        FILENAME=$OPTARG
        echo "您输入的文件配置:$FILENAME"
        ;;
        g)
        GROUPID=$OPTARG
        echo "您输入的groupid配置:$GROUPID"
        ;;
        a)
        ARTIFACTID=$OPTARG
        echo "您输入的artifactid配置:$ARTIFACTID"
        ;;
        ff)
        FILENAME=$OPTARG
        echo "您输入的带修改文件为:$FILENAME"
        ;;
        ?)
        echo "未知参数"
        exit 1;;
    esac
done
echo "开始修改版本号"
NEWCONTENT=1.2.5.$(date +%Y%m%d)
LINE=`cat ${FILENAME} | grep -n -A 1 '<groupId>'"${GROUPID}"'<\/groupId>'| grep -n '<artifactId>'"${ARTIFACTID}"'<\/artifactId>' | awk -F "[:-]+" '{print $2}'`
echo 具体行号:$LINE
if [[ -z $LINE  ]]
then
    echo 未匹配
    exit
fi
VERSIONOLDCONTENT=`sed -n ''"$((LINE+1))"'p' ${FILENAME}| grep '[0-9a-zA-Z\.-]+' -Eo | sed -n '2p'`
echo ${VERSIONOLDCONTENT}
#gsed -i  ''"$((LINE+1))"'c\'"${NEWCONTENT}"'' pom.xml
sed -i "" ''"$((LINE+1))"'s/'"${VERSIONOLDCONTENT}"'/'"${NEWCONTENT}"'/' ${FILENAME}
  • 其实逻辑很简单,主要就是寻找 groupId 和 artifactId ,最后确定好 version 对应的行号将最新的日期后缀版本进行填充进去。
  • 填充呢肯定需要三剑客中的 SED 进行操作,那就需要先获取到以前的旧版本,然后进行替换操作。

为什么使用SHELL

  • shell脚本作为后端程序猿必备技能选择他进行实现也是为了温故下shell的知识。基本上脚本离不开三剑客,换句话说会了三剑客你就可以做好半个运维工作了。
  • 有了这个脚本我每次在功能开发完成之后,会通过SHELL脚本进行版本升级以及自己分支合并到dev分支,这样方便别人获取到最新的代码。

python实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值