3.1 Eclipse的结构体系
Eclipse平台是创建插件扩展的核心和服务的名称,它提供了在其中装入和运行插件的运行时。Eclipse平台本身并不是一个完整的产品,它是一组松散绑定但又互相连接的代码块,这些代码块以插件的形式结合起来,最终形成了Eclipse平台,从而使它们能够物尽其用。
3.1.1 体系结构简介
Eclipse定义了一个开放式的、可扩展的体系结构,以便使每个插件开发小组都能够专注于他们擅长的领域,例如让可行性专家构建最终用户工具,让资源库专家构建后端。如果平台设计好了,就可以构建插件,添加新功能,而不影响其他工具。
Eclipse平台是构建在发现插件模型、集成插件模型和运行插件模型的机制上的,也就是说Eclipse平台采用的是插件开发环境(Plug-in Development Environment,PDE),该环境使得软件开发人员可以根据需要随时在开发环境中添加新的插件,从而能够轻松构建与Eclipse平台无缝集成的开发环境。
Eclipse平台的设计和构建是为了满足下述需要:
(1)支持多种应用开发工具的构建(例如Java程序开发工具(JDT)、C/C++程序开发工具(CDT))。
(2)支持无限制的工具提供者,包括独立软件供应商(ISV)。
(3)支持可操作任意文件格式的工具(例如HTML、Java、C、JSP、XML、GIF)。
(4)支持图形界面和非图形界面的应用开发环境。
(5)方便相同或不同文件格式,以及不同供应商之间的无缝集成。
(6)能在多种操作系统下运行,包括Windows和Linux。
Eclipse平台分为核心和用户界面。用户界面中的任何事项都需要一个窗口系统,而核心的事项则隐藏在后台运行。Eclipse平台的用户界面部分称为工作台,核心部分称为平台核心或就叫核心。因此,Eclipse平台就是工具构建器围绕其构建工具插件的核心。Eclipse平台的结构如图3-1所示。
图3-1 Eclipse的平台体系结构
由图3-1可以看出,Eclipse平台主要包括5大板块,分别是平台运行时、工作空间、工作台(SWT/JFace)、团队支持、帮助。Eclipse平台使用工作台模型来集成各种工具,使用扩展点来将用户开发的工具插件插入到平台中。
注意
扩展点是系统中严格定义的一些位置,外部插件可以在此添加扩展功能。
Eclipse平台中的每个子系统本身是由一组插件构成的,这些插件实现一些重要功能并定义扩展点。Eclipse系统本身是通过向第三方插件供应商提供扩展点来构建的,插件供应商可以通过这些扩展点来添加各种功能。插件可以定义它们自己的扩展点,或者只是将扩展的功能添加至其他插件的扩展点上。
像SWT小窗口工具箱和JFace用户界面框架提供了API来扩展它们的功能。其中的某些组件提供与扩展点不直接相关,但可用来实现扩展的附加类库。
Eclipse SDK中包含基本平台以及两个主要工具。它们对于插件开发很有帮助。Java开发工具(JDT)实现功能完整的Java开发环境。插件开发者环境(PDE)添加了专门的工具以使插件和扩展的开发能够顺利进行。
底层的平台运行时使用同一扩展模型来允许插件开发者添加其他文件类型和定制安装的支持。例如,Web服务器、工作组服务器和资源库等。每个工具插件都是由公共平台资源模型来协调的。
平台为用户提供了使用工具的常见方法,并对它们利用插件创建的资源提供集成管理。平台负责管理不同运行时环境的复杂事务,如不同操作系统或工作服务器环境。
下面对Eclipse平台的各个组成部分做详细地讲解。
3.1.2 平台运行时
平台运行时(Platform Runtime)是Eclipse平台核心运行时的简称。Eclipse体系结构的关键就是如何动态发现插件,平台运行时恰恰负责管理、发现和启动已经安装的插件。为了节省内存,只有当用户选择了插件的功能时,插件才被载入和初始化,所以大家不用担心大量的插件会使系统崩溃,只要插件不被激活,它占有的内存还是相当少的。插件一旦被激活,就可以使用插件注册表来发现和存取基于它的扩展点的扩展。
Eclipse平台运行时提供了用于动态扩展对象的机制,所有的插件都使用相同的机制,任何人都可以通过在平台上注册一个合适的适配器组件,向已有的可适配对象类型添加行为。多个个体可以独立扩展同样的可适配对象,而且它们可以有各自不同的目的。当某个接口的适配器被请求,平台识别并调用对应的组件来创建它。这个机制只用到了可适配对象的Java类。任何插件都可以利用该机制来向自己的可适配对象添加操作,并且可以定义新的可适配对象类型供其他插件来使用和扩展。
Eclipse平台运行时的主要工作就是发现Eclipse的plugins目录中哪个插件是可用的。发现插件的过程如下。
(1)首先平台运行时负责在plugin.xml文件中查找插件的声明。
注意
每个plugin.xml文件都在各自插件的子目录中,这些子目录位于Eclipse安装目录下的plugins文件夹下(如D:\eclipse\plugins)。
(2)根据这些描述文件,Eclipse平台运行时在启动的时候在内存中构建一个称为插件注册表的全局注册表。有了全局注册表,给定的插件就可以在运行时确定其他哪些插件希望扩展它。
(3)声明一个扩展点,通过对插件声明扩展,其他插件就可以利用这个插件。通过事先确定可用的插件,并通过插件间的信息交换而不激活它们,平台就可以为每个插件提供上下文的相关信息。
Eclipse平台的更新管理器可以下载和安装最新的功能插件,如果新插件的安装不很令人满意,用户还可以回滚到原来的配置中。
3.1.3 工作空间
Eclipse平台体系结构的重点在于工作空间(Workspace)。用户的工作空间是指通过插件技术插入到Eclipse平台的各种工具的操作范围。
工作空间维护构建和测试软件项目所需要的一切工具,这些工具通过工作空间定义的API来使用工作空间的资源。工作空间的资源不仅包括对象、源代码和资源,还包括项目、IDE和插件的配置设置。
工作空间负责管理用户资源,组织一个或多个顶级项目。每个项目对应于工作空间目录中的子目录,且都可以包含文件和文件夹。一般来说,一个文件夹对应项目的一个子目录,文件夹也可以连接到文件系统的任何一个目录。
注意
默认情况下,所有的项目映射的目录为\eclipse\workspace,也可以改变项目的工作空间位置,如第2章中的图2-11所示。
工作空间也负责将对资源的更改通知给感兴趣的插件工具,这些工具能够用项目特性来标记项目,例如,在Java项目中,可以提供代码配置必需的资源。
工作空间还提供了如下机制。
(1)项目性质机制。项目性质机制允许插件将项目标记为特定类型的项目。例如,“网站性质”给项目打上包含网站静态内容的标签,而“Java性质”给项目打上包含Java程序源代码的标签。项目性质机制是开放的,插件可以声明新的项目性质,并且为配置具有此项目性质的项目提供代码。项目性质由插件定义,通常当用户执行一些由插件定义的操作时,按项目进行添加或删除。一个项目可以有任意多个性质,这样工具就可以共享项目而不需要相互知道对方。
(2)工作空间历史机制。工作空间维护资源改变一个低等级的历史记录,这使得它能迅速取消变动,恢复到先前保存的状态,有可能是一天前的或者几个小时前的,这取决于用户如何通过空间和时间首选项来进行设置,从而管理历史记录。历史记录能够减小丢失资源的风险。
(3)跟踪工作区的资源更改机制。Eclipse平台提供了一个通用的机制,它允许工具跟踪工作空间资源的变化。通过注册一个资源改变侦听器,可以确保工具收到所有创建、删除和改变文件内容的事后通知。平台把事件通知延迟,直到一批资源操作结束。事件报告以资源变量的树型结构来描述资源创建、删除和更改操作的结果。资源变量也提供关于标记改变的信息。资源树变量对于显示资源树的工具而言特别有用和高效,因为每个变量指出了工具应该在何处添加、删除或刷新部件。
(4)标记机制(Marker)。标记机制用于注释资源。标记用于记录不同的消息,例如编译器错误消息、TODO列表项、书签和调试断点。标记机制是开放的,插件可以声明新的标记子类型并控制是否要在两次运行间保存这些标记。
3.1.4 工作台
工作台(Workbench)是一个高级用户界面框架,它为用户提供了一个整体构架,并且提供了一个可扩展的用户界面。Eclipse平台是由组件构成的,启动Eclipse之后,工作台就是主要的工作窗口,如图3-2所示。
图3-2 Eclipse工作台
Eclipse工作台是用来创建、管理、导航项目和资源(文件或文件夹等)的,它不知道如何编辑、运行和测试Java程序,这些工作都是由其他功能组件来完成的(例如Java程序是由开发工具JDT来完成的)。
Eclipse工作台是构建在SWT和JFace两个工具包之上的。
(1)SWT,标准小窗口工具箱。它与本地窗口系统集成,提供一个独立于操作系统的应用程序接口的图形库。
(2)JFace,一个使用SWT实现的用户界面工具箱。它提供了用于处理常见的用户界面编程任务的Helper类,从而使工具开发者专注于实现特定插件的功能。
与SWT和JFace这两个通用用户界面工具箱不同,工作台是一个高级用户界面框架,它提供具有个性的Eclipse平台的用户界面,用于构建由插件构建的复杂用户界面的产品。工作台是在SWT/JFace平台核心的基础上构建的,主要由透视图、视图和编辑器组成。
3.1.5 团队支持
Eclipse平台允许对工作空间中的项目进行版本管理,将其与一个小组资源库相关联。资源库提供的功能将从根本上影响用户工作流程。这些功能包括:附加的步骤检索文件,与本地内容比较,为它们进行版本控制,并将更新的文件返回至资源库。
Eclipse平台采用Pserver或SSH协议来存取CVS资源库。CVS称为“并行版本控制系统(Concurrent Version System)”,在它的编程控制环境下,组内各成员独立地在各自的工作台中完成自己的工作,然后通过CVS资源库来共享各个成员的工作。
CVS使用分支模型来支持多个独立却又相互联系的工作流程。这个模型允许每个成员都可以加入CVS小组项目,在进行更改时与其他成员共享自己的工作,同时在项目进行当中,也可以了解其他成员的工作进展。
知识:
分支就是指一个开发团队对正在进行的项目进行共享和集成的地方,读者可以认为是一个公共的工作空间,每个成员都可将项目的更改反映到这里。
CVS为团队开发提供了两个重要的功能部件,一个记录历史工作,另一个协调和集成工作。通过维护历史记录,开发人员能够很方便地将当前工作与以前的工作作对比,最终选择比较好的那一个。协调和集成工作可以方便地产生一个对当前项目状态的定义,这个状态包括了集成工作。
在本书的第七章中,将会详细介绍有关CVS的内容,以及利用它来进行版本管理等内容。
3.1.6 帮助
Eclipse平台的联机帮助系统允许浏览、查询和打印系统文档。文档按照书籍的方式组织成信息集。帮助系统提供了按关键字查询信息所需的文字搜索引擎,以及用于查找描述所需特定功能的信息的上下文帮助。
帮助组件具有与Eclipse平台本身相当的可扩展能力。与插件向Eclipse添加功能相同,帮助提供了一个附加的导航结构,允许工具以HTML文件的形式添加文档。
1.帮助浏览器
在Eclipse工作台(如图3-2所示的工作台)的菜单中选择【帮助→帮助内容】,如图3-3所示,将打开如图3-4所示的帮助浏览器窗口,在该窗口中显示了产品文档的帮助信息。当点击左边导航树中的某个链接主题时,右边将会给出相应主题的具体介绍内容。
图3-3 打开帮助内容
图3-4 帮助目录
2.搜索
如果希望在联机帮助浏览器中找到相应的信息,可以使用联机帮助的搜索功能,如图3-5所示。输入待搜索的信息,帮助系统就会搜索整个信息集,来查找相关的信息。
图3-5 搜索
3.上下文帮助
如果正在完成某个任务而遇到不了解的地方,可以使用上下文帮助。通过单击所讨论的界面小窗口或使用Tab键来使该小窗口处于焦点中,然后按F1键。弹出的窗口将提供相关信息以及指向更多信息的链接。例如对“控制台”不了解,可以将鼠标移到“控制台”,然后按下F1,将显示如图3-6所示的界面。
图3-6 上下文帮助