Eclipse 插件开发
2013-10-30 11:52
513 查看
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>
只需将你要扩展的扩展点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 &Menu" id="sampleMenu"> //声明功能键组的菜单
<separator name="sampleGroup"/>
</menu>
<action label="&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扩展点
2> Resource扩展点
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>
只需将你要扩展的扩展点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 &Menu" id="sampleMenu"> //声明功能键组的菜单
<separator name="sampleGroup"/>
</menu>
<action label="&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();
相关文章推荐
- java 邮件开发(转)
- 使用 Eclipse 开发 J2EE 应用(转)
- Java调用WMIC命令的方法阻塞
- Java调用WMIC命令的方法阻塞(转)
- java 窗体,未测试
- java 文件压缩
- java 实现指定文件的复制和 拷贝
- java 文件夹创建(创)--测试成功
- java file中 mkdir()与 mkdirs()方…
- java中判断字符串是否为数字的三种方法
- JAVA操作properties文件
- 【xy】JAVA基础--IO
- JAVA基础--JAVA中的反射机制详解
- nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}
- Spring
- Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError: NULL Error
- java 保存文件对话框的使用以及文件过滤器(FileDialog、JFileChooser)
- Java生成EXE
- java Map Set遍历
- java静态类static class