Ebay开源:Eclipse Plugin Repository Portal

原创 2015年11月23日 09:38:26

作者:Vivien Shen, Eric Cai,Caddie Song, Paul Zhang

背景

Eclipse插件的开发工作,通常包括插件的开发测试和插件的发布管理,开发周期大致如下:开发人员开发插件,完成后移交测试人员,测试通过后再发布到Update Site,用户通过Eclipse从指定的Update Site安装插件。对于开发和测试人员来说,他们的首要工作是确保插件满足用户需求,而非频繁的管理和发布插件。由于插件的管理和发布通常需要执行一系列冗长的命令,不仅低效,且易于出错,因此我们开发了Eclipse Plugin Repository Portal(下文简称EPRP) ,旨在让插件管理变得简单且更有条理。这个工具目前已经开源,感兴趣的朋友可以从https://github.com/eBay/P2Portal下载并安装,也可以通过在Github上提交pullrequest参与开发讨论。

概述

 


EPRP简而言之就是一个Eclipse插件(Plugin)管理系统,如图1所示,它提供了一个统一的web接口供开发和测试人员进行插件的发布和升级等等,终端用户通过其生成的Update Site进行插件的安装与更新。它具有如下的特点:

1)      可视化管理界面

2)      简化的流程和操作

3)      可靠的发布流程

通过这个系统,用户可完成如下操作:

1)      创建和管理Repository 和Composite

2)      发布(Publish)和镜像(Mirror)插件

3)      编辑用于插件分组的Category信息

4)      查看及回滚(Rollback)操作历史

5)      同步(Synchronize)Site


EPRP相关术语如下:

1)      Plugin----译作插件,指一个独立的符合OSGI规范的Bundle,可导出为一个自包含(self-contained)和自描述(self-describing)的 Java™Archive (JAR),插件可依赖别的插件。

2)      Feature----本文特指插件的组合,便于分发安装

3)      Product----本文特指用于创建一个类Eclipse的富客户端产品(也叫RCP),包含了一组Feature及产品的基本信息如启动参数,图标和闪屏等。

4)      Update Site----译作更新服务器, 用于发布和管理插件,用户通过该服务器安装或升级Eclipse插件。

5)      Repository----特指插件仓库,简单的说就是Eclipse安装软件的地方,位于UpdateSite上的一个目录,目录中存放相互关联的一组插件和插件安装所需的元信息。

6)      Composite----聚合多个子Repository作为一个统一入口。用户可以通过其URL查看到所有子Repository的内容。

7)      Category----用于将插件分组,如Findbugs,TestNG可以归类到测试工具。

8)      Publish----将插件发布到Repository。

9)      Mirror----将插件从第三方的Repository克隆至我们的Repository。

10)  Site----这是EPRP引入的一个术语,用于管理Repository在不同的软件开发阶段的状态。如Dev Site供开发人员使用,QA Site供测试人员使用,Release Site供最终用户使用。

 

如图2所示,EPRP可以管理Repository或Site,Repository操作包括新建Repository,通过Publish或Mirror来更新Repository内容, 使用Composite来聚合多个Repository,回滚到历史版本,编辑Category等。Site操作包括新建和删除一个Site以及Site间的同步。系统维护了相关的操作历史。

EPRP工作流程


如图3所示,插件开发人员通过Publish或Mirror的功能在Dev Site里创建多个Repository,用Composite聚合多个Repository,也可以为Repository添加分类信息,还可以对错误的操作进行回滚,在移交QA测试之前将Dev Site 同步至QA Site。测试人员基于QA Site进行测试,在测试完成后把QA Site同步到Release Site。最终用户即可在Eclipse里看到相关的升级。

EPRP插件管理

EPRP对插件的管理操作是通过调用Equinox P2的一系列命令来实现的。这里Equinox是Eclipse对OSGI Core规范的一个实现。Equinox P2(Provisioning Platform)是Equinox用来为OSGI应用提供安装能力的子项目,多应用于Eclipse和Eclipse RCP应用。

以下是Equinox P2的相关术语:

1)      Artifacts----可安装的实际文件(Bytes)

2)      IU----对一个可安装Artifact的描述,描述该Artifact提供了什么,依赖了什么,有哪些属性,需要执行哪些配置。 IU可以有不同种形式存在,它可以是某一种Product,例如J2EE Product,也可以是某一个插件,也可以是多个Features通过分组形成的Category,当然也可以是包含多个插件的Feature。

