4

这将是一个相当长的问题,所以请耐心等待。我正在寻找一种解决方案来构建用于离线开发环境的自定义更新站点(或 p2 存储库),并牢记以下几点:

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

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

  • 由于开发处于离线状态,我们目前使用脚本镜像 3rd 方更新站点。自定义站点需要从这些副本中提取插件。

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

  • 更新站点中的自定义类别会很好。

我正在尝试找到解决此问题的最佳和最干净的方法。如何使用 Tycho 设置类似的东西来构建站点?第谷是最好的选择吗?我是否希望将第 3 方插件复制到每个站点,或者我是否希望创建指向每个镜像第 3 方站点的 p2 复合存储库。是否可以使用 p2 复合存储库创建自定义类别?

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

感谢您花时间阅读所有这些。如果有人能真正解决我所有的担忧,那将是惊人的,我可能不得不为这个问题添加一个赏金。

4

1 回答 1

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 项目包含一个聚合器特性。使用聚合器定义一个使用现有更新站点的模型,然后使用聚合器简单地执行此模型,结果就是一个更新站点。在后一种情况下,您可以构建一个引用其他更新站点的复合更新站点,也可以从原始数据创建一个独立副本。该手册包含一个简单的示例,很容易使用。

3)比较

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

在 Tycho 的情况下,很难看到生成的更新站点的结构,但是,生成的构建更具可扩展性(例如,您可以使用相同类型的构建简单地添加自己的功能),并且构建您只需要安装了 Maven。

总而言之,这两种工具都可能满足您的需求 - 您需要评估它们在您的案例中的优势和劣势。

于 2012-01-20T23:16:08.287 回答