惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
小众软件
小众软件
腾讯CDC
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Y
Y Combinator Blog
Engineering at Meta
Engineering at Meta
美团技术团队
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
罗磊的独立博客
aimingoo的专栏
aimingoo的专栏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
C
Check Point Blog
大猫的无限游戏
大猫的无限游戏
Recent Announcements
Recent Announcements

李锋镝的博客

LiteLLM 本地代理搭建 Claude-HUD 使用文档 Kratos+ —— Kratos 主题二次开发记录 译文:如何将单体应用拆解为微服务 codebase-memory-mcp 极简完整使用指南 Claude Haiku 4.5、Claude Sonnet 4.6、Claude Opus 4.7 区别以及各自的新特性 SchedulingConfigurer详解 踩坑60+次后,我终于搞懂 Claude Skill 怎么写才会真的触发 Everything Claude Code 详细使用文档 配置Jackson使用字段而不是getter/setter来序列化和反序列化 这个域名注册整整十年了,十年时间,真快啊 Claude Code全维度实战指南:从入门到精通,解锁AI编程新范式 Apollo配置中心中的protalDB的作用是什么 org.apache.ibatis.plugin.Interceptor类详细介绍及使用 岁末 Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法 wordpress增加说说功能 Java 为什么有这么多 “O”? 别再背线程池的七大参数了,现在面试官都这么问 2024年11月1号 农历十月初一 我的第一个WordPress插件:Dylan Custom Plugin上线了 推荐一款比较养眼的Xshell配色方案 hnswlib installation failed 开工啦~ 阳了... MybatisCodeHelperPro激活 @Async注解的坑 新买的笔记本发货啦…… 这个中秋节感觉过的好累啊 IDEA下载源码报:Cannot connect to the Maven process. Try again later.
使用shell脚本统一修改maven项目的版本
李锋镝 · 2025-08-09 · via 李锋镝的博客

背景

正常来说,修改版本号使用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
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/article/tool/4491