3)      Metadata Repository----存放在content.jar,包含了大量的IU定义来描述可安装的内容

4)      Artifact Repository----存放在artifacts.jar,包含了大量artifact相关信息如文件大小,文件格式,存放路径。

Eclipse在安装时仅需下载 artifacts.jar、 content.jar就可以分析出具体的安装计划,然后下载完成安装所需的最少文件,相对于Eclipse 3.4的Update Manager,极大地提高了安装的速度。

 

典型的插件发布流程如下:

插件开发->导出插件并复制到UpdateSite ->执行相关Equinox P2命令将第三方插件Mirror到Update Site ->用户安装

下面介绍如何利用EPRP进行插件的管理发布。

插件上传

插件开发人员工作最后一步是导出已经创建的插件。Eclipse提供了专用的导出向导。要访问此向导,只需在Eclipse里单击 File > Export 并选择 Plug-inDevelopment 类别下的 Deployable Features。

导出的文件可以理解为一个Repository,包含了Plugin/Feature的jar文件,Metadata Repository和ArtifactRepository。目录结构如下


 

features

- feature1.jar

plugins

- plugin1.jar

- plugin2.jar

artifacts.jar

content.jar

 

在基于Eclipse3.4及以前版本导出的插件里是不包含artifacts.jar和content.jar的,因此Equinox P2提供了Publish功能,可以为本地的插件包生成P2安装所需的相关信息。

eclipse.exe

-application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher

-metadataRepository file:/<some location>/repository

-artifactRepository file:/<some location>/repository

-source /<location with a plugin and feature directory>

-configs gtk.linux.x86

-compress

-publishArtifacts

 

EPRP封装了Equinox P2的Publish命令,插件开发人员只需要将导出的插件打成一个zip包,通过EPRP的Publish功能就可以将导出的插件发布到Update Site上。


插件镜像

有时我们需要从远程Repository下载插件。Equinox P2提供了将远程Repository复制到本地的Mirror命令,由于MetadataRepository和Artifacts Repository理论上可以位于不同地方,所以Mirror一个完整的Repository需要分别Mirror Metadata Repository和Artifacts Repository。
Mirror Metadata Repository:

