maven 打包报错 'version' contains an expression but should be a constant.@ xxx:xxx pom.xml, line 14, column 14

发布时间:2022-07-06 11:25:09 作者:yexindonglai@163.com 阅读(3043)

1、问题描述

新公司,一个项目进行二次开发,使用 mvn clean install 打包时报出以下错误

  1. 'version' contains an expression but should be a constant. @ org.springblade:blade-service-api:${blade.project.version}, D:\java_project\eiot-saas\blade-service-api\pom.xml, line 14, column 14

只看文字可能不太直观,再来张图吧

2、原因分析

'version' contains an expression but should be a constant 这句话翻译成中文意思是:“version 版本号不能使用表达式,应该使用一个写死的常量 ${blade.project.version}

我们先看看pom.xml文件内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>SpringBlade</artifactId>
  7. <groupId>org.springblade</groupId>
  8. <version>3.3.1</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>blade-service-api</artifactId>
  12. <name>${project.artifactId}</name>
  13. <version>${blade.project.version}</version>
  14. <packaging>pom</packaging>
  15. <description>SpringBlade 微服务API集合</description>
  16. </project>

重点就在这一行,所以通过刚刚的翻译由此可知,这个 version 标签里面不能使用表达式;必须是一个具体的版本号才行;

  1. <version>${blade.project.version}</version>

解决方案

知道问题在哪了,那就着手解决吧!

方案一、修改版本号

将version 标签内容改为一个具体的版本即可,只要不带${}符号,你想怎么写都行;比如:

  1. <version>3.3.1</version>
方案二、使用maven插件变更版本号

变更版本号需要使用maven插件执行以下命令,注意:这个命令一定要在父项目的根目录下执行才有效

  1. mvn -N versions:update-child-modules

执行这个命令后,就会将所有依赖的地方全部变成新的版本号,且会在每个子module工程中生成一个名为pom.xml.versionsBackup的文件,这个文件和原来的 pom.xml 内容是一样,只是有一点不同,pom.xml.versionsBackup是将 version 标签的内容改为了具体的版本号

然后在执行mvn clean install 命令就可以正常打包了。

关键字Maven