我们公司使用Maven。我们使用Nexus存储库管理器来存储我们的快照和版本。
目前,我们正在开发基于Eclipse的产品。我们使用Tycho来做到这一点。
问题如下:在我们基于Eclipse的产品中,我们有许多功能。我们的想法是分别构建每个功能(或功能组)并将它们放在内部p2存储库中。当一个功能需要另一个功能时,我们将目标平台指向必要的内部p2存储库。
目前,我们使用Tycho构建应用程序。我们使我们的功能“可部署”,因此Tycho在target
中生成了一个P2站点。我们将P2站点推送到我们的服务器,然后运行Eclipse FeaturesAndBundlesPublisher
,它将最近构建的功能与P2存储库合并。因此,我们有一个内部P2存储库,其中包含所有必需功能的版本。
我们发现这个过程太麻烦了。是否有像Nexus这样的工具,哪个更方便?
答案 0 :(得分:9)
使用Unzip Repository Nexus Plugin,您可以使用Nexus在Tycho构建之间交换二进制工件。
Tycho项目A发布其正常Maven项目的工件:项目使用mvn clean deploy
构建,将项目的工件上传到Nexus上的deploy Maven 存储库。唯一的特殊要求是项目构建 p2 存储库。建议的方法是eclipse-repository
模块,但在大多数情况下,“可部署功能”也应该有效。
在您的Nexus上,您只需要以下一次性配置:对于部署Maven存储库(或包含该存储库的“存储库组”),您需要添加类型为“Unzip Repository”的虚拟存储库”。此虚拟存储库以解压缩的形式显示部署存储库中的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的发布版本。同样的方法也适用于快照,因为Unzip Repository支持"symbolic" versions,如1.1.0-SNAPSHOT
支持最后部署的1.1。对于整体最高版本,0-SNAPSHOT甚至只是SNAPSHOT
。然后,使用这些符号版本,项目B可以在其自己的CI构建中通过在其目标平台中添加生成的(稳定的!)p2存储库URL来引用CI构建结果项目A.
Disclaimer:Unzip Repository Nexus插件是Tycho项目的一部分,我是其中的一个提交者。
答案 1 :(得分:3)
也许这有点晚了,但我目前正在开发一个开源(EPL)存储库管理器,它支持使用maven和tycho部署到存储库的工作流程,并将其作为P2存储库使用。
也可以部署由maven创建的包(而不是maven tycho),P2元数据将自动生成。
该项目名为" Package Drone"和hosted on github。还有short introduction video。