前言
- 项目越来越多,版本管理越来越麻烦,在项目上我使用
maven version
来进行版本管理。主要还是在分布式项目中模块众多的场景中使用,毕竟各个模块对外的版本需要保持统一。
![](https://i-blog.csdnimg.cn/blog_migrate/72236b9dc919c1a2386f20b0f81feb21.png)
- 关于这个插件如何使用呢?也是非常的简单。只需要在maven视图中进行设置版本号即可将分模块项目的版本进行升级了。
![](https://i-blog.csdnimg.cn/blog_migrate/6b072efb496f0a18fab140e3e72a341f.png)
- 除了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实现
<