創(chuàng)建第一個(gè)Eclipse插件項(xiàng)目

最近一時(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ì)看到如圖界面:


很熟悉的界面吧悔雹!

  1. 輸入您的工程名這里是HelloWorldPlugin
  2. 勾選Create a Java project
  3. 默認(rèn)選擇插件運(yùn)行目標(biāo)平臺(tái)默認(rèn)選擇Eclipse version 3.5或更高

然后點(diǎn)擊下一步复哆,你將看到:

  1. 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中都做了什么
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末崔泵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猪瞬,更是在濱河造成了極大的恐慌憎瘸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陈瘦,死亡現(xiàn)場(chǎng)離奇詭異幌甘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門含潘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饲做,“玉大人,你說我怎么就攤上這事遏弱∨杈” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵漱逸,是天一觀的道長(zhǎng)泪姨。 經(jīng)常有香客問我,道長(zhǎng)饰抒,這世上最難降的妖魔是什么肮砾? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮袋坑,結(jié)果婚禮上仗处,老公的妹妹穿的比我還像新娘。我一直安慰自己枣宫,他們只是感情好婆誓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著也颤,像睡著了一般洋幻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翅娶,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天文留,我揣著相機(jī)與錄音,去河邊找鬼竭沫。 笑死燥翅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜕提。 我是一名探鬼主播权旷,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贯溅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起躲查,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤它浅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后镣煮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姐霍,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镊折。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胯府。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恨胚,靈堂內(nèi)的尸體忽然破棺而出骂因,到底是詐尸還是另有隱情,我是刑警寧澤赃泡,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布寒波,位于F島的核電站,受9級(jí)特大地震影響升熊,放射性物質(zhì)發(fā)生泄漏俄烁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一级野、第九天 我趴在偏房一處隱蔽的房頂上張望页屠。 院中可真熱鬧,春花似錦蓖柔、人聲如沸辰企。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至十减,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愤估,已是汗流浹背帮辟。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玩焰,地道東北人由驹。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓昔园,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親默刚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甥郑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容