eclipse.exe -nosplash -verbose

    -application org.eclipse.equinox.p2.metadata.repository.mirrorApplication

    -source Insert Source URL (e.g. http://download.eclipse.org/eclipse/updates/3.4milestones/)

    -destination Insert Destination URL

 

MirrorArtifacts Repository:

eclipse.exe -nosplash -verbose

    -application org.eclipse.equinox.p2.artifact.repository.mirrorApplication

    -source Insert Source URL (e.g. http://download.eclipse.org/eclipse/updates/3.4milestones/)

 -destination Insert Destination URL (e.g. file:/tmp/3.4milestonesMirror/)

在EPRP诞生之前,插件的下载都需要通过执行以上两条Mirror命令实现。

EPRP封装了Equinox P2的Mirror命令,隐藏了相关的技术细节,提供给终端用户一个web 界面,要镜像插件,用户只需在EPRP系统里面点击Mirror按钮,EPRP就会将插件从远端Mirror到本地的Update Site。


插件安装

EPRP为每一个Repository和Composite生成Update Site URL。凭借Update Site URL用户可以在Eclipse里进行插件的安装和升级。




聚合多个插件库

EPRP提供Composite功能,用于对多个插件库进行聚合,为多个插件提供一个统一的安装入口。EPRP中可以为Composite添加子Repository或子Composite,也可以直接将Site下面的Repository添加到Composite当中,比如将sonar和emma添加到3rdParty这个Composite当中,如图8所示。



添加插件分组信息

对于某些插件我们可以利用EPRP的Category功能将其归类到某一个组里面。比如sonar和emma,它们都是测试相关的插件,因此可以将sonar和emma添加相应的分组信息。如图9所示,给sonar和emma对应的Repository添加相应的分组信息为testtools。


当添加完分组信息后,在Eclipse里面进行插件安装时选择Groupitems by category,即可看到添加的分组,在该分组下可以看到所有的插件信息,如图10所示。



记录和回滚历史操作

EPRP会自动对所有的操作进行记录,在EPRP里面可以看到针对每一个Repository的操作历史,当错误操作发生时,可以通过Rollback功能进行回退。


同步Site

EPRP提供了一键同步的功能用于Site间的同步,如图12所示,Source Site为QA,Destine Site为Release,点击Confirm时,EPRP会自动将QA Site的内容同步至Release Site。


除了上文介绍的功能外,EPRP还提供其他功能,比如访问权限控制,对Repository、Composite或Site的增删改操作等,具体Use Case请参考https://github.com/eBay/P2Portal/wiki/Use-Cases

EPRP技术架构


我们使用Django作为EPRP的web框架。Django是一个基于Python的开源web应用框架,其核心包括一个面向对象的映射器,用作数据模型和关系型数据库间的媒介,一个基于正则表达式的URL分发器。EPRP使用Django的认证系统进行用户的授权,使用Git来实现历史版本的管理,通过Rsync实现Site间的同步。

小结

EPRP集中化的管理方式,可视化的操作界面简化了插件管理的流程,减少了人为因素引起的错误,使得插件开发和版本发布的效率得到极大提升,间接保证了软件开发的质量。


开源地址

https://github.com/eBay/P2Portal


Ebay终于进入开源阵营了

Ebay终于开源了! 地址在: https://www.ebayopensource.org/ 其中第一个实验项目是叫Turmeric ,是一个SOA项目,介绍为 eBayOpenSource.org...
  • jackyrongvip
  • jackyrongvip
  • 2013年07月01日 17:32
  • 774

发布Android开源项目到Jcenter库

我们在使用Android studio时,导入一个第三方开源库很方便,如果整个库已经被发布到Maven库时,我们只需要在MainActivity所在的build.gradle(注意不是最外层的)中添加...
  • qq_33487412
  • qq_33487412
  • 2017年12月18日 10:56
  • 80

解决org.jboss.maven.plugins:maven-jdocbook-plugin' not found in repository的问题

在hibernate3.5.3时,自己要编一些包,于是下了maven2.2,但过程中报错:错误信息为 Reason: POM 'org.jboss.maven.plugins:maven-jdocbo...
  • zhm6422107
  • zhm6422107
  • 2010年07月13日 01:35
  • 4262

关于ebay的开发

     好烦,文章写了一半,莫名其妙的刷新了.昏,又得重写,烦.    由于急需要RMB出一台HP,所以跑到ebay上面乱看.忽然发现,原来它们公开了API,所以我想写个程序,用php写个提供给用户...
  • javacard417
  • javacard417
  • 2007年07月27日 12:16
  • 379

Syler——开源华为portal协议中间件

有涉及3A服务器的小伙伴可以了解一下,对接portal1.0/2.0协议的AC/AP亲测好用,献上原地址 https://github.com/extrame/syler,go语言编写,至于如何搭建g...
  • ixsure
  • ixsure
  • 2017年06月29日 17:02
  • 470

几种开源Portal的简单介绍

几种开源Portal的简单介绍分析 一、网上关于几个开源portal框架的一些评测 1、评测的一些标准 每个开源框架都有其优点和缺点,如果没有一套全面的标准来评价,很难说清楚哪个框架更好。其实从...
  • ksharer
  • ksharer
  • 2012年11月05日 20:47
  • 905

Ebay开源 Pulsar:实时大数据分析平台

eBay已经开源了一种实时大数据分析的平台—— Pulsar,它利用了分布式处理和Complex Event Processing技术,实现了一个低延迟,高可靠的分布式实时分析平台。...
  • ebay
  • ebay
  • 2015年03月02日 13:23
  • 3607

Griffin – 模型驱动的数据质量服务平台

Griffin是一个应用于分布式数据系统中的开源数据质量解决方案,例如在Hadoop, Spark, Storm等分布式系统中,Griffin提供了一整套统一的流程来定义和检测数据集的质量并及时报告问...
  • ebay
  • ebay
  • 2016年09月14日 13:50
  • 2619

Eclipse neon(4.6)安装tomcat plugin

一, 参考资料         1. http://blog.csdn.net/zhongkaigood/article/details/52175588         2. https://s...
  • kdpujie
  • kdpujie
  • 2017年05月17日 12:31
  • 1574

Portal研究

PortalPortal说明一个portal应用可通过复杂的个性化配置用户提供定制的内容,而portal页面就是含有不同的portlet为不同的用户生成内容 portlet容器portlet容器运行p...
  • wu6660563
  • wu6660563
  • 2016年08月06日 08:54
  • 1577
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ebay开源:Eclipse Plugin Repository Portal
举报原因:
原因补充:

(最多只允许输入30个字)