2012-09-17 48 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包含相同的内容。