最近由於特殊需要,開始學習插件開發。
以前接觸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 &Menu" id="sampleMenu"> <separator name="sampleGroup"> </separator> </menu> <action label="&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。啟動效果如下:
這樣一個簡單的插件就開發完啦!讓我們就此真正的起航吧!!!