Eclipse插件开发初遇

安稳与你 提交于 2019-12-05 03:03:02

一、涨姿势

   在介绍Eclipse插件开发之前先介绍一点有趣的小知识,刚刚开始的时候知道EclipseJava写的我很惊讶,我比较奇怪为什么Eclipse使用Java写出来的界面那么精致,而我自己写的Java窗体程序简直没有办法见人。

   说来真的非常惭愧,知道今天我才知道Eclipse不是使用的SunAWTSwing技术,而是自己弄了一个底层图形技术SWTStandard Widgit Toolkit,标准图形工具箱),这里先说一说这3中技术。

   首先是AWT,这个是Java中最早弄的一个底层图形技术,因为Java要跨平台,所以AWT是对所用图形系统的支持的图形的一个交集,从名字就可以看出来AWTAbstract Widgit Toolkit,抽象图形工具箱),它是对支持的图形系统的一个抽象,就是提取公有的做成抽象图形工具箱。这样做的缺点也是很明显的嘛?交集嘛,支持的图形组件当然少了,做出来的东西简陋也就理所当然了。

      Swing的思想是,基本图形系统都支持手绘(自己写函数画)图形界面。Swing的组件就都是手绘出来的。这样用户需要什么就完全可以自己手绘就可以了,它的缺点是要自己实现消息处理,性能不是很好。

      EclipseSWT技术的思想就是结合了AWTSwing的技术,它是判断如果系统有要使用的图形组件就使用系统提供的,如果没有就使用手绘的方式。

   偷偷的思考了一下AWT的界面看起来不怎么样应该并不仅仅是可用图形少的原因。对比一下JDeveloperEclipse就知道了,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 插件相关内容配置

   出现如下图所示的对话框,我们可以选择HelloWorld 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目录下,重启EclipseOK了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!