15

我正在使用与此处描述的项目类似的项目 。因此,它在父 pom.xml 中有一些模块:

 <modules>
    <module>../de.vogella.tycho.plugin</module>
    <module>../de.vogella.tycho.feature</module>
    <module>../de.vogella.tycho.p2updatesite</module>
 </modules>

这些模块有一个通用的版本号,例如1.0.0-SNAPSHOT或没有-SNAPSHOT。feature.xml 文件需要包含相同的版本号:

<feature
      id="com.my.feature"
      label="My plugin feature"
      version="1.0.0">

和:

<plugin
      id="com.my.plugin"
      download-size="0"
      install-size="0"
      version="1.0.0"
      unpack="false"/>

文件 category.xml(在 p2 更新站点项目中)和 MANIFEST.MF(在插件项目中)需要包含相同的值。

问题是:如何使用 Maven 自动化所有这些文件中的版本号更新过程?

我尝试使用 maven-release-plugin 和 maven-versions-plugin 解决这个问题。第一个插件做了很多未使用的操作(比如做很多 CVS 提交,我在这个项目中没有使用)。第二个插件只修改pom.xml文件,不修改feature.xml、category.xml和MANIFEST.MF,还是我用的不太好。

4

2 回答 2

22

对于这个问题,有一个特殊的tycho-versions-plugin。它(有意)与 maven-versions-plugin 相同,但也会更新 feature.xml 和 MANIFEST.MF 中的(冗余)版本。

更重要的是,该插件还更新了指定确切版本的引用,例如对 feature.xml 中插件的引用,或对 category.xml 中的功能的引用。所以最后,所有出现的工件版本都会更新,就像在重构中一样。

对于具有确切版本的参考资料,在正常的 Tycho 构建期间还会自动更新。因此,例如,如果您的功能在 version 中引用了您的插件1.0.0.qualifier,则此版本字符串将使用限定符的实际值进行更新,例如1.0.0.201207171147. 您可以使用此功能来最小化需要由 tycho-versions-plugin 更新的位置数量:您可以使用魔法版本,而不是在参考中指定当前版本文字0.0.0。作为正常构建的一部分,此版本也会自动更新到最新版本。

于 2012-07-17T15:07:21.280 回答
16

我想为像我这样经验不足的 maven 用户添加一些实用提示Tobias Oberlies的回答:

目标tycho-versions:set-version将更改从主 pom 引用的所有项目的版本。maven 配置文件(pom.xml)的版本字符串以及相应的 Eclipse/OSGi 工件(MANIFEST.MF、feature.xml、category.xml)将一致地更改。

要从命令行运行目标,请使用以下命令:

mvn org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=1.2.0-SNAPSHOT

在本例中,newVersion用户属性1.2.0-SNAPSHOT是要设置的新版本。

上面的命令行将使用最新版本的tycho-versions-plugin. 如果要使用某个版本的插件,则tycho-version-plugin需要将其添加到project/build/plugins主 pom.xml 的元素中。

<plugin>
  <groupId>org.eclipse.tycho</groupId>  
  <artifactId>tycho-versions-plugin</artifactId>  
  <version>${tycho-version}</version>  
</plugin> 

替换${tycho-version}为当前版本的 Tycho 或使用该名称和适当的值定义一个属性。

于 2015-12-06T15:30:38.907 回答