‘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
相关推荐
子兮曰23 分钟前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
用户8356290780511 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
小满zs1 小时前
Go语言第二章(小无相功)
后端·go
用户8356290780511 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
karry_k1 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
妙码生花1 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
贰先生1 小时前
Xiuno BBS X版 用户封禁系统
后端
karry_k1 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
ServBay2 小时前
不会写代码也能建站?AI 时代,非技术创始人如何从零搭建自己的 Web 项目
后端·mcp
Moladev2 小时前
如何在 Electron 中接入 OpenAI 兼容的大模型 API:Snaptium 的主进程代理实践
后端