如何使用 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
我正在构建一个 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