
本文介绍在使用 versions-maven-plugin 时,如何高效、可靠地为多个 maven 属性(如依赖版本号)同时赋值,涵盖命令行分步执行、shell 脚本封装及 pom 静态声明三种主流方案。
本文介绍在使用 versions-maven-plugin 时,如何高效、可靠地为多个 maven 属性(如依赖版本号)同时赋值,涵盖命令行分步执行、shell 脚本封装及 pom 静态声明三种主流方案。
Maven 的 versions-maven-plugin 是管理项目版本与属性的常用工具,但其 versions:set-property 目标(goal)原生仅支持一次更新单个属性。这意味着无法通过逗号分隔或多参数覆盖的方式一次性设置 myartifact.version 和 mysecondArtifact.version —— 如下命令无效:
# ❌ 错误示例:后一个 -Dproperty 会覆盖前一个,仅生效最后一个 mvn versions:set-property \ -Dproperty=myartifact.version -DnewVersion=10.1.1 \ -Dproperty=mysecondArtifact.version -DnewVersion=10.5.1
✅ 正确做法一:分步执行(推荐用于 CI/CD 或临时调试)
最直接、兼容性最强的方式是连续调用两次 versions:set-property,每次指定一个属性:
mvn versions:set-property -Dproperty=myartifact.version -DnewVersion=10.1.1 mvn versions:set-property -Dproperty=mysecondArtifact.version -DnewVersion=10.5.1
该方式确保每个属性被独立解析与写入 pom.xml 的 <properties> 块中,且变更会持久化到文件(默认行为)。注意:两次执行之间无需 clean,但建议在脚本中添加 -q(静默模式)提升可读性。
✅ 正确做法二:封装为 Shell 脚本(适用于重复操作)
为提升复用性与可维护性,可编写轻量级 Bash 脚本(如 update-versions.sh):
#!/bin/bash # usage: ./update-versions.sh 10.1.1 10.5.1 if [ $# -ne 2 ]; then echo "Usage: $0 <myartifact.version> <mysecondArtifact.version>" exit 1 fi mvn versions:set-property -Dproperty=myartifact.version -DnewVersion="$1" -q mvn versions:set-property -Dproperty=mysecondArtifact.version -DnewVersion="$2" -q echo "✅ Properties updated successfully:" echo " myartifact.version → $1" echo " mysecondArtifact.version → $2"
赋予执行权限后运行:
chmod +x update-versions.sh ./update-versions.sh 10.1.1 10.5.1
⚠️ 注意事项:
- 确保本地已安装 Maven 3.5+ 及 versions-maven-plugin:2.16.0+;
- 若 pom.xml 中未预先声明 <properties> 块,插件会自动创建;
- 执行后务必提交更新后的 pom.xml,避免版本漂移。
✅ 正确做法三:静态声明 + Profile 控制(适合多环境)
若多个版本值具有明确环境语义(如 dev/prod),更推荐在 pom.xml 中预定义并配合 Maven Profile 使用:
<properties>
<!-- 默认值(可选) -->
<myartifact.version>10.0.0</myartifact.version>
<mysecondArtifact.version>10.4.0</mysecondArtifact.version>
</properties>
<profiles>
<profile>
<id>release</id>
<properties>
<myartifact.version>10.1.1</myartifact.version>
<mysecondArtifact.version>10.5.1</mysecondArtifact.version>
</properties>
</profile>
</profiles>构建时激活 profile 即可:
mvn clean install -Prelease
此方式解耦了构建逻辑与版本配置,增强可审计性与团队协作一致性。
总结
| 方案 | 适用场景 | 是否持久化 | 是否需额外工具 |
|---|---|---|---|
| 分步 mvn versions:set-property | 快速调试、CI 单次任务 | ✅ 是 | ❌ 否 |
| Shell 脚本封装 | 频繁手动更新、跨团队共享 | ✅ 是 | ✅ 是(Bash) |
| Profile + 静态 properties | 多环境发布、配置即代码 | ✅ 是 | ❌ 否 |
无论选择哪种方式,请始终验证 pom.xml 中属性是否正确写入,并确保 <version>[${xxx}]</version> 的方括号语法与实际依赖仓库策略兼容(通常建议使用 ${xxx} 而非 [${xxx}],除非明确需要版本范围解析)。


















