Eclipse体系结构介绍(三)

21 篇文章 2 订阅
17 篇文章 0 订阅

6.3 Eclipse 3.4

能够轻松地将应用程序更新为新版本并添加新内容是理所当然的。在Firefox中它无缝地发生。对于Eclipse来说,它并不那么容易。 Update Manager是用于向Eclipse安装添加新内容或更新到新版本的原始机制。

要了解更新或安装操作期间的更改,有必要通过“功能”了解Eclipse的含义。功能是PDE工件,它定义了一组捆绑包,这些捆绑包以可以构建或安装的格式打包在一起。功能还可以包括其他功能。 (见图6.7。)

  [Eclipse 3.3 SDK Feature Hierarchy]

                         图6.7:Eclipse 3.3 SDK特性层次结构 

如果您希望将Eclipse安装更新为仅包含一个新捆绑包的新构建,则必须更新整个功能,因为这是更新管理器使用的粗粒度机制。更新功能以修复单个捆绑包效率很低。

有PDE向导可以创建功能,并在您的工作区中构建它们。 feature.xml文件定义功能中包含的包以及包的一些简单属性。功能(如捆绑包)具有名称和版本。功能可以包括其他功能,并为其包含的功能指定版本范围。将列出功能中包含的捆绑包以及特定属性。例如,您可以看到org.eclipse.launcher.gtk.linux.x86_64片段指定了应该使用它的操作系统(os),窗口系统(ws)和体系结构(arch)。因此,升级到新版本时,此片段将仅安装在此平台上。这些平台过滤器包含在此捆绑包的OSGi清单中。

<?xml version="1.0" encoding="UTF-8"?>
<feature
      id="org.eclipse.rcp"
      label="%featureName"
      version="3.7.0.qualifier"
      provider-name="%providerName"
      plugin="org.eclipse.rcp"
      image="eclipse_update_120.jpg">

   <description>
      %description
   </description>

   <copyright>
      %copyright
   </copyright>

   <license url="%licenseURL">
      %license
   </license>

   <plugin
         id="org.eclipse.equinox.launcher"
         download-size="0"
         install-size="0"
         version="0.0.0"
         unpack="false"/>

   <plugin
         id="org.eclipse.equinox.launcher.gtk.linux.x86_64"
         os="linux"
         ws="gtk"
         arch="x86_64"
         download-size="0"
         install-size="0"
         version="0.0.0"
         fragment="true"/>

Eclipse应用程序不仅包含功能和包。有一些特定于平台的可执行文件可用于启动Eclipse本身,许可证文件和特定于平台的库,如Eclipse应用程序中包含的此文件列表所示。

com.ibm.icu
org.eclipse.core.commands
org.eclipse.core.conttenttype
org.eclipse.core.databinding
org.eclipse.core.databinding.beans
org.eclipse.core.expressions
org.eclipse.core.jobs
org.eclipse.core.runtime
org.eclipse.core.runtime.compatibility.auth
org.eclipse.equinox.common
org.eclipse.equinox.launcher
org.eclipse.equinox.launcher.carbon.macosx
org.eclipse.equinox.launcher.gtk.linux.ppc
org.eclipse.equinox.launcher.gtk.linux.s390
org.eclipse.equinox.launcher.gtk.linux.s390x
org.eclipse.equinox.launcher.gtk.linux.x86
org.eclipse.equinox.launcher.gtk.linux.x86_64

无法通过更新管理器更新这些文件,因为它只处理功能。由于每个主要版本都更新了许多这些文件,这意味着用户每次有新版本时都必须下载新的zip,而不是更新现有的安装。这对Eclipse社区来说是不可接受的。 PDE为产品文件提供了支持,产品文件指定了构建Eclipse RCP应用程序所需的所有文件。但是,更新管理器没有将这些文件配置到您的安装中的机制,这对用户和产品开发人员来说都非常令人沮丧。 2008年3月,p2作为新的配置解决方案发布到SDK中。为了向后兼容,Update Manager仍可供使用,但默认情况下启用了p2。

6.3.1 p2概念

Equinox p2是关于安装单元(IU)的。 IU是您正在安装的工件的名称和ID的描述。此元数据还描述了工件的功能(提供的内容)及其要求(其依赖性)。如果工件仅适用于特定环境,则元数据还可以表达适用性过滤器。例如,org.eclipse.swt.gtk.linux.x86片段仅适用于在Linux gtk x86计算机上安装的情况。从根本上说,元数据是捆绑包清单中信息的表达。工件只是安装的二进制位。通过分离元数据和它们描述的工件来实现关注点的分离。 p2存储库由元数据和工件存储库组成。

[P2 Concepts]

                          图6.8:P2概念

配置文件是安装中的IU列表。例如,您的Eclipse SDK具有描述当前安装的配置文件。在Eclipse中,您可以请求更新版本的更新版本,这将使用不同的IU集创建新的配置文件。配置文件还提供与安装关联的属性列表,例如操作系统,窗口系统和体系结构参数。配置文件还存储安装目录和位置。配置文件由配置文件注册表保存,该注册表可以存储多个配置文件。主管负责调用配置操作。它适用于规划器和引擎。规划器检查现有配置文件,并确定将安装转换为新状态必须执行的操作。引擎负责执行实际的配置操作并在磁盘上安装新工件。接触点是引擎的一部分,它与正在安装的系统的运行时实现一起使用。例如,对于Eclipse SDK,有一个Eclipse接触点,它知道如何安装bundle。对于从RPM二进制文件安装Eclipse的Linux系统,引擎将处理RPM接触点。此外,p2可以在进程内或外部在单独的进程(例如构建)中执行安装。

新的p2配置系统有许多好处。 Eclipse安装工件可以在发行版之间更新。由于以前的配置文件存储在磁盘上,因此还有一种方法可以恢复到以前的Eclipse安装。此外,给定配置文件和存储库,您可以重新创建报告错误的用户的Eclipse安装,以尝试在您自己的桌面上重现该问题。使用p2进行配置提供了一种更新和安装Eclipse SDK的方法,它也是一个应用于RCP和OSGi用例的平台。 Equinox团队还与另一个Eclipse项目的成员Eclipse Eclipse Framework(ECF)合作,为消费p2存储库中的工件和元数据提供可靠的传输。

当p2发布到SDK中时,Eclipse社区内有许多激烈的讨论。由于更新管理器不是配置Eclipse安装的最佳解决方案,因此Eclipse使用者习惯将bundle解压缩到安装并重新启动Eclipse。此方法会尽最大努力解决您的捆绑问题。它还意味着安装中的任何冲突都在运行时解决,而不是安装时间。约束应该在安装时解决,而不是在运行时解决。但是,用户经常忘记这些问题并假设因为磁盘上存在捆绑包,所以他们正在工作。以前,Eclipse提供的更新站点是一个由JARred包和功能组成的简单目录。一个简单的site.xml文件提供了可在站点中使用的功能的名称。随着p2的出现,p2存储库中提供的元数据要复杂得多。要创建元数据,需要调整构建过程以在构建时生成元数据或在现有bundle上运行生成器任务。最初,缺乏可用于描述如何进行这些更改的文档。同样,总是如此,向更广泛的受众展示新技术会暴露出必须解决的意外错误。但是,通过编写更多文档并长时间工作来解决这些问题,Equinox团队能够解决这些问题,现在p2是许多商业产品背后的底层供应引擎。同样,Eclipse Foundation每年都会使用所有贡献项目的p2聚合存储库来发布其协调版本。 

原文链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值