作者:梁祺 (eclipsesbs@gmail.com)
来自:http://www.benisoft.net/day1/index.html
刚开始接触Plug-in开发,我们可以先看一个最简单的Plug-in,Hello World。这个Plug-in可以通过Eclipse提供的模版生成, 不需要写任何代码。不过通过这个Plug-in,可以了解Plug-in的基本结构,对于今后的Plug-in开发是很有帮助的。下面我们就开始吧。
首先启动Eclipse,来创建一个Plug-in项目。在主菜单选择“File/New/Project”。
在“New Project”对话框中选择“Plug-in Project”,点击“Next“。
在“New Plug-in Project”对话框中,在”Project name“文本框输入项目名,这里我们输入 “eclipse.tutorial.day1“。顺便看一下”Location“文本框,也就是新创建的项目在磁盘上的位置, 方便今后查找。其他的属性就不用改了,点击“Next“。
这里我们需要输入Plug-in的一些基本信息。
- ID:Plug-in的ID是Plug-in的唯一标识,我们输入“ eclipse.tutorial.day1”。
- Version:我们就用缺省值"1.0.0.qualifier",”1.0.0“比较好理解,”qualifier“我们后面会看到, 在Plug-in导出时,它会被替换成导出的日期。
- Name:用以表达Plug-in用途,用户在安装Plug-in的时候,是通过这个名字了解这个Plug-in是做什么用的。
- Vendor:就是开发者或公司名称,我们这里用不着。
- Execution Environment,是指定Plug-in运行的环境要求,比如Java 1.5还是1.6,等等。
其他选项用就用缺省值,点击“Next“。
在接下来这页,选择模版“Hello, World”。从右面的解释,可以看到这个模版演示如何使用Action Set来创建菜单和工具栏按钮, 在Eclipse里,菜单和按钮都由Action来完成,Action是Eclipse里非常灵活的一个部分,当然也很复杂。另外, Eclipse里大量使用扩展点来添加功能,在这个例子里,就用到“org.eclipse.ui.actionSets”这个扩展点, 通过扩展这个扩展点,可以在Eclipse的主菜单栏和工具栏中插入我们的菜单项和工具栏按钮。 当然,插入的位置是Eclipse预先保留给其他Plug-in的。点击“Next“。
我们定义的Action需要告诉Eclipse菜单项的显示文字,Tooltip文字,图标,一个符合要求(实现接口)的Action类, 以及快捷键等等。详细的内容我们等一会儿会看到。这里模版只要求提供如下几项:
- Java Package Name:输入“eclipse.tutorial.day1.actions”作为Action类的Java包名
- Action Class Name:输入Action的类名为SampleAction
- Message Box Text:这个模版演示的Action会打开一个对话框,并显示这里输入的文字。我们用缺省的 “Hello, Eclipse world”。
点击”Finish“。
这样,一个Plug-in项目就建好了。项目里的绝大部分文件都可以在左侧的Package View里找到,但是 ”.project“和”.classpath“这两个文件除外。(不过你仍然可以通过Navigation View找到它们, 一般情况我们不需要这样做)。项目包含三个文件。
- src: 存放Java源文件
- icons: 存放Plug-in用到的图像文件
- META-INF: 只存放MANIFEST.MF文件
Package View右面是Plug-in Editor,通过它,你可以查看或修改Plug-in的任何信息。 它的内容来源于两个文件,MANIFEST.MF和plugin.xml。前者提供Plug-in的ID,版本, 与其他Plug-in之间的依赖关系等Plug-in的配置信息, 后者则定义了当前Plug-in的所有扩展。Plug-in Editor有很多配置子页,大部分都很直观,这里就不多作解释了。
运行一下看看这个Plug-in运行起来怎么样。在Plug-in Editor的Overview子页中, 点击“Launch an Eclipse Application”。事实上,我们启动的是加载了Hello World这个Plug-in的Eclipse, Plug-in本身是无法独立运行的,它必须在Eclipse提供的框架中运行,这个框架提供了Plug-in运行所需要的运行时环境。 等Eclipse启动起来后,在主菜单栏里找到“Sample Menu”,选择“Sample Action”。
我们会看到下面这个对话框,对话框里显示的“Hello, Eclipse world”就是我们刚才输入的内容。
到目前为止,我们没有编写任何代码,那它到底是怎么工作的呢?下面我们来看一下。 首先找到Plug-in Editor的Extensions子页, 这个页面列出Plug-in扩展的所有扩展点,也就是Extension Point。 这个Plug-in只扩展了扩展点“org.eclipse.ui.actionSets”。 它先是定义了一个Action Set,名字是“Sample Action Set”。Action Set允许你把同一类的Action归在一起, 便于管理。这个Action Set定义了一个名为“Sample Menu”的菜单。菜单下面的sampleGroup是一个菜单分割线, 菜单分割线一方面起了对Action分组的作用,把同一类的Action挂到同一个sampleGroup上, 就可以保证它们在菜单显示时处于相邻的位置。另一方面,菜单里会出现一个分割线, 把归属于不同菜单分割线的Action隔开,所以它被称为分割线(separator)。
最后我们说一下Sample Action,它有很多东西需要定义:
- id:每个Action需要有一个标识,命名方式类似于Java包名的命名方式。
- label:指定出现在菜单上的文字,&符号以及它后面的字母标识Action的快捷键。
- menubarPath:指定Action在菜单中的位置,“sampleMenu/sampleGroup”表示放在主菜单栏中ID是sampelMenu的菜单里, 和ID为sampleGroup的其他Action放在一起。
- toolbarPath:指定Action在工具栏中的位置,工具栏不象菜单栏是有层次结构的,所以定义起来就比较简单, 只要给个组名就可以了。
- icon:指定图标文件在Plug-in项目中的相对路径。
- tooltip:显示Tooltip文字。
- class:指定Action的Java类。把鼠标移到class上, 我们能看到Action的Java类必须实现IWorkbenchWindowActionDelegate, 或者IWorkbenchWindowPulldownDelegate接口。 点击class,就可以打开Java类文件,非常方便。
SampleAction这个类实现了IWorkbenchWindowActionDelegate接口,其中最重要的方法就是run方法, 用户选择菜单后,在这个方法会弹出一个对话框。
* The action has been activated. The argument of the
* method represents the \'real\' action sitting
* in the workbench UI.
* @see IWorkbenchWindowActionDelegate#run
*/
public void run(IAction action) {
MessageDialog.openInformation(
window.getShell(),
\"Day1\",
\"Hello, Eclipse world\");
}
到此为止,我们可以看到,Hello World Plug-in通过扩展“org.eclipse.ui.actionSet”这个扩展点, 定义了一个Action,包括它的菜单名,图标,在菜单栏和工具栏中的位置,以及Java类SampleAction, SampleAction根据“org.eclipse.ui.actionSet”扩展点的要求,实现IWorkbenchWindowActionDelegate接口, 在run方法里完成动作,弹出对话框。
非常的简单,不是吗?
相关推荐
3. **Extension Points**:提供一种方式让一个Plug-in向其他Plug-in公开其服务或功能,其他Plug-in可以通过实现这些Extension Points来扩展应用功能。 4. **Extensions**:一个Plug-in可以注册到另一个Plug-in提供的...
Post-Build Script Plug-in是其中的一个重要插件,它允许用户在构建过程完成后执行自定义脚本,以此来实现一系列自动化任务,比如发送通知、清理工作空间、执行质量检查等。这个插件的稳定版本确保了在执行这些关键...
本文档的目标是提供一个通用的标准,用于实现plug-in电动汽车的宽带电力线通信,以便于提高电动汽车的充电效率和安全性。 在该标准中,SAE还提供了一个关于宽带电力线通信的rationale,解释了该标准的制定理由和...
当第一个参数改变时,第二个参数的选项会自动更新。 4. **安全性考虑** - **脚本执行风险**:动态参数涉及脚本执行,可能存在安全风险。务必限制可执行脚本的权限,避免注入攻击。 - **漏洞修复**:由于存在漏洞...
NACL Web Plug-in 大华车牌识别chrome插件 crx文件 一个被美国列为限制采购的企业 把最常用的组件发到美国,且在知道国内无法访问的情况下。
"Dynamic Parameter plug-in"是 Jenkins 插件家族中的一个重要成员,它为构建过程提供了更灵活的参数化构建功能。由于某种原因,这个插件在官方仓库可能无法直接搜索到,但它的价值在于能够帮助开发者自定义构建过程...
**Fat Jar Eclipse Plug-In** 是一个非常实用的Eclipse插件,它能够帮助开发者将Java项目打包成一个包含所有依赖的可执行JAR文件,即所谓的“fat jar”或“uber jar”。这种方式非常适合那些需要在不同环境中部署的...
名称:AEM Chrome Plug-in -------------------- 版本:0.8.0 作者:https://adobe-consulting-service 分类:开发者工具 -------------------- 概述:用于 AEM 开发的 Devtools 面板。包括浏览器内的 Log Tracer 和...
1:Adblock for Youtube™ 2:Adblock Plus 3:Adobe Acrobat 4:Click&Clean 5:Context Menu Search 6:Gestures for Chrome 7:Google Translate 8:IDM Integration Module 9:IE Tab 10:LastPass Free ...
CarPlay Communication Plug-in R14G17.2 是苹果公司为开发者提供的一个核心组件,用于构建与CarPlay系统交互的应用程序。这个插件是官方发布的,确保了开发者能够遵循苹果的安全标准和用户体验规范,为iOS设备用户...
2. **创建第一个RCP程序** - **创建一个RCP程序**:指导读者创建基本的RCP项目,包括设置项目结构和编写启动类。 - **启动RCP程序**:介绍如何运行RCP程序,并理解程序启动过程。 - **程序VS产品**:区分程序与...
SAE J2931_4:2014 Broadband PLC Communication for Plug-in Electri
Adobe Flash Builder 4.7 Plug-in Utility.exe
CarPlay Communication Plug-in R14G17_carplay_Carplayplugin是一款专为苹果CarPlay系统设计的通信插件,其主要功能是增强车辆与iPhone之间的连接性和交互性。这款插件是苹果公司针对车载信息系统的一项重要更新,...
以开发一个简单的视图为例,我们将创建一个名为`HelloWorldView`的视图,该视图将在屏幕上显示一条问候消息。 1. **定义视图类**: - `HelloWorldView` 类继承自 `ViewPart` 类。 - 在构造函数中初始化视图的组件...
动态参数插件(Dynamic Parameter Plug-in)是Jenkins持续集成工具中的一个重要扩展,它为构建过程提供了更加灵活的参数化选项。在 Jenkins 中,参数化构建允许用户在触发构建时输入特定值,这些值可以影响构建的过程...
Motion LIVE Plug-in 1.02.1203.1 是一款专为增强动态图形设计体验而开发的插件,适用于那些希望在实时环境中创作、编辑和展示动态视觉效果的专业人士。这款插件可能与视频编辑软件或三维动画软件如Adobe After ...
SAE J2954-2020 Wireless Power Transfer for Light-Duty Plug-in_Electric Vehicles and Alignment Methodology - 完整英文版(194页).pdf
或者OneTab,将多个标签页整合到一个标签中,节省浏览器资源。 4. **开发工具插件**:如Chrome DevTools,是内置的开发者工具,对于前端开发者而言必不可少,用于调试代码、检查元素、性能分析等。 5. **阅读增强...
总之,《SAE J2931_1:2014 Digital Communications for Plug-in Electric Vehicles》是一个关键的技术规范,它为电动汽车和充电设施的数字化交互提供了坚实的框架,推动了整个行业的标准化进程,促进了电动汽车的...