最近一时兴起,突然想搞一款自己的编辑器,可以实现一些比较复杂的内容,奈何技术不过关啊!不过既然对java比较熟悉,那么还是从java做起吧,慢慢来总有一天会发现新大陆的。经过老大的指点发现eclipse插件是个不错的入门开始,正好我也有这方面的兴趣于是乎就入坑了,这方面的东西在国内用的比较少,在此记录下自己的学习经历。
每当学习一个新的东西时候总会有一个熟悉的东西,那就是Hello World,这真是一个好的开始,通常一个Hello World能让你很快的对某样技术有一个初步的了解好了装了不少逼了可以开始正文了。
基础设施
1.Eclipse4.4.1
2.JDK8
3.参考书籍《Eclipse插件开发学习笔记》
PS:这本书比较旧了,网上也很难再搜到 不过依然不影响我们学习,只不过书中有些内容 与现阶段有点不服而已。所以我在此记录了我的学习过程。Hello World
打开Eclipse,既然是制作插件项目,那么肯定就是要创建插件工程了。
选择File--->New--->Other--->Plug-in Development--->Plug-in Project--->Next;
这是会看到如图界面:
很熟悉的界面吧!
- 输入您的工程名这里是HelloWorldPlugin
- 勾选Create a Java project
- 默认选择插件运行目标平台默认选择Eclipse version 3.5或更高
然后点击下一步,你将看到:
-
Properties
1.1 ID插件的标识符,Eclipse将通过此标识符来识别插件
1.2 Version ,Name和Vendor插件的版本号和名字以及供应商
1.3 Execution Enviroment 插件的执行环境这里是JRE8
2.Options
默认勾选Generate an activator,这是一个java类用来控制插件生命周期的,这里是把它给勾选上,当然你也可以编辑它的类名。
第二个勾选项也要默认勾上。无需多问
3.Rich Client Application
这是一个富客户端应用这里暂时也不用管,因为我们不需要,所以选上no就好。
然后进入下一步那里提供了一些可用的模板来帮助你快速构建插件应用:
不要看到里面的Hello World就下手 我们不选则这个,不要问为什么因为我也是新手我们得跟着教程一步一步来。这里我们选择Plug-in with a view这个模板,然后接着点击下一步:
上面看到的这个向导界面,描述了我们选择的这个视图模板的一些基本信息。有包名,试图类名,视图名,视图类别Id,视图类别名称以及 让你选择该视图是一个list还是tree view这应该很容易理解吧。如果选择了Table viewer那么出来的视图内容就是一个简单的列表结构,如果是tree viewer那么出来的内容就是一个树形结构。剩下的3个复选框 默认都是勾选的 这里也勾选上,不需要做多大的改动,看它的说明就很容易就明白了。接着我们点击Finish之后,至此一个简单的插件工程模板就创建好了。
我们可以在这个工程结构中看到我们刚刚创建的2个类,一个是SampleView另一个就是Activator类,以及icons目录,这里面存放着这个插件所需要的所有图标。META-INF目录下存放的就是该插件的清单文件,这个文件很重要,在后面的开发中我们会经常接触。现在我们打开这个清单
Eclipse会为我们打开一个PDE,PDE提供了一个基于表单的多页插件清单编辑器,上图中我们看到,该清单编辑器包括9个页面,前6个页面都是可视化操作页面,后三个页面是特定的文本编辑器。
概述
上图中打开的就是概述界面,此界面是快速进入其他页面的通道(多数情况并没什么卵用,看个人习惯了),还提供了该插件的一般信息和执行环境的编辑,我们可以在这里定义和修改插件的基本属性(修改在创建插件工程时对插件做出的默认设定)-
依赖性
这里管理该插件的一些依赖我们可以在这里添加第三方包。
运行时
这个就不用看了用过eclipse的人都应该知道,不知道的自行思过去。扩展
这个文件描述了该插件的扩展口经常操作,具体后面就知道了。扩展点
同上构建
-
MANIFEST.MF
这里也是暂时了解一下就好,此文件用来提供关于捆绑软件的描述信息,此文件也可以在概述页面和依赖页面进行可视化编辑,编辑内容都会反映到该页面上。
-
plugin.xml
由于Eclipse体系结构是基于可配置扩展点这一概念,因此插件具有扩展其他插件和发布扩展点的能力。此文件就是用来记录插件的扩展点和扩展的,在刚刚创建的这个应用这暂时还没有扩展点,仅有一个对Eclipse试图的扩展,打开此文件我们可以进行手动编辑,这个文件的内容也会反映在上面的扩展页面上,所以不管是在扩展页面进行可视化操作还是在这里进行手动编辑都是一样的,最终都会改变改页面的内容。
-
build.properties
这个文件记录了需要构建的元素列表,即使不明白,简单看看内容就知道 它描述了该插件的需要的东西。我们可以发现之前说过的熟悉的东西。不过此文件在最终是不会存在在构建好的插件中。
插件类
还记得前面在创建工程的时候勾选的创建activator类么,我们可以简单理解为这是一个插件类,准确点说这是一个媒介类,打开该类的文件我们可以看到Eclipse自动帮我们生成的内容:
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "HelloWorldPlugin"; //$NON-NLS-1$
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
/*启动插件是调用该方法
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin
* #start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*卸载插时调用该方法
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin
* #stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
/**
* Returns an image descriptor for the image file at the given
* plug-in relative path
*
* @param path the path
* @return the image descriptor
*/
public static ImageDescriptor getImageDescriptor(String path) {
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
}```
此类很简单,注释还是写的很详细的,不过目前还不理解为何它提供了我们一个静态的获得默认对象的方法还把构造器的修饰符做为public哈哈。不过这并不影响使用目前来说此类一般不会手动去new它。
`getImageDescriptor(String path)`方法是用来获取插件中图像的标识符。根据此方法可以使用图像资源,如果去该插件中icons目录下的sample.gif图标,可以这样用:
`AbstractUIPlugin.getImageDescriptor("icons/sample.gif").createImage();`
* **运行插件**
1.鼠标右击项目选择Run as--->Java Application
2.鼠标右击项目选择Run as--->Eclipse Application
按照上面的两个步骤之后会打开一个新的Eclipse的实例,这时 我们在Window--->show view--->Other--->就可以找到我们的Hello World项目,不过目录名字并不叫做Hello World而是叫做Sample Category,点击展开就可以看到我们的Sample View了。
![](http://upload-images.jianshu.io/upload_images/2053660-a889347ce26badcb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
点击OK 我们将看到我们第一个试图插件诞生了
![Samlpe View 视图插件](http://upload-images.jianshu.io/upload_images/2053660-34edc22184c4a7dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
随便点点看看有什么效果吧!
下一章我们讲解SampleView中都做了什么