Eclipse插件开发文档记录文本.docx

上传人:b****1 文档编号:2364481 上传时间:2023-05-03 格式:DOCX 页数:48 大小:1.41MB
下载 相关 举报
Eclipse插件开发文档记录文本.docx_第1页
第1页 / 共48页
Eclipse插件开发文档记录文本.docx_第2页
第2页 / 共48页
Eclipse插件开发文档记录文本.docx_第3页
第3页 / 共48页
Eclipse插件开发文档记录文本.docx_第4页
第4页 / 共48页
Eclipse插件开发文档记录文本.docx_第5页
第5页 / 共48页
Eclipse插件开发文档记录文本.docx_第6页
第6页 / 共48页
Eclipse插件开发文档记录文本.docx_第7页
第7页 / 共48页
Eclipse插件开发文档记录文本.docx_第8页
第8页 / 共48页
Eclipse插件开发文档记录文本.docx_第9页
第9页 / 共48页
Eclipse插件开发文档记录文本.docx_第10页
第10页 / 共48页
Eclipse插件开发文档记录文本.docx_第11页
第11页 / 共48页
Eclipse插件开发文档记录文本.docx_第12页
第12页 / 共48页
Eclipse插件开发文档记录文本.docx_第13页
第13页 / 共48页
Eclipse插件开发文档记录文本.docx_第14页
第14页 / 共48页
Eclipse插件开发文档记录文本.docx_第15页
第15页 / 共48页
Eclipse插件开发文档记录文本.docx_第16页
第16页 / 共48页
Eclipse插件开发文档记录文本.docx_第17页
第17页 / 共48页
Eclipse插件开发文档记录文本.docx_第18页
第18页 / 共48页
Eclipse插件开发文档记录文本.docx_第19页
第19页 / 共48页
Eclipse插件开发文档记录文本.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Eclipse插件开发文档记录文本.docx

《Eclipse插件开发文档记录文本.docx》由会员分享,可在线阅读,更多相关《Eclipse插件开发文档记录文本.docx(48页珍藏版)》请在冰点文库上搜索。

Eclipse插件开发文档记录文本.docx

Eclipse插件开发文档记录文本

Eclipse插件开发文档记录

一、参考

.360doc./content/12/0322/18/9210133_196714278.shtml

二、Eclipse插件开发之基础篇

(1)

名词翻译

  有一些名词在翻译的过程中可能会出现歧义,在这里统一一下。

  アーキテクチャ=architecture=架构

  プラットフォーム=platform=平台

  コンポーネント=component=组件

  其余的随时补充。

 1.Eclipse的架构

  Eclipse被作为java的IDE(集成开发环境)被广泛的应用,但是从本质上看Eclipse是一个整合了各种开发工具的平台。

因此,它采用了可以自由的增加各种功能的插件架构技术。

Eclipse平台的基本架构如图1-1所示。

 

?

图1-1Eclipse的架构

  在这里,在最底层位置的是作为Eclipse插件架构基干的OSGi运行时。

虽然在早期的Eclipse版本中已经开始使用插件架构了,但是在Eclipse3.0的时候才首次引入了OSGi。

OSGi是openservicesgatewayinitiative的简称、原本是一种为嵌入式硬件开发的,使网络上的服务提供者和使用者交互(結びつける)的注册服务。

Eclipse使用OSGi来进行插件的管理。

  OSGi运行时之上所有被配置的组件群都是以插件的方式提供的。

SWT和JFace提供了用户接口(UserInterface)的API。

由于SWT和JFace并不依赖于Eclipse,也有可能被作为类库单独使用。

Eclipse不仅把基本的用户接口作为工作台API(WorkBenchAPI)提供出来,在后面要讲到的工作区(Workspace)的资源通过资源API(ResourceAPI)的形式也被作为基本API提供出来了。

在这之上构建起了帮助系统以及基于更新管理器的自动更新等功能。

  从Eclipse平台的角度看,SWT、JFace、工作台的部分就是EclipseRCP(RichClientPlatform)。

EclipseRCP是基于Eclipse的富客户端技术,Eclipse不仅是一个开发工具,也可以作为一个通用的应用程序平台。

EclipseRCP是Eclipse平台的子集,同时,Eclipse自身也是一个EclipseRCP的运用实例。

  2.扩展点

  插件为了自身能够对其他插件进行扩展而提出了扩展点的概念。

当要为插件增加功能的时候就可以利用这个扩展点。

在扩展点的基础上,插件之间可以互相连接。

图1-2使用扩展点进行扩展

  

  扩展和扩展点的连接在程序执行时被建立,提供扩展点的插件事先并不知道该扩展点实际被扩展了什么样的行为。

