1、场景描述
我现在又一个微服务项目,父pom的版本,使用<properties>定义好,如下所示:
<name>ypsx-finance-center</name>
<artifactId>ypsx-finance</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<properties>
<revision>2.0.21-SNAPSHOT</revision>
</properties>
子项目依赖父项目,如下所示:
<parent>
<artifactId>ypsx-finance</artifactId>
<groupId>com.ypsx</groupId>
<version>${revision}</version>
</parent>
但是我在使用maven打包的时候,发现子项目中父项目的模块还是${revision},没有改为具体的版本号
2.0.21-SNAPSHOT
2、原因
1.自Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符
2.但是在install或者deploy是无法识别的,就需要这个插件flatten-maven-plugin:发现使用插件之后,发现它是把这个新的pom打到jar包里。也就是说,
这个插件的作用就是在install或者deploy的时候,生成一个新的替换占位符的pom文件,也就是帮你替换了这些变量,接着把新的pom文件打入到jar包里。
所以我们需要再父项目的pom中添加如下插件
<build>
<plugins>
<!--
1.自Maven 3.5.0-beta-1 开始,可以使用 ${revision}, ${sha1} and/or ${changelist} 这样的变量作为版本占位符
2.但是在install或者deploy是无法识别的,就需要这个插件:发现使用插件之后,发现它是把这个新的pom打到jar包里。也就是说,
这个插件的作用就是在install或者deploy的时候,生成一个新的替换占位符的pom文件,也就是帮你替换了这些变量,接着把新的pom文件打入到jar包里。
-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
再次install或者deploy后,发现版本已经改为具体的版本号了。
参考: