1. 程式人生 > >Maven生成WAR包時自動更新版本號version

Maven生成WAR包時自動更新版本號version

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>