使用扩展点的插件需要在清单文件(plugin.xml)中像代码1-1那样,使用extension元素声明扩展。

  extension元素中的schema由提供扩展点的插件决定,元素中的容必须按照schema进行书写。

代码1-1plugin.xml中声明扩展

?

1

2

3

    ......

  像上面这样的扩展点和扩展不断的积累重叠,使得Eclipse平台能够实现各种各样的功能。

Eclipse平台提供的扩展点有

∙增加菜单项

∙增加视图

∙增加编辑器

  等等,数量非常的多。

本文将以使用频率相对较高的扩展点为中心进行介绍,在Eclipse的帮助中有Eclipse提供的所有扩展点的说明,大家在使用时可以参考。

  当然,定义一个新的自制插件是绝对可能的。

扩展点的定义方法会在[扩展点定义]章节中为大家详细介绍。

  3.工作台(Workbench)

  在这里认为看到本文的同学们都曾经用Eclipse做过java的开发。

Eclipse的各个部分的名称大家也许都已经知道了。

为了在以后的文章中统一意识,在这里我们再复习一下。

  工作台是Eclipse的整个用户接口的统称。

工作台的结构见图1-3

图1-3工作台

  

∙工作台窗口

    Eclipse的窗口。

通常一个工作台会打开一个窗口,但是也可能一个工作台对应多个窗口。

∙工作台页面

    在工作台上打开的每个透视图(用于特定用途的视图、编辑器的布局)和一个页面对应。

可以包含多个视图和编辑器。

∙菜单栏

    和一般的GUI应用一样的菜单栏区域。

∙工具栏

    和一般的GUI应用一样的工具栏区域。

默认情况下工具栏的右边区域用来显示透视图的列表

∙状态栏

    通常在画面的最下面显示的区域。

编辑器的光标位置、生成进度状况等根据工作台上的操作容显示各种信息。

∙视图

    作用是提供开发者想要的信息。

可以收到状态栏,必要时再打开(高速视图)。

基本上一个视图在一个工作台只能打开一个。

∙编辑器  

    主要用于文件的编辑。

和视图不同编辑器可以同时打开多个。

对于同一个文件也可以打开多个编辑器。

  从插件的代码中访问工作台使用org.eclipse.ui.PlatformUI类。

代码1-2说明了从PlatformUI中取得工作台和工作台窗口的代码示例。

代码1-2使用PlatformUI访问工作台

?

1

2

3

4

5

6

7

8

//取得工作台

IWorkbenchworkbench=PlatformUI.getWorkbench();

//取得工作台窗口

IWorkbenchWindowwindow=workbench.getActiveWorkbenchWindow();

//取得工作台页面

IWorkbenchPagepage=window.getActivePage();

//取得当前处于活动状态的编辑器窗口

IEditorPartpart=page.getActiveEditor();

 

  4.工作区和资源API

  在Eclipse中使用工作区作为开发人员的作业区域。

工作区是在Eclipse启动时指定的一个物理文件夹。

开发人员在Eclipse上生成工程、创建文件等操作都会在工作区指定的文件夹生成实际的文件。

  工作区的资源在Eclipse部使用org.eclipse.core.resources包中定义的虚拟对象进行操作,例如工程是IProject、文件夹是IFolder、文件时IFile。

图1-4工作区的资源

  

  在插件开发的时候很多情况都会使用到工作区的文件或者文件夹。

这时就可以使用这些对象。

  对工作区的访问需要使用org.eclipse.core.resources.ResourcesPlugin。

代码1-3是利用IWorkspaceRoot,去的工作区的工程的代码示例

代码1-3使用ResourcesPlugin访问工作区

?

1

2

3

4

//取得工作区的root

IWorkspaceRootwsroot=ResourcesPlugin.getWorkspace().getRoot();

//取得项目

IProject[]projects=wsroot.getProjects();

  

  工作台和资源访问的API是Eclipse提供的API中最基本的,在插件开发时使用频率较高的API。

在这里不做详细的说明,在以后得例子中会出现一些这样的API。

使用PlatformUI作为工作台访问的入口点和使用ResourcesPlugin作为工作区访问的入口点,是无论如何也要记住的。

三、Eclipse插件开发之基础篇

(2)第一个Eclipse插件

在Eclipse中使用PDE(PluginDevelopmentEnvironment)进行插件开发。

在PDE中为大家准备了几个模板供大家参考。

第一步咱们先利用模板制作一个简单的插件作为和PDE的第一次接触。

  1.生成插件工程

  通过选择[文件]->[新建]->[工程...]启动[新工程(NewProject)]向导。

在插件开发的时候我们就不能选择通常的java工程了,要选择新建一个插件工程。

  选择[插件工程(Plug-inProject)]后点击[下一步(Next)](图2-1)。

