背景
正常来说,修改版本号使用mvn versions:set -DnewVersion=1.2.3-SNAPSHOT命令即可,不过貌似本地环境有问题,使用命令一直失败,所以想着搞一个通用的、不依赖maven的脚本。
脚本
完整脚本如下:
#!/bin/bash
NEW_VERSION="1.2.3-SNAPSHOT"
ROOT_POM="pom.xml"
# 获取所有 module 的 pom.xml 文件路径(排除根目录)
MODULES=$(find . -mindepth 2 -name "pom.xml")
PROJECT_DIR=$(pwd)
# 函数:仅修改非 <parent> 块内的 <version>
update_version() {
local FILE="$1"
local NEW_VERSION="$2"
local UPDATE_PARENT="$3"
local TMP_FILE=$(mktemp)
local IN_PARENT=false
local IN_DEPENDENCIES=false
while IFS= read -r LINE || [[ -n "$LINE" ]]; do
# 判断是否进入/离开 parent 或 dependencies 块
if [[ "$LINE" == *"<parent>"* ]]; then
IN_PARENT=true
elif [[ "$LINE" == *"</parent>"* ]]; then
IN_PARENT=false
elif [[ "$LINE" == *"<dependencies>"* ]]; then
IN_DEPENDENCIES=true
elif [[ "$LINE" == *"</dependencies>"* ]]; then
IN_DEPENDENCIES=false
fi
if [[ "$LINE" == *"<version>"* && "$IN_PARENT" == "$UPDATE_PARENT" && "$IN_DEPENDENCIES" == "false" ]]; then
LINE=$(echo "$LINE" | sed -E 's|<version>[^<]*</version>|<version>'"$NEW_VERSION"'</version>|')
fi
echo "$LINE" >> "$TMP_FILE"
done < "$FILE"
mv "$TMP_FILE" "$FILE"
}
# 更新根项目版本
echo "正在更新根项目版本: $ROOT_POM"
update_version "$ROOT_POM" "$NEW_VERSION" false
# 循环更新每个模块中的version
for MODULE in $MODULES; do
if [ "$MODULE" != "$ROOT_POM" ]; then
echo "正在更新模块版本: $MODULE"
update_version "$MODULE" "$NEW_VERSION" true
fi
done
echo "版本更新完成,新版本为: $NEW_VERSION"
使用方法
保存为update_version.sh并赋予执行权限:
chmod +x update_version.sh
./update_version.sh 1.2.3-SNAPSHOT
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论
大佬这个博客是什么搭建的呀,用的什么主题呢?wordpress么
Chrome 138.0.0.0中国-湖北-武汉
@wbmins 是WordPress,主题是Kratos,然后自己修改了些样式。
Chrome 137.0.0.0中国-北京
文章写得不错,怎么不继续了
Chrome 109.0.0.0中国-江苏-苏州