如何使用 Maven 和 Tycho 创建 Eclipse 插件版本?

How do I create an Eclipse plugin release using Maven and Tycho?

我正在构建一个 Eclipse 项目,其中包含许多打包在一起的插件。我为每个组件创建了 POM 文件,并为项目创建了一个主 POM。像这样:

projectDir\releng\pom.xml <-- Parent project
projectDir\proj1\pom.xml  <-- Child project 1
projectDir\proj2\pom.xml  <-- Child project 2

我的构建当前通过调用构建所有内容的父 POM 来工作。到目前为止,我一直在使用 0.0.1-SNAPSHOT 作为父 POM 的版本进行构建,并且在每个 Eclipse 插件中,我都将 0.0.1.qualifier 作为 MANIFEST.MF 文件中的版本。

我现在想将我的最新版本升级到 0.1.0。根据我的理解,这意味着我必须检查我所有的 POM 文件和 MANIFEST.MF 文件并升级它们中的版本(因为虽然版本是在父 POM 中定义的,但它在所有子 POM 中被引用POM:s)。

这是执行此操作的正确方法,还是有办法使整个过程自动化而不出错?

P.S。有 Maven Release plugin 但这不适用于 Eclipse。

对于发布过程的版本更新步骤,tycho-versions-plugin 知道如何持续更新 POM 和清单。

只需转到 parent/aggregator 模块的根目录并调用

mvn org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion="0.1.0"

这将以 same/equivalent 版本作为父项目更新父项目和所有子项目的版本。在您的情况下,这些都是项目,因为 Eclipse 版本 0.0.1.qualifier 被认为等同于 Tycho 中的 0.0.1-SNAPSHOT


对于发布过程的其余步骤(标记、构建、推送标签等),只需调用适当的 SCM 或 Maven 命令,例如从脚本。我还没有尝试为此使用 maven-release-plugin(和 apparently no-one else has)。

只是关于我们如何实现它的一些提示。

这可以通过一个额外的插件来完成,该插件可以转换 MANIFEST.MF 和 *.product 文件中的版本。此插件需要是生命周期参与者。 @Component(role = AbstractMavenLifecycleParticipant.class) 这样做的原因是必须在发布插件开始查找修改之前进行转换和提交。那么它也必须在发布后改造回来。

mojo executor 插件可以节省大量工作,因为它可以从插件内部调用 replacer、buildhelper 和 scm 插件。

另一个重要问题是,您需要通过配置发布插件来禁用硬编码干净调用,tycho 通过配置发布插件来配置干净插件以跳过执行。

希望这对您有所帮助。

请看这里:Unleash Maven Plugin - Tycho Releases

Unleash Maven 插件是作为 Maven Release 插件的替代品实现的,并且具有 Tycho 功能,可以完全满足您的需要。此外,它更加灵活、容错并且具有集成的回滚功能。

我会尽快发布一些博文来宣传和解释这个插件。

tycho-1.1.0 中有一个新功能(在此 post 时未发布)应该支持您正在尝试做的事情。

如果您已针对标准 maven-release 正确配置 pom + 将 dep 添加到 tycho 1.1.0,则可以按如下方式自定义构建 [1]:

       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-release-plugin</artifactId>
           <version>2.5.3</version>
           <configuration>
               <preparationGoals>org.eclipse.tycho:tycho-versions-plugin:${tycho-version}:update-eclipse-metadata org.apache.maven.plugins:maven-scm-plugin:1.9.5:add org.apache.maven.plugins:maven-scm-plugin:1.9.5:checkin</preparationGoals>
               <completionGoals>org.eclipse.tycho:tycho-versions-plugin:${tycho-version}:update-eclipse-metadata org.apache.maven.plugins:maven-scm-plugin:1.9.5:add org.apache.maven.plugins:maven-scm-plugin:1.9.5:checkin</completionGoals>
           </configuration>
       </plugin>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-scm-plugin</artifactId>
           <executions>
               <execution>
                   <id>default-cli</id>
                   <goals>
                       <goal>add</goal>
                       <goal>checkin</goal>
                   </goals>
                   <configuration>
                       <includes>**/META-INF/MANIFEST.MF, **/feature.xml, **/*.product</includes>
                       <excludes>**/target/**</excludes>
                       <message>Changing the Eclipse files versions</message>
                   </configuration>
               </execution>
           </executions>
       </plugin>

[1] 这直接取自描述此新功能的教程: https://wiki.eclipse.org/Tycho/Release_Workflow