`

eclipse中p2的概念备忘

阅读更多

转自:http://blog.csdn.net/vwpolo/article/details/2590849

Eclipse3.4版本最值得注意的就是P2,一个新的 Eclipse供应平台(provisioning platform)。这是老的变更管理(Update Manager)的替代品,像老的更新管理器可以从一个或者多个远程站点更新安装的Eclipse,也是我们更新发布和安装新特性最常用的方式,但是也存在一些缺点,比如无法更新可执行的eclipse及处理镜像的时候会失败。为了解决这些问题,EclipseCon 2008的一个BoF会上,介绍了新一代的更新机制,随后Provisioning Platform(简称为P2)诞生了,在3.4M5首次登场,不像以前的Eclipse更新管理器,在P2bundle和非bundle组件(如配置文件、安装文件、绘图资源等等)都被允许安装或更新,P2还允许dropins目录,这使得安装bundle更加容易:只需把bundle复制到该目录,Eclipse将自动安装并激活它,Eclipse也可能被配置成共享bundle的模式,这将使得一个bundle库可被使用并且该bundle库将服务于不同的应用。对于那些按常规用法使用Eclipse的人来说,看不出这有什么好处,但是如果你正在进行RCP应用开发(或支持),有许多基于RCP的应用程序安装在同一个机器上(比如,RCP应用的一个内部套件[in-house suite]),那么你可以在多个应用之间共享这些bundle,这非常节约空间。

     下载由Eclipse通信框架(Eclipse Communication Framework)负责。制品还可以通过几种不同的算法(pack200tar.gz)进行压缩,同时对于多线程下载来说,还有多个镜像可用。在下载过程中,如果更新站点出现问题时,以前的更新管理器就会失败,P2会自动地重试不同的镜像以便找到数据。你甚至可以下载一个只有5Mb的安装器,它会安装Eclipse及其所有插件。

    而且以前使用更新管理器的时候发现无法使用连上代理服务器,导致在公司内部网络的时候没法使用更新管理器,现在在这个3.4版本中可以使用代理服务器了,非常的方便

----------------------------------------------------------------------------------------

下面

引用的他人的文章,其原址已经忘了,作者莫怪。 

* p2 / Agent
          o The provisioning infrastructure on client machines 
    * Installable Unit (IU)
          o Metadata that describes things that can be installed/configured
    * Artifact
          o The actual content being installed/configured(e.g., bundle JARs)
    * Repository
          o A store of metadata or artifacts
    * Profile
          o The target of install/management operations
    * Planner
          o The decision-making entity in the provisioning system
    * Engine
          o The mechanism for executing provisioning requests
    * Touchpoint
          o The part of the engine responsible for integrating the provisioning
            system to a particular runtime or management system

IU
比较好理解,就是对可安装或配置的部分一种描述,并不对应实际要安装的文件。
Arifact
就是来描述实际要安装的文件,bundle类型的jarfeaturebinary文件。
这时就有了Repository(仓库)这个概念,是用来保存artifacts信息,以及artifacts的元数据。元数据包括了对artifact的唯一标识符,版本,对外暴露的接口信息,以及它依赖的接口及其版本信息,各个安装阶段需要执行的配置。在p2默认的实现里面,这两个repository xml文件来描述,同时被压缩为artifacts.jar, content.jar来减小文件大小,缩短传输时间。
Eclipse 3.4起,当从远程site安装新的软件时,就会看到有个work thread在后台下载content.jar文件。p2在安装时候,首先会根据content.xmlmetadata repository)来解析正在安装软件的依赖。在当前runtime里面查找metadata中指定的依赖,如果满足才继续安装。据我个人经验,如果安装的软件比较复杂,那它产生的metadata文件就会比较大(很容易上兆),下载这个文件以及解析它的内容都会比较慢,从而影响用户体验。
比较灵活的是,用户可以实现自己的ArtifactRepositoryMetadataRepository,注册到它们各自的Manager里面就可以了。所有这些服务都被实现为OSGi Service.
下一个Profile,是用来管理安装目标里的软件信息。p2在被设计的时候,希望解决多个eclipse实例共享一份安装的某软件。比如为了某种目的我机器上有好几个Eclipse,同时它们都需要CDT,免去为重复安装的麻烦。profile就会记录每次安装的内容,让整个应用程序被管理起来。在 Galileo里安装的软件都可以软件管理里面查找到。
Planner
Engine完全就是p2内部的东西。任何p2的操作(安装,删除,配置)都需要Planner实例来描述。有了Planner以后,还需要创建一个Engine对象,通过engine来执行对应的plan。这就是目前调用p2 API来完成安装的一个过程。
最后一个Touchpoint。程序在安装的时候,可能会根据runtime(os, ws, arch等)或阶段(安装,卸载,配置等)执行某些配置,touchpoint就是帮助实现这些配置。具体操作是以IU为单位记录在metadata repository里的。p2默认实现了一些Eclipse touchpoint,比如拷贝,删除文件,执行外部程序等。如果用户有自己特殊的native操作需要执行,可以自己实现自定义的 touchpoint

 

有了这些概念以后,我们来看看如何使用p2 API。以安装为例,
首先需要得到当前安装的profile。如果是全新安装,通过IProfileRegistry.addProfile创建一个新profile。是更新安装的话,可以通过IProfileRegistry查询到期望更新的profile
然后需要获得将要安装的IMetadataRepository集合。比如:
    ArrayList<IMetadataRepository> metadataRepos = new ArrayList<IMetadataRepository>();
    IMetadataRepositoryManager repositoryManager = getService(IMetadataRepositoryManager.class); 
    if (repositoryManager == null) 
        return fConfiguredMetadataRepos;
    for (URI uri : uris){
        metadataRepos .add(repositoryManager.loadRepository(uri,null));
    

接下来就是通过IEngine来安装IMetaRepository中的内容。
    -
查找出IMetaRepository中没安装过的IUs。这就需要比较当前安装的profile已经安装过的内容了,
     IMetaRepository repo = ...;
     IProfile profile = getProfile(false);
     Collector result = repo.query(new IUManagerQuery(true,profile.getProfileId()), new LatestUninstalledIUCollector(profile), null);
     
这里需要指出的是,IMetadataRepository实现了IQueryable接口。IQueryablep2引入的查找接口,返回满足特殊查询条件的集合,同时传入了一个IProgressMonitor对象,可以反应查找进度。这里的IUManagerQueryLatestUninstalledIUCollector是自定义的QueryCollector对象。p2已经实现了许多有用的Query,经常用到的有InstallableUnitQueryIUPropertyQueryRangeQuery
    -
接下来生成IEngine所需的ProvisionPlan。首先创建ProfileChangeRequest对象,将先前查找出的要安装的IUs添加进去。
     request.addInstallableUnits(ius);
     
删除的话则与之相反。更新的话也需要通过ProfileChangeRequest.removeInstallableUnits()去掉旧版本的IUs。调用IPlanner servicegetProvisioningPlan(ProfileChangeRequest, ProvisioningContext, IProgressMonitor)得到对应于当前requestplan。最后就是调用IEngine.perform(IProfile, PhaseSet, Operand[], ProvisioningContext, IProgressMonitor)来执行provisioning操作。这里的PhaseSet是用来指定Engine将要执行的几个阶段,以及每个阶段的执行时间权重。这些阶段包括了Collect, Unconfigure, Uninstall, Property, CheckTrust, Install, Configure. 如果熟悉Eclipse之前的Installer Handler,对Unconfigure/Uninstall/Install/Configure应该都很熟悉。 p2里,更是将Collect, CheckTrust这些过程也暴露了出来。下面是p2里默认PhaseSet的实现,
        public DefaultPhaseSet() {
            this(new Phase[] {new Collect(100), new Unconfigure(10, forcedUninstall), new Uninstall(50, forcedUninstall), new Property(1), new CheckTrust(10), new Install(50), new Configure(10)});
        }
     Operand[]
通过ProvisionPlan.getOperands()获得。

分享到:
评论

相关推荐

    在 Eclipse 中构建备忘单

    ### 在Eclipse中构建备忘单 #### 一、备忘单的概念与作用 备忘单(Cheatsheet)是一种Eclipse V3.0引入的新技术,它通过一系列交互式的指导帮助用户完成复杂的操作流程。备忘单可以分为自动化的步骤和需要用户手动...

    eclipse图标含义备忘录

    综上所述,Eclipse图标含义备忘录这篇文章提供了一张完整的图标参考图,帮助开发者通过图形化方式快速识别代码的不同部分和状态,从而在日常开发工作中更加高效和直观地使用Eclipse。由于Eclipse是一个复杂且功能...

    Eclipse常见概念及操作

    首先,我们来了解一下Eclipse中的核心概念: 1. **项目(Project)**:在Eclipse中,项目是组织代码和相关资源的基本单元。所有可编译和运行的文件都必须存在于项目中。项目包含了类路径、编译器级别、发布路径等...

    cucumber.eclipse.p2updatesite-0.0.11.zip

    2. **artifacts.jar**:同样属于p2更新站点,这个文件包含了实际的插件二进制文件和库,Eclipse会使用这些文件来安装或更新插件到用户的环境中。 3. **plugins** 目录:可能包含多个JAR文件或者目录,这些代表了...

    删除eclipse3.4中的P2更新管理器

    标题 "删除eclipse3.4中的P2更新管理器" 涉及的是在Eclipse集成开发环境(IDE)中移除P2更新管理器的过程。P2是Eclipse的一个组件,负责软件的安装、升级和管理。在某些情况下,用户可能希望禁用或删除这个功能,...

    net.sourceforge.pmd.eclipse.p2updatesite-4.5.0.v20190630-0922.zip

    首先,我们看到压缩包中包含了`p2.index`文件,这是Eclipse平台的更新站点索引,用于指示插件的元数据和依赖关系。用户可以通过此索引在离线环境中安装或升级PMD插件。 `content.jar`和`artifacts.jar`是Eclipse...

    org.eclipse.equinox.p2.examples.rcp.cloud.rar

    org.eclipse.equinox.p2.examples.rcp.cloud.rarorg.eclipse.equinox.p2.examples.rcp.cloud.rarorg.eclipse.equinox.p2.examples.rcp.cloud.rar

    Eclipse Rcp启动时使用p2自动更新完整代码和图片步骤

    Eclipse Rcp启动时使用p2自动更新,不使用P2的ui,一步一步指导搭建,核心代码直接包含在文档里面。

    Android开发之Eclipse制作简易备忘录[定义].pdf

    在Android开发中,创建一个简易备忘录应用是学习移动应用编程的好方法,尤其是在使用Eclipse集成开发环境时。这个过程涉及到多个关键知识点,包括UI设计、数据存储、事件监听和用户交互。以下是对这些知识点的详细...

    org.eclipse.equinox.p2.examples.rcp.prestartupdate.rar

    org.eclipse.equinox.p2.examples.rcp.prestartupdate.rarorg.eclipse.equinox.p2.examples.rcp.prestartupdate.rarorg.eclipse.equinox.p2.examples.rcp.prestartupdate.rar org.eclipse.equinox.p2.examples.rcp....

    eclipse 中文帮助文档

    1. **Eclipse IDE概述**:首先,文档可能会介绍Eclipse的基本概念,包括它的历史、设计理念以及与其他IDE的对比,帮助用户理解为何选择Eclipse作为开发工具。 2. **安装与配置**:详细步骤指导如何下载、安装和配置...

    eclipse中文帮助文档

    2. **界面布局与自定义**:讲解Eclipse的工作区、透视图(Perspective)、视图(View)和编辑器(Editor)的概念,如何根据个人喜好调整界面布局。 3. **项目管理**:创建新项目、导入现有项目、组织源代码目录结构...

    安卓备忘录

    通过其强大的功能,用户不仅可以添加新的备忘,还可以对已有的备忘进行修改、查询以及删除,充分满足了个人和工作中的信息管理需求。 首先,我们来看看如何使用【安卓备忘录】来添加新备忘。在主界面上,通常会有一...

    org.eclipse.equinox.p2.examples.rcp.sdkui.rar

    标题中的"org.eclipse.equinox.p2.examples.rcp.sdkui.rar"是一个压缩文件,它包含了Eclipse Equinox P2的一个示例,专门针对基于RCP(Rich Client Platform)的应用程序的软件开发工具包(SDK)用户界面。...

    eclipse中文包

    3. 在打开的窗口中,点击“添加”(Add)按钮,在弹出的对话框中,选择“本地”(Local)选项,然后浏览并找到解压后的“BabelLanguagePack-eclipse-zh_4.7.0”目录下的“site.p2”文件。 4. 点击“确定”,在“可用...

    eclipse中文语言包完整版(1集成压缩包)

    这个“eclipse中文语言包完整版(1集成压缩包)”包含了所有必要的组件,以确保用户在Eclipse中的菜单、提示和帮助文档都能显示为中文。 首先,安装Eclipse中文语言包的过程相当简单。用户只需将下载的压缩包解压,...

    Eclipse中文教程(PDF)

    Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java编程领域中占据着主导地位。本教程《Eclipse中文教程》旨在为初学者提供全面、易懂的指导,帮助他们快速掌握Eclipse的基础操作和使用技巧。 教程首先会...

    Eclipse 中文手册

    Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java编程领域中占据着重要的地位。这份"Eclipse中文手册"提供了全面且深入的指导,旨在帮助Java开发者更好地理解和使用Eclipse的各项功能。 首先,Eclipse...

    eclipse中文文档.zip

    中文文档中,你将找到关于Eclipse界面布局的介绍,例如工作区(Workspace)的概念,它是Eclipse中存放项目和文件的地方。你还会学习如何创建、导入和管理项目,以及如何配置项目属性以满足特定的构建需求。 对于...

    eclipse 3.7 中文语言包

    这可能需要你同意许可协议,以及在安装过程中重启Eclipse。 6. **设置语言**:安装完毕后,再次进入“Window”菜单,选择“Preferences” &gt; “General” &gt; “Appearance” &gt; “Language”,在下拉菜单中选择...

Global site tag (gtag.js) - Google Analytics