【问题标题】:How to automate version number update process for my Eclipse plugin built with Maven如何为使用 Maven 构建的 Eclipse 插件自动化版本号更新过程
【发布时间】:2012-07-16 08:03:07
【问题描述】:

我正在处理一个类似于项目described here 的项目。 所以,它在父 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,还是我用的不太好。

【问题讨论】:

  • 需要更新的文件在哪里?考虑过滤这些文件?

标签: maven eclipse-plugin release tycho version-numbering


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    目标tycho-versions:set-version 将更改从主 pom.xml 引用的所有项目的版本。 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添加到master pom的project/build/plugins元素中。

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

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

    【讨论】:

    • 为什么要在 POM 中定义 newVersion?
    • 感谢您的提示。再想一想,您可能是对的,有人想在 pom 文件中存储新版本的可能性很小。
    • 谢谢!像魅力一样工作!
    • 在 pom 中他指定了 Tycho 插件的版本而不是 newVersion
    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2016-05-07
    • 2010-10-17
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多