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后,發現版本已經改為具體的版本號了。
參考:
https://zhuanlan.zhihu.com/p/701573418