‘version‘ must be a constant version but is ‘${revision}‘

文章目录

Maven ${revision} 构建错误修复说明

问题现象

执行 Maven 命令时,构建在读取 pom.xml 阶段失败:

text 复制代码
'version' must be a constant version but is '${revision}'

出错位置是 pom.xml 中的项目版本:

xml 复制代码
<version>${revision}</version>

解决问题的关键步骤

  1. 检查 Maven 报错信息,确认失败发生在解析项目版本号阶段。
  2. 在项目中搜索 revision,发现 pom.xml 使用了 ${revision},但没有定义对应的 <revision> 属性。
  3. 用临时命令参数 -Drevision=0.0.1-SNAPSHOT 验证判断,Maven 可以越过原来的版本号错误,说明根因就是 revision 未定义。
  4. pom.xml<properties> 中加入默认版本号:
xml 复制代码
<revision>0.0.1-SNAPSHOT</revision>
  1. 重新执行 Maven clean,构建成功。

原理说明

${revision} 是 Maven 的 CI-friendly version 写法,常用于让项目版本号可以通过命令行、CI/CD 或统一配置动态传入。

例如:

xml 复制代码
<version>${revision}</version>

这表示项目版本不是直接写死在 <version> 里,而是从 Maven 属性 revision 中读取。

Maven 属性可以来自几个地方:

  • pom.xml<properties>
  • 命令行参数,例如 -Drevision=0.0.1-SNAPSHOT
  • 父 POM 或 profile 中的属性。
  • CI/CD 环境注入的参数。

本项目当前只有一个独立的 pom.xml,里面使用了 ${revision},但是没有定义:

xml 复制代码
<properties>
    <revision>0.0.1-SNAPSHOT</revision>
</properties>

也没有在 Maven 命令中传入:

bash 复制代码
mvn -Drevision=0.0.1-SNAPSHOT clean

所以 Maven 在解析项目模型时无法把 ${revision} 替换成真实版本号,最终报错。

为什么这样修复

revision 写入 pom.xml<properties> 后,项目本身就有了默认版本号,不依赖 IDE、命令行或 CI 环境额外传参。

这样既保留了 ${revision} 的灵活性,也让本地直接执行 Maven 命令可以正常工作。

后续如果需要在 CI/CD 中覆盖版本号,仍然可以使用:

bash 复制代码
mvn -Drevision=1.0.0 clean package

命令行传入的 -Drevision=... 会覆盖 pom.xml 中的默认值。

本次修改

修改文件:

text 复制代码
xiaoha-ai-robot-springboot-14.7节/xiaoha-ai-robot-springboot/pom.xml

新增内容:

xml 复制代码
<revision>0.0.1-SNAPSHOT</revision>

验证结果:

text 复制代码
BUILD SUCCESS
相关推荐
捡田螺的小男孩19 分钟前
什么是 Skill?手把手带你写一个简单有用的 Skill!
前端·后端·程序员
IT_陈寒25 分钟前
Redis集群这个坑,差点让我通宵
前端·人工智能·后端
极创信息40 分钟前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate
用户8356290780511 小时前
Python 自动化 Word 文本框处理:创建、定位、填充内容与管理
后端·python
网渡科技1 小时前
向量数据库选型指南:RAG场景下的性能对比与调优策略
后端
汉字萌萌哒1 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
riverNijika1 小时前
项目学习笔记:C++基础同步输出日志库
后端
Lyra_Infra1 小时前
OpenClaw 升级及 Channel 安装故障排查与遗留问题分析
后端·npm
喜欢的名字被抢了1 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
江小渔1 小时前
训练工程与训练平台入门 31 安装 Kubeflow Trainer,并跑第一个 TrainJob
后端