管理/托管自己的p2存储库的工具?

40

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

目前,我们正在基于Eclipse开发一个产品。我们使用Tycho来进行开发。

问题是:在我们基于Eclipse的产品中,有许多功能。我们的想法是单独构建每个功能(或一组功能)并将它们放入内部P2仓库。当一个功能需要另一个功能时,我们将目标平台指向必要的内部P2仓库。

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

我们发现这个过程太麻烦了。是否有像Nexus这样更方便的工具呢?

更新: Tycho用户列表中有讨论


4
Nexus Pro提供一些P2仓库功能。你考虑过它是否能满足你的需求吗? - RonU
5
自Nexus 2.x版本开始,p2插件已经不再是仅限于Nexus Pro使用的功能,现在已经开源并免费供所有人使用。详情请参见:http://www.infoq.com/news/2012/02/nexus-20 和 https://github.com/sonatype/nexus-p2-repository-plugin - Darryl Miles
3
你提供的 Tycho 列表上的讨论非常古老。与 p2 存储库的关联应该能够帮助你。如果遇到问题,请在 Nexus 用户邮件列表或此处提问,我们会尽力帮助。 - Manfred Moser
2个回答

9
使用解压缩存储库Nexus插件,您可以使用Nexus在Tycho构建之间交换二进制工件。
Tycho项目A像普通的Maven项目一样发布其构件: 该项目使用mvn clean deploy构建,将项目的构件上传到Nexus上的部署Maven仓库中。唯一的特殊要求是该项目构建了一个p2仓库。建议的方式是使用一个eclipse-repository模块,但在大多数情况下,“可部署功能”也应该可以工作。
在您的Nexus上,您只需要进行以下一次性配置: 对于部署Maven仓库(或包括该仓库的“仓库组”),您需要添加一个类型为“解压缩仓库”的虚拟仓库。该虚拟仓库以未打包形式显示来自部署仓库的zip构件。
例如:如果项目A的p2仓库zip位于部署Maven仓库中的http://nexus.corp/nexus/repositories/build.milestones/corp/example/project-a/project-a-repo/1.0.0/project-a-repo-1.0.0.zip,则它将以标准的p2仓库格式在解压缩仓库中可用,位于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/
Tycho项目B可以通过将后者URL添加到其目标平台(例如在目标定义文件中)来引用项目A的构件。
在上面的例子中,项目B引用了项目A的一个发布版本。同样的方法也适用于快照版本,因为Unzip Repository支持"符号化"版本,例如1.1.0-SNAPSHOT表示最后部署的1.1.0-SNAPSHOT版本,甚至只需要使用SNAPSHOT来表示整体最高版本。使用这些符号化版本,项目B可以在其自己的CI构建中引用项目A的CI构建结果,通过将结果(稳定!)的p2存储库URL添加到其目标平台中。免责声明: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文件中的units元素也存在同样的问题。你上面的例子没有RELEASE或SNAPSHOT(没有限定符)。该怎么办呢? - xoned
解压缩存储库支持形式为.../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-SNAPSHOT.zip-unzip/的URL(不同于普通的Maven存储库)。与目标文件中的<unit id="..." version="0.0.0"/>一起,您可以设置对SNAPSHOT版本的最新版本的引用。 - oberlies
感谢您的回复。这正是我试图在*.target中定义的内容,但Tycho却显示:“.TargetDefinitionResolutionException: 无法从位置../p2.repository/1.0.0-SNAPSHOT/p2.repository-1.0.0-SNAPSHOT.zip-unzip/加载元数据存储库。”是否需要特殊设置?这个问题在Web浏览器中也能解决吗? - xoned
1
是的,这些URL在浏览器中也应该可以工作。请确保在Nexus插件上配置useVirtualVersion=true(有关详细信息,请参见此处)。 - oberlies

3
也许有点晚了,但我目前正在开发一个开源(EPL)的存储库管理器,支持使用maven和tycho部署到存储库的工作流程,并将其作为P2存储库使用。
还可以部署由maven(而不是maven tycho)创建的bundle,P2元数据将自动生成。
这个项目叫做“Package Drone”,hosted on github。还有一个短介绍视频

谢谢回复。那是一段时间以前的事了。让我们看看其他人怎么说! - Maksim Sorokin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接