专栏首页xingoo, 一个梦想做发明家的程序员【插件开发】—— 2 插件入门

【插件开发】—— 2 插件入门

  最近由于特殊需要,开始学习插件开发。

以前接触java也算有些时日,但是一直不知道有插件开发这样一种技术路径,本想着这开发工具都给你备好了,直接用不就行了。但是总有些IT工厂,为了要节约成本,开发自己的开发工具,但是又要节省时间,总不能一切都自己来。毕竟开发一个eclipse也要很长时间的。因此,插件开发出现在历史舞台。

首先要了解插件开发,就得从SWT/JFACE说起了。SWT是一种开源的界面开发框架,以前学java的时候,总是用一些panel,就类似这个。JFace又是一种基于SWT的UI不见的API。Eclipse就是用这个开发出来的,它提供了Eclipse强大的扩展性,因此可以让用户任意的插入自己想要的插件,开发自己的IDE。

  下面就直接弄一个简单的插件吧!

首先认识一下Eclipse,这个大家应该很熟了!

  1 红色部分是我们的工具栏

  2 蓝色部分是视图

  3 黄色部分是编辑器

  通常我们使用编辑器,进行代码操作,或者业务操作。在视图,进行一些资源的查看等。红色引入一些常用的功能,辅助我们的操作。

我们先做一个简单的工具栏的控件,了解一下eclipse的插件开发流程!

  1 新建一个插件工程

  2 创建自己的插件名字,这个名字最好特殊一点,一遍融合到eclipse的时候,不会发生冲突。

首先,写入自己的插件名字。

  source folder 是插件的代码路径。

  output folder是插件输出的目标路径。

  下面是开发插件的eclipse的版本。

  3 下一步,进行插件的具体详情设置

ID 是插件的标识

version 是插件的版本

Name是插件的名字

Provider是开发者的信息

下面的Activator,是插件的激活类,用来管理插件的生命周期。

最后是选择是否开发RCP,富客户端应用,暂且不用,选否就行了。

  4 使用插件模板,创建一个插件工具

选择hello world.这是一个工具栏的按钮。

 5 下一步,进行按钮的信息设置。

  默认会生成类的名字,路径(包名),以及工具栏按钮出发的消息提示。

  6 点击finish,完成插件的创建。

  这样,我们就完成了一个插件的创建,那么看一下,eclipse都为我们生成了什么。

1 导入了插件所需要用到的jar包 2 导入了插件依赖的库 3 源文件 4 插件按钮图片 5 插件的配置信息

MANIFEST.MF 插件的捆绑信息

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: 我的插件
Bundle-SymbolicName: com.test.myplugin; singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.test.myplugin.Activator
Bundle-Vendor: xingoo
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime
Bundle-ActivationPolicy: lazy

  Name 是我们之前设置的插件名字   SymblicName 是我们插件的包名   version 是插件的版本   Activator 是插件的激活类   Vendor 是插件开发者的信息   Bundle 是插件以来的库

这些信息都对应着插件的overview页面的信息。

  plugin.xml 插件的详细设置文档,包含插件的扩展点信息,以及插件自己的信息

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>

   <extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            label="Sample Action Set"
            visible="true"
            id="com.test.myplugin.actionSet">
         <menu
               label="Sample &amp;Menu"
               id="sampleMenu">
            <separator
                  name="sampleGroup">
            </separator>
         </menu>
         <action
               label="&amp;Sample Action"
               icon="icons/sample.gif"
               class="com.test.myplugin.actions.SampleAction"
               tooltip="Hello, Eclipse world"
               menubarPath="sampleMenu/sampleGroup"
               toolbarPath="sampleGroup"
               id="com.test.myplugin.actions.SampleAction">
         </action>
      </actionSet>
   </extension>

</plugin>

  <plugin>元素清单的主体   <extension>插件的功能扩展,里面包括 point 扩展点的标识、id 扩展实例的标识、name 提供的用户的名称等等

  build.properties 构建的元素列表

source.. = src/
output.. = bin/
bin.includes = plugin.xml,\
               META-INF/,\
               .,\
               icons/

  里面包括插件的源文件目录,生成文件目录,还有一些配置信息的引入。

  提供的插件类Activator.java

 1 package com.test.myplugin;
 2 
 3 import org.eclipse.jface.resource.ImageDescriptor;
 4 import org.eclipse.ui.plugin.AbstractUIPlugin;
 5 import org.osgi.framework.BundleContext;
 6 
 7 /**
 8  * The activator class controls the plug-in life cycle
 9  */
