使用类别构建脱机“复合”Eclipse更新站点的解决方案

时间:2012-01-20 22:54:51

标签: eclipse p2 tycho update-site

这将是一个很长的问题,所以请耐心等待。我正在寻找构建自定义更新站点(或p2存储库)的解决方案,以便在离线开发环境中使用,并考虑以下事项:

  • 每个站点都包含第三方和自定义Eclipse插件的混合。

  • 我想为每个IDE配置创建一个站点。例如使用Helios的开发人员只需添加1个包含m2e,Subversive和CustomPluginA的更新站点。使用Flash Builder的开发人员可以添加包含m2e和CustomPluginB的其他站点。

  • 由于开发处于离线状态,我们目前mirror 3rd-party update sites with a script。自定义网站需要从这些副本中提取插件。

  • 我们的自定义Eclipse插件目前在Jenkins上使用Maven + Tycho构建。如果可能的话,我还想将更新站点配置为使用Jenkins自动构建。然后,如果更新了自定义插件,则可以触发必要的更新站点构建。

  • 更新网站中的自定义类别会很不错。

我正在努力找到最好,最干净的方法来解决这个问题。 如何使用Tycho建立网站来设置这样的东西? Tycho是最好的选择吗?我是否希望将第三方插件复制到每个站点,或者是否要创建指向每个镜像第三方站点的p2复合存储库。是否可以使用p2复合存储库创建自定义类别?

最后,实际定义站点中包含哪些插件和功能的最简单方法是什么?在Eclipse中我可以创建一个更新站点项目,使编辑变得非常简单,但我只能包含Eclipse安装中存在的插件。手动创建site.xml或p2 ant脚本可以解决此问题,但手动确定可安装的单元ID和版本很困难且容易出错。

感谢您花时间阅读所有这些内容。如果有人能够真正解决我所有令人惊讶的问题,那么我可能不得不为这个问题添加一笔赏金。

1 个答案:

答案 0 :(得分:4)

我会建议两种方式,一种是Tycho,另一种是B3聚合器。

1)第谷

步骤1。:使用PDE内置工具定义目标平台,该工具使用现有的本地更新站点,并将其另存为.target文件。然后,您可以在构建中引用此文件,如下所示:

<plugin>
  <groupId>org.eclipse.tycho</groupId>
  <artifactId>target-platform-configuration</artifactId>
  <version>${tycho.version}</version> <configuration>
  <resolver>p2</resolver>
   <target>
     <artifact>
      <groupId>org.eclipse.viatra2</groupId>
      <artifactId>«project name where the target file resides»</artifactId>
      <version>«artifact version»</version>
      <classifier>«target filename without extension»</classifier>
     </artifact>
   </target>
   <ignoreTychoRepositories>true</ignoreTychoRepositories>
  </configuration>
 </plugin>

第2步。:将新项目定义为更新站点。该项目应包含category.xml,该类别引用上一步骤中目标平台的已使用功能的已使用版本。您可以使用PDE类别定义向导/编辑器创建此category.xml。

第3步。:只需使用更新站点原型发布您的构建:

<packaging>eclipse-repository</packaging>
<build>
  <plugins>
    <plugin>
      <groupId>org.eclipse.tycho</groupId>
      <artifactId>tycho-p2-publisher-plugin</artifactId>
      <version>${tycho.version}</version>
      <configuration>
        <publishArtifacts>true</publishArtifacts>
      </configuration>
    </plugin>
  </plugins>
</build>

2) B3聚合器:

Eclipse B3项目包含aggregator feature。使用聚合器定义使用现有更新站点的模型,然后使用聚合器简单地执行此模型,结果是更新站点。在后一种情况下,您可以构建复合更新站点,引用其他更新站点,也可以从原始数据创建独立副本。本手册包含一个简单的例子,它易于使用。

3)比较

在B3中定义镜像逻辑更直接,因为模型仅包含镜像描述,并且还允许创建仅引用现有站点的复合更新站点。但是,如果除了更新站点构建之外还要做其他任何事情,那么就更难做到了。此外,它可以在无头构建中执行(例如,来自Jenkins),但它需要安装无头Eclipse实例。该文档包含详细信息,但该工具不像Maven / Tycho那样独立。

对于Tycho,很难看到生成的更新站点的结构,但是,生成的构建更具可扩展性(例如,您可以使用相同类型的构建添加自己的功能),并进行构建你只需要安装Maven。

总而言之,这两种工具都可能满足您的需求 - 您需要评估自己的优势和劣势。