Eclipse 插件开发

1.Eclipse的架构

Eclipse是java的IDE(集成开发环境)。

本质上,Eclipse只是一个平台(Runtime(OSGi)),在这个平台上可以集成插件(Plugin),插件提供开发功能。而插件可以再集成插件。如:

Runtime(OSGi)->SWT->JFace->UI

Runtime(OSGi)->Resources

每一个插件可以扩展(Extension)上一层插件,同时可以暴露自己的扩展点(Extension Point),供下层插件扩展自己。

 

2.如何扩展已有的扩展点

1>编写plugin.xml

<plugin>
<extension point="extension point id">
</extension>
</plugin>

扫描二维码关注公众号,回复: 298887 查看本文章

只需将你要扩展的扩展点id写上,就可以按照该扩展点要求的格式(Schema),来扩展它的功能了。

如,想添加一个功能键,就需要扩展Eclipse暴露出来的扩展点org.eclipse.ui.actionSets,按照它规定的格式(Schema)来编写plugin.xml:

<plugin>
<extension point="org.eclipse.ui.actionSets"> //声明扩展点
<actionSet label="Sample Action Set" visible="true" id="HelloPlugIn.actionSet"> //声明功能键组
<menu label="Sample &amp;Menu" id="sampleMenu"> //声明功能键组的菜单
<separator name="sampleGroup"/>
</menu>
<action label="&amp;Sample Action"icon="icons/sample.gif"tooltip="Hello, Eclipse world" //声明该功能键

toolbarPath="sampleGroup"menubarPath="sampleMenu/sampleGroup"

id="helloplugin.actions.SampleAction"class="helloplugin.actions.SampleAction" //声明按下该功能键的响应类,需要编写

/>
</actionSet>
</extension>
</plugin>

接下来我们只需要编写响应类即可。

 

2>编写扩展点需要的类。

编写扩展点需要的类,如上面,我们想为Eclipse添加一个功能键,当然需要编写一个当按下功能键后,用于响应的类。

该类通常需要实现扩展点提供的接口,或继承扩展点提供的父类,我们只需要实现(implement)接口的方法即可。

如功能键的响应类,我们只需要实现IWorkbenchWindowActionDelegate接口,实现run()方法即可。

public void run(IAction action) {
MessageDialog.openInformation(window.getShell(),"Hello Plug In","Hello Plug In");
}

当按下该功能键后,会弹出框,上写"Hello Plug In"。

 

3. 扩展点介绍。

既然我们已经知道,编写插件,就是扩展已知扩展点,那如果想写一定功能的插件(Plug In),就需要了解,都有那些扩展点(Extension Point)供我们扩展(Extension)。

Eclipse已经给我们暴露出了足够多的扩展点(Extension Point),以便我们写出功能。大概分为两类:

一是UI,用于扩展Eclipse的用户界面的操作

一是Resource,用于扩展Eclipse的文件资源的操作。

 

1>UI扩展点

 

IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
IWorkbenchPage page = window.getActivePage();
IEditorPart part = page.getActiveEditor();

2> Resource扩展点

 

IWorkspaceRoot wsroot = ResourcesPlugin.getWorkspace().getRoot();
IProject[] projects = wsroot.getProjects();

猜你喜欢

转载自hellobbboy.iteye.com/blog/2343470
今日推荐