10 public class Activator extends AbstractUIPlugin {
11 
12     // The plug-in ID
13     public static final String PLUGIN_ID = "com.test.myplugin";
14 
15     // The shared instance
16     private static Activator plugin;
17     
18     /**
19      * The constructor
20      */
21     public Activator() {
22     }
23 
24     /*
25      * (non-Javadoc)
26      * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
27      */
28     public void start(BundleContext context) throws Exception {
29         super.start(context);
30         plugin = this;
31     }
32 
33     /*
34      * (non-Javadoc)
35      * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
36      */
37     public void stop(BundleContext context) throws Exception {
38         plugin = null;
39         super.stop(context);
40     }
41 
42     /**
43      * Returns the shared instance
44      *
45      * @return the shared instance
46      */
47     public static Activator getDefault() {
48         return plugin;
49     }
50 
51     /**
52      * Returns an image descriptor for the image file at the given
53      * plug-in relative path
54      *
55      * @param path the path
56      * @return the image descriptor
57      */
58     public static ImageDescriptor getImageDescriptor(String path) {
59         return imageDescriptorFromPlugin(PLUGIN_ID, path);
60     }
61 }

  start()和stop()分别用于插件开始与停止调用的函数。

  最后让我们运行一下这个插件吧!

  启动方式1 直接在overview界面点击;

   启动方式2 也可以点击运行或者DEBUG按钮,运行方式选择Eclipse Application。

  点击启动后,会为我们重新开启一个Eclipse,这个Eclipse就是带有我们创建的插件的新Eclipse。启动效果如下:

 这样一个简单的插件就开发完啦!让我们就此真正的起航吧!!!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【插件开发】—— 1 Eclipse插件开发导盲

    在真正接触eclipse插件开发一个月后,对插件的开发过程以及技术要求,也有了一定的了解。遥想之前像无头苍蝇一样乱撞乱学,真心觉得浪费了不少时间。这里就总结...

    用户1154259
  • [logstash-input-http] 插件使用详解

    插件介绍 Http插件是2.0版本才出现的新插件,1.x是没有这个插件的。这个插件可以帮助logstash接收其他主机或者本机发送的http报文。 插件的原理很...

    用户1154259
  • [翻译]CURAND Libaray--Host API--(1)

    2Host API简述 使用host api,用户需要在头文件的部分包含 curand.h,并且添加CURAND的动态链接库,即在LINKER的INPUT里面添...

    用户1154259
  • Jenkins 插件开发之旅:两天内从 idea 到发布(下篇)

    托管插件包括一系列流程步骤。 笔者完成了它所有步骤(包括非必须的步骤),其中主要有两个具有标志性的任务:

    LinuxSuRen
  • 程序员必知的Chrome浏览器灵魂插件

    优势之一在于流畅度,其二就是兼容性很强,这也是它最大的优势:支持众多强大好用的拓展程序(Extensions)。

    老九君
  • 【Chromium中文文档】插件架构

    背景 在阅读这个文档前,你应当熟悉Chromium的多进程架构。 概述 插件是浏览器不稳定的主要来源。插件也会在渲染器没有实际运行时,让进程沙箱化。因为进程是第...

    梦里茶
  • cordova学习四 插件集成

    4.1插件添加          插件集成命令在项目的根目录比如myapp则是在../myapp这个目录下 一般集成插件都是在github也可以是下载好的 ...

    cfs
  • 移动端常用开发插件和框架

    移动端要求的是快速开发,所以我们经常会借助于一些插件来帮我完成操作,那么什么是插件呢?

    清出于兰
  • 建立生态系统|Backstage插件市场现已开放

    优秀的开发人员体验能培养出快乐的、有创造力的、高效的工程师。我们认为,工程师不必成为各种基础架构工具或学科(例如,机器学习或后端)的专家就可以高效地工作。基础设...

    CNCF
  • php把文件设置为插件的技巧方法

    插件,亦即Plug-in,是指一类特定的功能模块(通常由第三方开发者实现),它的特点是:当你需要它的时候激活它,不需要它的时候禁用/删除它;且无 论是激活还是禁...

    砸漏

扫码关注云+社区

领取腾讯云代金券