Maven生成WAR包時自動更新版本號version
阿新 • • 發佈:2019-01-06
Maven外掛之buildnumber-maven-plugin
某些情況下(這種情況一般很少見),使用maven構建專案時,需要一個不重複的序列號,比如說,打包時,包名稱以當前構建時間結尾,或者每次生成的jar包中包含唯一的序列號,等等;
這個時候,就用到了buildnumber外掛,官方網址:
http://mojo.codehaus.org/buildnumber-maven-plugin/index.html
該外掛能按照指定的方案生成序列號;首先引入該外掛
<!-- 根據系統時間生成唯一序列號 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.2</version> </plugin>
常用以下兩個目標:
buildnumber:create(基於SCM版本生成)
buildnumber:create-timestamp(基於系統時間生成)
兩個目標都預設繫結在initialize生命週期;其中create-timestamp目標是1.0-beta-5版本新增;
以下分別介紹:
buildnumber:create
其引數介紹如下:
個人認為,使用create-timestamp目標就足夠了。
有關"format"和"items"引數的使用,例子如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.2</version> <configuration> <format>At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.</format> <items> <item implementation="java.lang.Integer">7</item> <item>timestamp</item> <item>a disturbance in the Force</item> </items> </configuration> <executions> <execution> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> </executions> </plugin>
其他常用配置有
<configuration> <format>{0,number}.{1,number}.{2,number}</format> <items> <item>buildNumber0</item> <item>buildNumber1</item> <item>buildNumber2</item> </items> </configuration>
<configuration>
<format>{0,date,yyyy-MM-dd HH:mm:ss}</format>
<items>
<item>timestamp</item>
</items>
</configuration>
產生的 ${buildNumber}值分別如下:
At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
2.0.3
2005-10-06 2:22:55
其他詳細資訊,請參考官網
http://mojo.codehaus.org/buildnumber-maven-plugin/usage.html
PS:一個有用的實踐,自定義屬性,將生成的序列號賦值其中,便於其他外掛等地方使用;
<properties>
<buildtimestamp>${timestamp}</buildtimestamp>
</properties>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<buildNumberPropertiesFileLocation>${project.build.directory}</buildNumberPropertiesFileLocation>
<buildNumberPropertyName>verNum</buildNumberPropertyName>
<timestampFormat>{0,date,yyyyMMddHHmmss}</timestampFormat>
<items>
<item>timestamp</item>
</items>
</configuration>
</plugin>
<build>
<finalName>${project.artifactId}-${project.version}.v${verNum}-${timestamp}</finalName>
...
<build>