下一步,输入一个适当的项目名(图2-2)。

习惯上项目名和插件的ID是相同的。

插件ID和java包的命名方式相同,必须一个世界围唯一的名称。

在这里用cn.sf.amateras.sample作为项目名称(=插件ID)。

点击[下一步(Next)]。

图2-1生成插件工程

  

 

图2-2输入插件信息

  

 

  输入[插件ID]、[插件版本]、[插件属性(插件作者)](图2-3)等信息。

[插件ID]会被自动设成之前输入的[工程名]。

没有其他特别的设定的话继续点击[下一步(Next)]。

图2-3输入生成工程必要的信息

  

 

图2-4模板选择

  

 

图2-5输入模板信息

  

 

  根据选择的模板生成的插件在(图2-5)的画面可以修改一些信息。

如果没有特别需要设定的地方点击[完成(Finish)],生成工程。

  PDE透视图

  插件工程生成后,就会切换到PDE(插件开发)透视图。

工程此时根据选择的[Hello,World]模板生成了插件的源代码,并且打开了manifest编辑器。

图2-6PDE(插件开发)透视图

  

 

  2.插件的动作

  接下来我们看一下插件的动作。

manifest编辑器的[概要]页面右侧[启动Eclipse应用(LuanchanEclipseapplication)](图2-7)。

点击后,会启用一个新的Eclipse实例。

这个新的实例被称为[运行时工作台]。

运行工作台可以以嵌入当前正在开发的插件的状态启动,以使开发者可以对插件的动作进行确认。

图2-7启动运行时工作台

  

 

  启动的运行时工作台,会在菜单栏上增加一个新的菜单项。

这个菜单项就是插件的代码追加上去的。

在工具栏上也增加了一个相应的按钮。

  工具栏上的按钮和菜单项目效果相同,都会出现一个[Hello,EclipseWorld]的对话框。

  Eclipse版的HelloWorld就完成了。

确认完这些动作后,就可以关闭当前的运行时工作台了,咱们在下个小节的讲解中还要去参考插件工程的代码呢~

图2-8示例中新增的菜单项和工具栏按钮以及相应的动作

  

 

  MANIFEST.MF和plugin.xml

  一个插件包含MANIFEST.MF和plugin.xml两个配置文件。

MANIFEST.MF是OSGi的handler配置文件,记录了插件ID、名称、作者、和其他插件的依赖关系等。

plugin.xml记录了插件的扩展和扩展点的定义等信息。

  Eclipse3.1以前由于还没有采用OSGi技术,插件的所有信息都记录在plugin.xml里。

所以应用在Eclipse3.1以前版本的插件如果要应用于Eclipse3.1和以后版本时要注意遵守OSGi的配置文件定义规。

  

  3.PDE的功能

   PDE(插件开发环境·PluginDevelopmentEnviromment)提供了插件开发的各种功能。

因为插件的开发使用java语言,所以也会使用到java编码工具JDT。

 Manifest编辑器

  PDE提供的功能中最重要的就是Manifest编辑器。

编辑器可以为插件的两个配置文件提供图形化的编辑功能。

(图2-9)

  编辑器的配置项目非常多,可以通过编辑器下面的tab页切换设定画面。

图2-9Manifest编辑器

  

  表1Manifest编辑器各tab页  

页面

说明

Overview

可以设定插件的概要信息。

生成用于发布的文档以及启动运行时工作台。

Dependencies

设定插件间的依赖关系。

Runtime

可以设置导出包和ClassPath。

Extensions

管理当前插件对扩展点的扩展。

ExtensionPoints

管理当前插件的扩展点。

Build

生成工程时的各种设定。

MANIFEST.MF

显示MANIFEST.MF的源代码

plugin.xml

显示plugin.xml的源代码

build.properties

显示build.properties的源代码

 

 

 

 

 

 

 

 

 

  

 

在Overview以外的tab页上部会显示一些快捷键按钮,使用这些按钮也可以进行启动运行时工作台,导出等操作。

图2-10编辑器上部

  

  

  下面介绍一下PDE题供的几种视图。

在[Window]->[ShowView]中可以找到没有被显示的视图。

 

  [插件(Plug-ins)]视图

  所有的插件列表,包含当前工作区正在开发的插件。

打开插件节点可以显示插件下包含的资源,但是以jar包提供出来的插件就显示不出来了。

  在插件节点上点击右键选择[打开依赖关系(OpenDependencies)]可以打开后面要介绍的[依赖关系]视图,表现插件间的依赖关系。

右键菜单中也可以把选中的插件作为一个工程引入到当前工作区。

 

  [依赖关系(Plug-inDependencies)]视图

   表现了插件间的依赖关系。

