1、问题描述
新公司,一个项目进行二次开发,使用 mvn clean install
打包时报出以下错误
'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
文件内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>SpringBlade</artifactId>
<groupId>org.springblade</groupId>
<version>3.3.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>blade-service-api</artifactId>
<name>${project.artifactId}</name>
<version>${blade.project.version}</version>
<packaging>pom</packaging>
<description>SpringBlade 微服务API集合</description>
</project>
重点就在这一行,所以通过刚刚的翻译由此可知,这个 version 标签里面不能使用表达式;必须是一个具体的版本号才行;
<version>${blade.project.version}</version>
解决方案
知道问题在哪了,那就着手解决吧!
方案一、修改版本号
将version 标签内容改为一个具体的版本即可,只要不带${}
符号,你想怎么写都行;比如:
<version>3.3.1</version>
方案二、使用maven插件变更版本号
变更版本号需要使用maven插件执行以下命令,注意:这个命令一定要在父项目的根目录下执行才有效
mvn -N versions:update-child-modules
执行这个命令后,就会将所有依赖的地方全部变成新的版本号,且会在每个子module工程中生成一个名为pom.xml.versionsBackup
的文件,这个文件和原来的 pom.xml
内容是一样,只是有一点不同,pom.xml.versionsBackup
是将 version 标签的内容改为了具体的版本号
然后在执行mvn clean install
命令就可以正常打包了。