‘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
相关推荐
LlmCraft|大模型工程实践11 小时前
08. Docker Compose 一键编排:多容器应用的指挥家
java·spring cloud·eureka
珍珠先生11 小时前
第14章 设计模式入门:单例、工厂、建造者与代理
java
leeyi11 小时前
把规则搬回家:三个 BC 的贫血→充血重构实录(第103篇)
后端
坐吃山猪11 小时前
JDK 8 到 JDK 21 新特性知识要点
java·开发语言·windows
坐吃山猪11 小时前
【多线程】FutureTask多线程底层实现
java·开发语言·数据库
weixin1997010801611 小时前
[特殊字符]《从0到1:闲鱼开放平台授权登录 + AccessToken 刷新 + 聚石塔部署完整链路》(附Python源码)
java·数据库·python
学长毕业设计11 小时前
基于SpringBoot的旅游美食攻略分享系统的设计与实现(源码+文档+讲解视频)
spring boot·旅游·美食
Freak嵌入式11 小时前
RP2040 PIO 编程模型与状态机原理:从硬件架构到工作逻辑全解析
java·大数据·开发语言·单片机·嵌入式硬件·硬件架构
程序员阿明11 小时前
spring boot4集成spring AI 2
人工智能·spring boot·spring
kakawzw11 小时前
Netty源码笔记
java·服务器·后端