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

推荐订阅源

J
Java Code Geeks
量子位
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
A
About on SuperTechFans
腾讯CDC
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
Last Week in AI
Last Week in AI
H
Help Net Security
WordPress大学
WordPress大学
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
博客园 - 【当耐特】
S
SegmentFault 最新的问题
美团技术团队
M
MIT News - Artificial intelligence
L
LangChain Blog
博客园 - 聂微东

李锋镝的博客

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