2009-08-04 112 views
10

我試圖將svn.revision添加到項目版本作爲內部版本號,並且似乎無法這樣做。我的jar具有durin包裝的正確名稱,但它安裝在我的本地存儲庫中,就好像$ {buildNumber}在設置版本時是/未定義的。我可以使用buildnumber-maven-plugin設置項目版本嗎?

我得到富-1.0.0-SNAPSHOT- $ {} buildNumber的代替富-1.0.0-SNAPSHOT-

任何想法,我做錯了或正在添加的修訂到項目版本一個壞主意?謝謝您的幫助。

<project> 
    ... 
    <version>1.0.0-${release.identifier}-${buildNumber}</version> 
    <properties> 
    <release.identifier>SNAPSHOT</release.identifier> 
    </properties> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>buildnumber-maven-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>useLastCommittedRevision</id> 
      <goals> 
       <goal>create</goal> 
      </goals> 
      <configuration> 
       <useLastCommittedRevision>true</useLastCommittedRevision> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    ... 
</project> 

回答

8

的問題有兩個部分:

  1. 你試圖將buildNumber設置到版本之前它被解決,這樣它總是會${buildNumber}而不是解析值。

    您應該將buildNumber設置爲構建中的finalName元素,而不是嘗試動態更改版本。這將在本地存儲庫中創建具有預期名稱的工件。

  2. 安裝插件將忽略finalName並將其部署爲1.0.0-SNAPSHOT不管我是否知道解決該問題的方法。如果您按如下所示配置插件,則buildNumber已添加到清單中。

    所以,你的配置是這樣的:

    <version>1.0.0-${release.identifier}</version> 
    ... 
    <build> 
        <finalName>${project.artifactId}-${project.version}-${buildNumber}</finalName> 
        ... 
    </build> 
    

我會避免使用SNAPSHOT項目的內部版本號。

Maven提供了SNAPSHOT關鍵字來表示活躍開發中的一個易變項目。因此,如果您參考具有SNAPSHOT依賴項版本的項目,Maven將自動檢查更新並保持您的依賴關係同步。

如果您隨後將版本號添加到該版本的末尾,您將不得不手動更新依賴項,以免失去使用SNAPSHOT後綴的好處。

我個人儘可能避免使用內部版本號。如果我必須更新一個項目,我只是碰撞版本號,或使用後綴beta-2RC2。如果您需要跟蹤SNAPSHOT中的修訂版,我建議將其添加到清單中,以便檢查構建版本的起源,但使用標準SNAPSHOT後綴來允許Maven正常解析版本。以下配置顯示如何將修訂添加到清單。

就你的配置而言,我認爲假設你的SCM URL設置正確。如果您的POM中沒有SCM配置,可能是問題所在。

你可以運行-X並檢查插件的任何輸出,指出爲什麼它沒有設置屬性?

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>maven-buildnumber-plugin</artifactId> 
    <version>0.9.4</version> 
    <executions> 
    <execution> 
     <id>useLastCommittedRevision</id> 
     <phase>validate</phase> 
     <goals> 
     <goal>create</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <archive> 
     <manifest> 
     <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
     </manifest> 
     <manifestEntries> 
     <Implementation-Build>${buildNumber}</Implementation-Build> 
     </manifestEntries> 
    </archive> 
    </configuration> 
</plugin> 
3

buildnumber-maven-plugin後補充一點:

<plugin> 
    <groupId>io.github.michaldo</groupId> 
    <artifactId>nashorn-maven-plugin</artifactId> 
    <version>0.0.1</version> 
    <executions> 
     <execution> 
      <phase>validate</phase> 
      <goals> 
       <goal>eval</goal> 
      </goals> 
      <configuration> 
       <script> 
        $project.artifact.version = "${buildNumber}"; 
       </script> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

而且buildNumber將被包裝的認可和部署。

+0

謝謝。 Fyi,在轉換到git之後,我們開始從jenkins傳遞構建器,因爲git使構建編號不那麼流利 – 2017-01-15 15:46:19

相關問題