有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在构建一个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中都引用)

这是正确的方法吗?还是有一种方法可以使整个过程自动化而不出错

另外,有Maven Release plugin,但这对Eclipse不起作用


共 (4) 个答案

  1. # 1 楼答案

    tycho-1.1.0中有一个新功能(在本文发布时尚未发布),它应该支持您正在尝试的操作

    如果您已经为标准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

  2. # 2 楼答案

    请看这里:Unleash Maven Plugin - Tycho Releases

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

    我将很快发布一些博客帖子来推广和解释这个插件

  3. # 3 楼答案

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

    这可以通过一个额外的插件来完成,该插件可以转换清单中的版本。MF和*。产品文件。这个插件需要是生命周期的参与者@Component(role = AbstractMavenLifecycleParticipant.class)原因是,在发布插件开始寻找修改之前,is必须进行转换和提交。然后它还必须在发布后进行转换

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

    另一个重要的问题是,您需要通过配置发布插件来配置clean插件以跳过执行,从而禁用tycho所做的硬编码clean调用

    希望这有帮助

  4. # 4 楼答案

    对于relase过程的版本更新步骤,有一个tycho-versions-plugin知道如何一致地更新POM和清单

    只需转到父/聚合器模块的根目录并调用

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

    这将更新父项目的版本,以及与父项目具有相同/等效版本的所有子项目的版本。在您的例子中,这些都是项目,因为Eclipse版本0.0.1.qualifier被认为等同于第谷的0.0.1-SNAPSHOT


    对于发布过程的其余步骤(标记、构建、推送标记等),只需调用适当的SCM或Maven命令,例如从脚本调用。我还没有尝试使用maven发布插件来实现这一点(以及apparently no-one else has