【问题标题】:Tool for managing/hosting own p2 repositories?用于管理/托管自己的 p2 存储库的工具?
【发布时间】:2011-05-19 16:48:29
【问题描述】:

我们公司使用 Maven。我们使用Nexus 存储库管理器来存储我们的快照和版本。

目前,我们正在开发基于 Eclipse 的产品。我们使用Tycho 来做到这一点。

问题如下:在我们基于 Eclipse 的产品中,我们有很多特性。我们的想法是分别构建每个功能(或一组功能)并将它们放在内部 p2 存储库中。当一个功能需要另一个功能时,我们将目标平台指向必要的内部 p2 存储库。

目前,我们使用 Tycho 构建应用程序。我们使我们的功能“可部署”,因此 Tycho 在target 中生成了一个 P2 站点。我们将该 P2 站点推送到我们的服务器,然后运行 ​​Eclipse FeaturesAndBundlesPublisher,它将最近构建的功能与 P2 存储库合并。因此,我们有一个内部 P2 存储库,其中包含所需功能的所有版本。

我们发现这个过程太繁琐了。有没有像Nexus这样的工具,会更方便?

UPD.:有一个discussion on Tycho Users list

【问题讨论】:

  • Nexus Pro 提供了一些 P2 存储库功能。您是否查看过它是否能满足您的需求?
  • 它不再是 Nexus Pro 独有的功能;从 Nexus 2.x 开始,p2 插件现在是开源的,所有人都可以免费使用 infoq.com/news/2012/02/nexus-20github.com/sonatype/nexus-p2-repository-plugin
  • 您链接的第谷列表上的讨论非常古老。带有 p2 repo 的 Nexus 应该能够为您提供帮助。如果在 nexus 用户邮件列表或此处提出问题,我们会尽力提供帮助。

标签: eclipse maven nexus p2 tycho


【解决方案1】:

使用Unzip Repository Nexus Plugin,您可以使用Nexus 在 Tycho 构建之间交换二进制工件。

  • Tycho 项目 A 像普通 Maven 项目一样发布其工件:该项目是使用 mvn clean deploy 构建的,它将项目的工件上传到您在 Nexus 上的部署 Maven 存储库中。唯一的特殊要求是项目构建一个 p2 存储库。推荐的方法是使用eclipse-repository 模块,但“可部署功能”在大多数情况下也应该可以工作。

  • 在您的 Nexus 上,您只需要以下一次性配置:对于部署 Maven 存储库(或包含该存储库的“存储库组”),您需要添加一个类型为“解压缩存储库”的虚拟存储库。此虚拟存储库以解压形式显示部署存储库中的 zip 工件。

    示例:如果项目 A 的 p2 存储库 zip 位于 http://nexus.corp/nexus/repositories/build.milestones/corp/example/project-a/project-a-repo/1.0.0/project-a-repo-1.0.0.zip 的部署 Maven 存储库中,则它将在 http://nexus.corp/nexus/repositories/build.milestones.unzip/corp/example/project-a/project-a-repo/1.0.0/project-a-repo-1.0.0.zip-unzip/ 的解压缩存储库中以标准 p2 存储库格式提供。

  • Tycho 项目 B 可以通过将后一个 URL 添加到其 target platform 来引用来自项目 A 的工件,例如在目标定义文件中。

在上面的示例中,项目 B 引用了项目 A 的发布版本。同样的方法也适用于快照,因为解压缩存储库支持 "symbolic" versions,例如 1.1.0-SNAPSHOT 用于最后部署的 1.1.0-SNAPSHOT 或甚至只是SNAPSHOT 的整体最高版本。使用这些符号版本,项目 B 然后可以,例如在其自己的 CI 构建中,通过在其目标平台中添加生成的(稳定的!)p2 存储库 URL 来引用 CI 构建结果项目 A。

Disclaimer: Unzip Repository Nexus 插件是 Tycho 项目的一部分,我是该项目的提交者。

【讨论】:

  • 嘿oberlies,你能用“符号”版本更详细地解释最后一段吗?因为我需要始终在 *.target-definition 中指定确切的 URI,例如“../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-20130124.123220-3.zip-unzip/”限定符。我需要为 *.target 提供一个类似“../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-SNAPSHOT.zip-unzip/”的 URI,以始终获取最新版本。在带有单位元素的 *.target 文件中也存在同样的问题。您上面的示例没有 RELEASE 或 SNAPSHOT (没有限定符)。如何做到这一点?
  • 解压缩存储库支持 .../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-SNAPSHOT.zip-unzip/ 形式的 URL(与普通 Maven 存储库不同) .与目标文件中的<unit id="..." version="0.0.0"/> 一起,您可以设置对SNAPSHOT 版本的最新版本的引用。
  • 感谢您的回复。这正是我试图在 *.target 中定义的,但 tycho 说:“.TargetDefinitionResolutionException:无法从位置加载元数据存储库:../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-SNAPSHOT .zip-unzip/" 需要什么特殊设置吗?这也适用于网络浏览器吗?
  • 是的,这些 URL 也应该可以在浏览器中使用。确保在 Nexus 插件上配置 useVirtualVersion=true(参见 here for details
【解决方案2】:

也许这有点晚了,但我目前正在开发一个开源 (EPL) 存储库管理器,它支持使用 maven 和 tycho 部署到存储库并将其用作 P2 存储库的工作流。

也可以部署由 maven(不是 maven tycho)创建的包,P2 元数据将自动生成。

该项目名为“Package Drone”和hosted on github。还有一个short introduction video

【讨论】:

  • 感谢您的回复。那是不久前的事了。看看别人怎么说!
猜你喜欢
  • 2018-02-21
  • 1970-01-01
  • 2019-07-05
  • 2010-10-27
  • 2017-12-31
  • 2012-10-17
  • 1970-01-01
  • 2011-06-19
  • 2017-08-19
相关资源
最近更新 更多