2011-08-04 44 views
20

我有一個使用Spring框架和Git的Java項目,我想顯示一個內部版本號。我找到了Build Number Maven plugin。使用Git的內部版本號是Git哈希。我不喜歡那個,我認爲約會更具表現力。Maven內部版本號插件,如何在文件中保存內部版本號?

我發現這個excellent blog article解釋瞭如何使用SVN和Git的不同配置文件的內部編號插件。由於我只是使用Git,而不是創建一個新的配置文件,所以我只是將插件部分複製到我的構建標籤中。

當我運行「MVN套裝」它告訴我:

[INFO] --- buildnumber-maven-plugin:1.0:create (default) @ sherd --- 
[INFO] Storing buildNumber: 2011-08-04_21-48_stivlo at timestamp: 1312487296631 

這看起來不錯,但我不知道,是它存儲在何處? 「git status」沒有檢測到任何新文件,它似乎也不在target/target中(target /在我的.gitignore中)。

也許我必須更改配置以將內部版本號存儲在文件中?我如何使用內部版本號值?


感謝Michael-O的提示,我閱讀了關於how to filter resource files in Maven Getting Started Guide的章節。我在SRC創建的文件application.properties /主/資源/屬性/用以下內容application.properties:

# application properties 
application.name=${pom.name} 
application.version=${pom.version} 
application.build=${buildNumber} 

我已經添加了我的構建部分中的以下XML片段:

<resources> 
    <resource> 
     <directory>src/main/resources/properties</directory> 
     <filtering>true</filtering> 
    </resource> 
</resources> 

現在,當我從命令行調用「MVN套裝」,這個屬性的文件就會保存在目標/班/屬性/ application.properties,例如包含以下內容:

# application properties 
application.name=Sherd Control Panel 
application.version=1.0.1-SNAPSHOT 
application.build=2011-08-05_05-55_stivlo 

一切工作的命令行罰款,但是,嘆了口氣,m2eclipse的給出了構建錯誤:

05/08/11 6.05.03 CEST: Build errors for obliquid-cp; 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal 
org.codehaus.mojo:buildnumber-maven-plugin:1.0:create (default) on project 
sherd: Cannot get the branch information from the scm repository : 
Exception while executing SCM command. 

出於某種原因,m2eclipse的嘗試連接到我的倉庫,但不能因爲它是一個Git倉庫用SSH訪問和一個私鑰。我想知道是否可以告訴m2eclipse不連接到Git。


經過更多的挖掘,我發現有關revisionOnScmFailure選項,將其設置爲true,現在m2eclipse也可以工作。作爲參考,這裏是我使用的buildnumber maven插件的完整配置(它在build/plugins部分中的pom.xml中)。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>buildnumber-maven-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
     <execution> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>create</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <doCheck>false</doCheck> 
     <doUpdate>false</doUpdate> 
     <revisionOnScmFailure>true</revisionOnScmFailure> 
     <format>{0,date,yyyy-MM-dd_HH-mm}_{1}</format> 
     <items> 
      <item>timestamp</item> 
      <item>${user.name}</item> 
     </items> 
    </configuration> 
</plugin> 

回答

4

將其存儲在過濾的屬性文件中。

0

documentation頁面顯示屬性文件存儲在${basedir}/buildNumber.properties,該文件是在buildnumber:create階段運行時創建的。

+0

但是它不創建該文件,至少與我的配置。我通過過濾屬性文件取得了部分成功,但我遇到了另一個問題,就像我更新後的問題。 – stivlo

+0

您是否嘗試過手動創建文件,並首先在其中添加一個起始buildNumber? 這樣做,做你的事情,然後檢查數字是否增加。確保你達到了要求的要求。 –

+0

感謝您的建議。我嘗試創建一個空的buildNumber.properties文件,並執行buildnumber:create並且什麼也沒有發生,然後我試圖放進一個1中,執行一個buildnumber:create並且什麼都沒發生。與此同時,我剛剛發現了使用過濾屬性的最後一個問題的解決方案。我將用完整的解決方案更新我的問題。 – stivlo

9

您不應將revisionOnScmFailure選項設置爲true,它不指望布爾值。將它設置爲當SCM不可用時要使用的修訂字符串,如na或類似的。因爲您覆蓋了內部版本號格式,所以對您的情況無關緊要,但它會更加正確。

請參閱buildnumber-maven-plugin docs

+0

明白了,謝謝 – stivlo

+0

謝謝,在Mac OS X 10.10上通過Netbeans構建時,我無法使插件工作,但通過命令行構建起來很好。設置這個屬性讓我繼續通過IDE工作,Jenkins服務器顯然也可以工作。 – Hiro2k

2

我無法重現OP報告的問題。在我的情況下,命令行和m2eclipse都可以正常工作,並且文件在目標/類文件夾中正確生成。 @KasunBG提供的答案不正確。

 <format>{0,number}</format> 
     <items> 
      <item>buildNumber</item> 
     </items> 

buildNumber.properties用於存儲一些可以增加:只有當您使用以下的buildNumber.properties產生。由於這個原因(我認爲)如果你使用時間戳/ scmVersion等插件不會生成這個文件等。