‘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
相关推荐
C+++Python1 小时前
C++ 常量全面讲解
java·开发语言·c++
程序员小羊!1 小时前
17 Maven
java·maven
C+-C资深大佬1 小时前
C++ 数字与字符串互转
java·c++·算法
陈猪的杰咪1 小时前
DeepSeek V4 中转方案全解析 | Flash 成本仅为 GPT 的 1/90
java·人工智能·gpt·spring
zlpzlpzyd1 小时前
spring boot 4.1发布
java·数据库·spring boot
无籽西瓜a1 小时前
Plan-and-Execute 里的 DAG 是怎么工作的
java·后端·ai·agent·dag
ch.ju1 小时前
Java Programming Chapter 4——The difference between overloading and overwriting.
java·开发语言
我命由我123451 小时前
Android 开发问题:View 的 getWidth、getHeight 方法返回的值都为 0
android·java·java-ee·android studio·android jetpack·android-studio·android runtime