一、涨姿势
在介绍Eclipse插件开发之前先介绍一点有趣的小知识,刚刚开始的时候知道Eclipse是Java写的我很惊讶,我比较奇怪为什么Eclipse使用Java写出来的界面那么精致,而我自己写的Java窗体程序简直没有办法见人。
说来真的非常惭愧,知道今天我才知道Eclipse不是使用的Sun的AWT和Swing技术,而是自己弄了一个底层图形技术SWT(Standard Widgit Toolkit,标准图形工具箱),这里先说一说这3中技术。
首先是AWT,这个是Java中最早弄的一个底层图形技术,因为Java要跨平台,所以AWT是对所用图形系统的支持的图形的一个交集,从名字就可以看出来AWT(Abstract Widgit Toolkit,抽象图形工具箱),它是对支持的图形系统的一个抽象,就是提取公有的做成抽象图形工具箱。这样做的缺点也是很明显的嘛?交集嘛,支持的图形组件当然少了,做出来的东西简陋也就理所当然了。
Swing的思想是,基本图形系统都支持手绘(自己写函数画)图形界面。Swing的组件就都是手绘出来的。这样用户需要什么就完全可以自己手绘就可以了,它的缺点是要自己实现消息处理,性能不是很好。
Eclipse的SWT技术的思想就是结合了AWT和Swing的技术,它是判断如果系统有要使用的图形组件就使用系统提供的,如果没有就使用手绘的方式。
偷偷的思考了一下AWT的界面看起来不怎么样应该并不仅仅是可用图形少的原因。对比一下JDeveloper和Eclipse就知道了,JDeveloper是使用Swing做的,Eclipse是使用SWT做的,一对比感觉完全不在一个档次上啊。
还有一个听的比较多原来一直不清楚具体是个什么鬼的JFace,简单的说JFace就是对SWT进行了封装,相当于一个开发框架避免大家都做很多重复的工作。
使用Eclipse这一套技术及相关的技术来开发基于Java的图形界面应用逼格立刻就感觉高多了。想xmind就是使用Java基于Eclipse RCP架构的软件。如果感兴趣可以了解一下RCP,EMF,GEF等相关的知识就会发现Eclipse真的很好很强大。
二、Eclipse插件小实例
言归正传,我们还是来了解一下Eclipse的插件开发的东西,因为开发Eclipse插件涉及的相关知识比较多,所以下面的介绍感觉比较朦胧,这里主要的目的是涨一点见识,如果感兴趣可以查阅相关的详细资料。
首先开发Eclipse插件可以使用Eclipse,如下图所示,选择File->New->Plug-in Project。
图1 新建Eclipse插件项目
出现如下图所示的对话框,在Project name中输入一个项目名字单击next。
图2 插件名称确定
出现如下图所示的对话框,直接单击next
图3 插件相关内容配置
出现如下图所示的对话框,我们可以选择Hello,World Command然后单击finish。
图4 选择插件模板
如下图所示是Eclipse为我们生成的目录和代码。
图5 Eclipse插件项目工程结构图
这里主要是为了涨姿势,所以不介绍具体的代码了,等下面运行一下程序就知道插件的作用了。不过既然是写Eclipse插件总是要实现一点功能的,我们就来实现一下记录Eclipse启动时间的功能好了。为了区分我们还是先建一个新的包startup,然后新建一个类LaunchTime实现IStartup接口。新的工程结构图如下:
图6 Eclipse插件新的工程结构图
LaunchTime类的代码如下:
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IStartup;
public class LaunchTime implements IStartup {
@Override
public void earlyStartup() {
//获取当前线程的Display,并且同步执行Runnable接口的run方法
Display.getDefault().syncExec(new Runnable(){
@Override
public void run() {
//获取eclipse的启动时间
long start = Long.parseLong(System.getProperty("eclipse.startTime"));
long launchTime = System.currentTimeMillis() - start;
String message = "Eclipse launch cost:" + launchTime + "ms";
//通过Display获得一个窗口(Shell对象)
Shell shell = Display.getDefault().getActiveShell();
//使用得到的shell,使用MessageDialog打开一个信息对话框
MessageDialog.openInformation(shell, "LaunchTime", message);
}
});
}
}
然后如下图所示,选择plugin.xml文件选择Extentions选项,单击Add按钮。
图7 添加扩展点
出现如下图所示的对话框,在Extension Point filter中输入startup,然后选择org.eclipse.startup,然后单击finish。
图8 添加starup扩展点
然后入下图所示,还是选择plugin.xml文件,选择plugin.xml选项,然后像在图中3所示的位置添加<startup class="plugin.startup.LaunchTime" />把我们写的类配置进去。
图9 配置我们的扩展类
然后入下图所示,依然选择plugin.xml文件,然后选择Overview选项,然后选择途中3所表示位置的Launch或者Launch in Debug。
图10 插件测试
如下图所示,是Eclipse启动成功之后我们的插件的效果:
图11 Eclipse启动时间插件测试
如下图所示,是我们配置生成的Eclipse插件
图12 生成的Hello World插件
当我们单击如上图所示的图标的时候,出现如下图所示的效果:
图13 生成的Hello World插件测试
三、插件的导出与安装
如下图所示选择File->Export选项,
图14 导出插件项目
出现如下图所示对话框,选择Deployable plug-ins and fragments单击next。
图15 选择要导出的项目类型
出现如下图所示的对话框,选择要导出的插件项目,选择目标文件夹,单击finish就可以了。
图16 选择要导出插件和导出位置
在导出的目录下有一个plugins文件夹下面就是导出的插件,把这个插件拷贝到Eclipse目录下的plugins目录下,重启Eclipse就OK了。
来源:oschina
链接:https://my.oschina.net/u/2474629/blog/709386