



















正常来说,修改版本号使用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
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。