最近一時(shí)興起斯碌,突然想搞一款自己的編輯器,可以實(shí)現(xiàn)一些比較復(fù)雜的內(nèi)容醇份,奈何技術(shù)不過關(guān)傲袅俊!不過既然對(duì)java比較熟悉赡勘,那么還是從java做起吧嫂便,慢慢來總有一天會(huì)發(fā)現(xiàn)新大陸的。經(jīng)過老大的指點(diǎn)發(fā)現(xiàn)eclipse插件是個(gè)不錯(cuò)的入門開始闸与,正好我也有這方面的興趣于是乎就入坑了毙替,這方面的東西在國(guó)內(nèi)用的比較少,在此記錄下自己的學(xué)習(xí)經(jīng)歷践樱。
每當(dāng)學(xué)習(xí)一個(gè)新的東西時(shí)候總會(huì)有一個(gè)熟悉的東西厂画,那就是Hello World,這真是一個(gè)好的開始拷邢,通常一個(gè)Hello World能讓你很快的對(duì)某樣技術(shù)有一個(gè)初步的了解好了裝了不少逼了可以開始正文了袱院。
基礎(chǔ)設(shè)施
1.Eclipse4.4.1
2.JDK8
3.參考書籍《Eclipse插件開發(fā)學(xué)習(xí)筆記》
PS:這本書比較舊了,網(wǎng)上也很難再搜到 不過依然不影響我們學(xué)習(xí)瞭稼,只不過書中有些內(nèi)容 與現(xiàn)階段有點(diǎn)不服而已忽洛。所以我在此記錄了我的學(xué)習(xí)過程。Hello World
打開Eclipse环肘,既然是制作插件項(xiàng)目欲虚,那么肯定就是要?jiǎng)?chuàng)建插件工程了。
選擇File--->New--->Other--->Plug-in Development--->Plug-in Project--->Next;
這是會(huì)看到如圖界面:
很熟悉的界面吧悔雹!
- 輸入您的工程名這里是HelloWorldPlugin
- 勾選Create a Java project
- 默認(rèn)選擇插件運(yùn)行目標(biāo)平臺(tái)默認(rèn)選擇Eclipse version 3.5或更高
然后點(diǎn)擊下一步复哆,你將看到:
-
Properties
1.1 ID插件的標(biāo)識(shí)符,Eclipse將通過此標(biāo)識(shí)符來識(shí)別插件
1.2 Version 荠商,Name和Vendor插件的版本號(hào)和名字以及供應(yīng)商
1.3 Execution Enviroment 插件的執(zhí)行環(huán)境這里是JRE8
2.Options
默認(rèn)勾選Generate an activator,這是一個(gè)java類用來控制插件生命周期的寂恬,這里是把它給勾選上,當(dāng)然你也可以編輯它的類名莱没。
第二個(gè)勾選項(xiàng)也要默認(rèn)勾上初肉。無需多問
3.Rich Client Application
這是一個(gè)富客戶端應(yīng)用這里暫時(shí)也不用管,因?yàn)槲覀儾恍枰味悖赃x上no就好牙咏。
然后進(jìn)入下一步那里提供了一些可用的模板來幫助你快速構(gòu)建插件應(yīng)用:
不要看到里面的Hello World就下手 我們不選則這個(gè)臼隔,不要問為什么因?yàn)槲乙彩切率治覀兊酶坛桃徊揭徊絹怼_@里我們選擇Plug-in with a view這個(gè)模板,然后接著點(diǎn)擊下一步:
上面看到的這個(gè)向?qū)Ы缑嫱枋隽宋覀冞x擇的這個(gè)視圖模板的一些基本信息摔握。有包名,試圖類名,視圖名丁寄,視圖類別Id氨淌,視圖類別名稱以及 讓你選擇該視圖是一個(gè)list還是tree view這應(yīng)該很容易理解吧。如果選擇了Table viewer那么出來的視圖內(nèi)容就是一個(gè)簡(jiǎn)單的列表結(jié)構(gòu)伊磺,如果是tree viewer那么出來的內(nèi)容就是一個(gè)樹形結(jié)構(gòu)盛正。剩下的3個(gè)復(fù)選框 默認(rèn)都是勾選的 這里也勾選上,不需要做多大的改動(dòng)屑埋,看它的說明就很容易就明白了豪筝。接著我們點(diǎn)擊Finish之后,至此一個(gè)簡(jiǎn)單的插件工程模板就創(chuàng)建好了摘能。
我們可以在這個(gè)工程結(jié)構(gòu)中看到我們剛剛創(chuàng)建的2個(gè)類续崖,一個(gè)是SampleView另一個(gè)就是Activator類,以及icons目錄团搞,這里面存放著這個(gè)插件所需要的所有圖標(biāo)严望。META-INF目錄下存放的就是該插件的清單文件,這個(gè)文件很重要莺丑,在后面的開發(fā)中我們會(huì)經(jīng)常接觸≈罚現(xiàn)在我們打開這個(gè)清單
Eclipse會(huì)為我們打開一個(gè)PDE,PDE提供了一個(gè)基于表單的多頁(yè)插件清單編輯器梢莽,上圖中我們看到,該清單編輯器包括9個(gè)頁(yè)面奸披,前6個(gè)頁(yè)面都是可視化操作頁(yè)面昏名,后三個(gè)頁(yè)面是特定的文本編輯器。
概述
上圖中打開的就是概述界面阵面,此界面是快速進(jìn)入其他頁(yè)面的通道(多數(shù)情況并沒什么卵用轻局,看個(gè)人習(xí)慣了),還提供了該插件的一般信息和執(zhí)行環(huán)境的編輯样刷,我們可以在這里定義和修改插件的基本屬性(修改在創(chuàng)建插件工程時(shí)對(duì)插件做出的默認(rèn)設(shè)定)-
依賴性
這里管理該插件的一些依賴我們可以在這里添加第三方包仑扑。
運(yùn)行時(shí)
這個(gè)就不用看了用過eclipse的人都應(yīng)該知道,不知道的自行思過去置鼻。擴(kuò)展
這個(gè)文件描述了該插件的擴(kuò)展口經(jīng)常操作镇饮,具體后面就知道了。擴(kuò)展點(diǎn)
同上構(gòu)建
-
MANIFEST.MF
這里也是暫時(shí)了解一下就好箕母,此文件用來提供關(guān)于捆綁軟件的描述信息储藐,此文件也可以在概述頁(yè)面和依賴頁(yè)面進(jìn)行可視化編輯俱济,編輯內(nèi)容都會(huì)反映到該頁(yè)面上。
-
plugin.xml
由于Eclipse體系結(jié)構(gòu)是基于可配置擴(kuò)展點(diǎn)這一概念钙勃,因此插件具有擴(kuò)展其他插件和發(fā)布擴(kuò)展點(diǎn)的能力蛛碌。此文件就是用來記錄插件的擴(kuò)展點(diǎn)和擴(kuò)展的,在剛剛創(chuàng)建的這個(gè)應(yīng)用這暫時(shí)還沒有擴(kuò)展點(diǎn)辖源,僅有一個(gè)對(duì)Eclipse試圖的擴(kuò)展蔚携,打開此文件我們可以進(jìn)行手動(dòng)編輯,這個(gè)文件的內(nèi)容也會(huì)反映在上面的擴(kuò)展頁(yè)面上克饶,所以不管是在擴(kuò)展頁(yè)面進(jìn)行可視化操作還是在這里進(jìn)行手動(dòng)編輯都是一樣的酝蜒,最終都會(huì)改變改頁(yè)面的內(nèi)容。
-
build.properties
這個(gè)文件記錄了需要構(gòu)建的元素列表彤路,即使不明白秕硝,簡(jiǎn)單看看內(nèi)容就知道 它描述了該插件的需要的東西。我們可以發(fā)現(xiàn)之前說過的熟悉的東西洲尊。不過此文件在最終是不會(huì)存在在構(gòu)建好的插件中远豺。
插件類
還記得前面在創(chuàng)建工程的時(shí)候勾選的創(chuàng)建activator類么,我們可以簡(jiǎn)單理解為這是一個(gè)插件類坞嘀,準(zhǔn)確點(diǎn)說這是一個(gè)媒介類躯护,打開該類的文件我們可以看到Eclipse自動(dòng)幫我們生成的內(nèi)容:
/**
* 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() {
}
/*啟動(dòng)插件是調(diào)用該方法
* (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;
}
/*卸載插時(shí)調(diào)用該方法
* (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);
}
}```
此類很簡(jiǎn)單,注釋還是寫的很詳細(xì)的丽涩,不過目前還不理解為何它提供了我們一個(gè)靜態(tài)的獲得默認(rèn)對(duì)象的方法還把構(gòu)造器的修飾符做為public哈哈棺滞。不過這并不影響使用目前來說此類一般不會(huì)手動(dòng)去new它。
`getImageDescriptor(String path)`方法是用來獲取插件中圖像的標(biāo)識(shí)符矢渊。根據(jù)此方法可以使用圖像資源继准,如果去該插件中icons目錄下的sample.gif圖標(biāo),可以這樣用:
`AbstractUIPlugin.getImageDescriptor("icons/sample.gif").createImage();`
* **運(yùn)行插件**
1.鼠標(biāo)右擊項(xiàng)目選擇Run as--->Java Application
2.鼠標(biāo)右擊項(xiàng)目選擇Run as--->Eclipse Application
按照上面的兩個(gè)步驟之后會(huì)打開一個(gè)新的Eclipse的實(shí)例矮男,這時(shí) 我們?cè)赪indow--->show view--->Other--->就可以找到我們的Hello World項(xiàng)目移必,不過目錄名字并不叫做Hello World而是叫做Sample Category,點(diǎn)擊展開就可以看到我們的Sample View了。
![](http://upload-images.jianshu.io/upload_images/2053660-a889347ce26badcb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
點(diǎn)擊OK 我們將看到我們第一個(gè)試圖插件誕生了
![Samlpe View 視圖插件](http://upload-images.jianshu.io/upload_images/2053660-34edc22184c4a7dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
隨便點(diǎn)點(diǎn)看看有什么效果吧毡鉴!
下一章我們講解SampleView中都做了什么