可以分别表示当前插件依赖的插件和依赖当前插件的插件。

 

  [插件注册(Plug-inRegistry)]视图

  当前工作台加载的所有插件列表。

打开插件节点,显示插件提供的扩展和扩展点、依赖关系等。

 

  [错误Log(ErrorLog)]视图

  错误Log视图虽然不是PDE提供的功能,但是在插件开发的时候非常有用。

它可以表现当前工作台发生的错误,并且在错误上双击既可以导向到错误发生的地方。

 

  Plugin-inSelection Spy

  同时按下alt+shift+F1

  Plugin-inSelection Spy是从Eclipse3.4开始加入的新功能,能够显示当前焦点所在的编辑器、视图、向导、对话框等的部信息。

把已有的插件作为参考,进行插件开发,使用这个功能是再合适不过了。

 

  4.解读示例插件的代码

  让我们回到插件工程来,看一看插件工程生成的代码。

首先看一下plugin.xml的代码。

代码2-1plugin.xml

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

xmlversion="1.0"encoding="UTF-8"?

>

eclipseversion="3.4"?

>

   

         point="org.eclipse.ui.actionSets">①

      

            label="SampleActionSet"

            visible="true"

            id="cn.sf.amateras.sample.actionSet">

         

               label="Sample&Menu"

               id="sampleMenu">

            

                  name="sampleGroup">

            

         

         

               label="&SampleAction"

               icon="icons/sample.gif"

               class="cn.sf.amateras.sample.actions.SampleAction"②

               tooltip="Hello,Eclipseworld"

               menubarPath="sampleMenu/sampleGroup"

               toolbarPath="sampleGroup"

               id="cn.sf.amateras.sample.actions.SampleAction">

         

      

   

   为了在菜单栏增加一个项目,文件中使用了extension元素。

①的id指定了扩展点的名称org.eclipse.ui.actionSets。

extension里的容根据扩展点而不同。

示例插件中包含了actionSet、menu、action等元素。

  ②中的class属性指定了cn.sf.amateras.sample.actions.SampleAction类作为响应菜单或者工具栏按钮的action类。

代码2-2SampleAction.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

package.sf.amateras.sample.actions;

  

importorg.eclipse.jface.action.IAction;

importorg.eclipse.jface.viewers.ISelection;

importorg.eclipse.ui.IWorkbenchWindow;

importorg.eclipse.ui.IWorkbenchWindowActionDelegate;

importorg.eclipse.jface.dialogs.MessageDialog;

  

/**

 *Oursampleactionimplementsworkbenchactiondelegate.

 *Theactionproxywillbecreatedbytheworkbenchand

 *shownintheUI.Whentheusertriestousetheaction,

 *thisdelegatewillbecreatedandexecutionwillbe 

 *delegatedtoit.

 *seeIWorkbenchWindowActionDelegate

 */

publicclassSampleActionimplementsIWorkbenchWindowActionDelegate{

    privateIWorkbenchWindowwindow;

    /**

     *Theconstructor.

     */

    publicSampleAction(){

    }

  

    /**

     *Theactionhasbeenactivated.Theargumentofthe

     *methodrepresentsthe'real'actionsitting

     *intheworkbenchUI.

     *seeIWorkbenchWindowActionDelegate#run

     */

    publicvoidrun(IActionaction){  //......①

        MessageDialog.openInformation(

            window.getShell(),

            "Sample",

            "Hello,Eclipseworld");

    }

  

    /**

     *Selectionintheworkbenchhasbeenchanged.We 

     *canchangethestateofthe'real'actionhere

     *ifwewant,butthiscanonlyhappenafter 

     *thedelegatehasbeencreated.

     *seeIWorkbenchWindowActionDelegate#selectionChanged

     */

    publicvoidselectionChanged(IActionaction,ISelectionselection){

    }

  

    /**

     *Wecanusethismethodtodisposeofanysystem

     *resourceswepreviouslyallocated.

     *seeIWorkbenchWindowActionDelegate#dispose

     */

    publicvoiddispose(){

    }

  

    /**

     *Wewillcachewindowobjectinorderto

     *beabletoprovideparentshellforthemessagedialog.

     *seeIWorkbenchWindowActionDelegate#init

     */

    publicvoidinit(IWorkbenchWindowwindow){

        this.window=window;

    }

}

 

   ①run()方法记录了action执行时的处理。

利用MessageDialog.openInformation方法打开了一个对话框。

  咱们再看看生成的另外一个类--Activator类。

这个类对插件的生命周期进行了管理,被称为插件类。

代码2-3Activator.java

?

1

2

3

4

5

6

7

8

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2