2012-09-17 49 views
3

我正在用rpm-maven-plugin構建三個軟件包。一個父母和兩個需要父母在同一版本中的插件。一切正常,直到我用XY-SNAPSHOT版本構建它。然後我的rpm版本被截斷爲XY部分,但${project.version}的值仍然是XY-SNAPSHOT。 它導致插件需要XY-SNAPSHOT父版本,而我已經安裝了XY版本。rpm-maven-plugin截斷rpm版本

我不知道是否可以使用「截斷」版本「要求」部分或強制插件截斷我的版本...

這是我的配置:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>rpm-maven-plugin</artifactId> 
    <version>2.0.1</version> 
    <executions> 
     <execution> 
      <id>parent-package</id> 
      <goals> 
       <goal>rpm</goal> 
      </goals> 
      <configuration> 
       <name>parent-package</name> 
       <mappings> 
        (...) 
       </mappings> 
      </configuration> 
     </execution> 
     <execution> 
      <id>first-plugin</id> 
      <goals> 
       <goal>rpm</goal> 
      </goals> 
      <configuration> 
       <name>first-plugin</name> 
       <mappings> 
        (...) 
       </mappings> 
       <requires> 
        <require>parent-package = ${project.version}</require> 
       </requires> 
      </configuration> 
     </execution> 
     <execution> 
      <id>second-plugin</id> 
      <goals> 
       <goal>rpm</goal> 
      </goals> 
      <configuration> 
       <name>second-plugin</name> 
       <mappings> 
        (...) 
       </mappings> 
       <requires> 
        <require>parent-package = ${project.version}</require> 
       </requires> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

首先,您應該使用更新版本的rpm-maven-plugin(http://search.maven.org/#artifactdetails|org.codehaus.mojo|rpm-maven-plugin|2.1-alpha-2|maven -plugin) – khmarbaise

+0

我會檢查參數:http://mojo.codehaus.org/rpm-maven-plugin/rpm-mojo.html#release – khmarbaise

+0

@khmarbaise我不想(我不能)使用阿爾法版本,其版本表明它可能不穩定或經過良好測試。 –

回答

5

的RPM規範將-視爲特殊字符。見this is the best I could find in Google

The version number is used in version comparisons. The RPM comparison algorithm 
is fairly complex, but can get fooled by strange version numbers. So, your best 
bet is to stick to dotted numerics, such as 1.5 or 2.3.1.1.4 or 1.0. Version 
numbers such as these will compare best from within the RPM system. For example: 
    Version: 1.1.2 
You cannot use a dash in the version number, as RPM uses the dash to separate 
the Name-Version-Release elements. 

所以Maven的版本,例如1.0-SNAPSHOT不會是一個有效的RPM版本號。

Mojo的RPM Maven Plugin會對版本號進行一些轉換以「幫助」您。具體地說,它剔除了-SNAPSHOT因爲你已經發現,如果有一個-SNAPSHOT它設置轉速釋放是SNAPSHOTyyyymmddHHMMSS(注意版本是用於區分兩種不同的構建相同版本的RPM)的

什麼你需要做的是獲取一些屬性設置爲轉換後的版本。有很多方法可以做到這一點。正如我在評論中所建議的,您可以使用build-helper:regex-property來轉換該屬性。這種方法的缺點是,如果RPM插件修改了它用於版本轉換的規則,那麼正則表達式可能會使您不同步。

正確的解決辦法是使用rpm:version目標設置rpm.version財產給你,所以你的配置就變成了:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>rpm-maven-plugin</artifactId> 
    <version>2.0.1</version> 
    <executions> 
     <execution> 
      <id>properties</id> 
      <goals> 
       <goal>version</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>parent-package</id> 
      <goals> 
       <goal>rpm</goal> 
      </goals> 
      <configuration> 
       <name>parent-package</name> 
       <mappings> 
        (...) 
       </mappings> 
      </configuration> 
     </execution> 
     <execution> 
      <id>first-plugin</id> 
      <goals> 
       <goal>rpm</goal> 
      </goals> 
      <configuration> 
       <name>first-plugin</name> 
       <mappings> 
        (...) 
       </mappings> 
       <requires> 
        <require>parent-package = ${rpm.version}</require> 
       </requires> 
      </configuration> 
     </execution> 
     <execution> 
      <id>second-plugin</id> 
      <goals> 
       <goal>rpm</goal> 
      </goals> 
      <configuration> 
       <name>second-plugin</name> 
       <mappings> 
        (...) 
       </mappings> 
       <requires> 
        <require>parent-package = ${rpm.version}</require> 
       </requires> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

如果您需要的屬性有不同的名稱,只是用versionProperty配置參數,但請記住,多次執行後,您可能希望將其保留爲默認值

+0

工程只是perferctly!謝謝 :) –

1

要擴展@ StephenConnolly的出色答案,mavenrpm版本控制策略有一些特定的差異。這些差異主要圍繞maven的版本限定符和rpm的構建(或發佈)屬性。

Maven將沒有限定符的任何版本視爲比沒有限定符的版本更新。對於以SNAPSHOT結尾的任何限定符,Maven也有特殊處理。另一方面,RPM需要內部版本號並對該值進行比較。毫不奇怪,rpm對於SNAPSHOT沒有特殊的邏輯。

因爲我們在maven工作,所以我們需要遵循maven的規則/行爲,並確定如何按照rpm來產生這些工作。這意味着,我們需要建立規則,按摩轉釋放值以下基於Maven的預選賽來實現:

  • 1.0-α-1-快照
  • 1。0-α-1
  • 1.0-α-2
  • 1.0-β-1
  • 1.0-快照
  • 1.0

此外,我們希望多個快照構建的rpm的,以便能夠識別更新(按建立日期)並正確升級。

release attribute的文檔描述了實現這種所需行爲的規則。

歡迎您重寫此默認行爲,但我會提醒您非常小心,確保使用相同的元數據(arch,os,version,release)構建的rpm包含相同的內容。