隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
          數據加載中……

          5.2 插件的Hello World

          *******************************************************
          作者:陳剛,普通程序員,曾有幸以Eclipse插件方式開發過一個中型軟件。現將所學
          付諸于紙,暫取書名<Eclipse插件開發指南>,將于2005年初由清華大學出版社出版。
          blog:http://www.cnblogs.com/glchengang/
          *******************************************************
           
           

           

          5.1.1  Eclipse插件開發簡介

          插件的概念讀者應該很熟悉,象MP3播放軟件WINAMP的皮膚插件、Windows Media Player的眾多的外觀插件、音效插件等等。但如果你以為插件只能做成為原軟件的邊角料,那是可以理解的,因為你還沒有看到過Eclipse的插件是什么樣的。Eclipse可以全面更新你對插件的概念,它也是對插件概念運用得最徹底最爐火純青的一個軟件。

          在第一章我們就介紹了Eclipse的技術特點,Eclipse的內核很小,其他功能都是基于這個內核上的插件,如Eclipse自帶的UNITANT等。而且Eclipse還開放了自己的插件機制,并提供了很好的插件開發環境,讓用戶可以自己來開發Eclipse的插件。想知道開發Eclipse的插件能到什么程度嗎?看看這些Eclipse上的插件吧:用于UML建模的Together for Eclipse、用于JSPMyEclipseLombozIBM的全能開發工具WSAD等等,它們全是Eclipse的插件。如果微軟愿意,也可以把Office軟件做成Eclipse的插件。如果Adobe有興趣,Photoshop也可以有for Eclipse的插件版,Eclipse中的API Draw2D的繪圖功能也是很功的。

          Eclipse的各式插件正如雨后春筍般不斷冒出,Eclipse已經超越了開發環境的概念,它的目標是做成一個通用的平臺,讓盡量多的軟件做為插件集成在上面,成為未來的集成的桌面環境。同樣我們可以將我們的應用系統寫成Eclipse插件,筆者就在2004年參與開發了一個項目管理軟件,該軟件就是以Eclipse的插件形式開發的。

          5.1.2  Eclipse插件開發的優勢和不足

          那么將軟件寫成插件有什么好處呢?對于用戶來說Eclipse的使用環境比較友好,前面介紹的SWT/JFace中還是比較基本的界面元素,象Eclipse中的視圖、編輯窗、停泊窗這些界面如果實現呢?如果用Appliction的方式會很麻煩,如果寫成Eclipse插件則實現這些界面風格不會吹灰之力。可以說把軟件開發成Eclipse插件的最大好處就是界面風格友好統一,如果用戶較熟悉Eclipse超做的話這種優勢就更明顯。

          當然將軟件寫成插件形式也有一定的缺陷。首先插件必須依附Eclipse,如果要安裝插件就得先安裝Eclipse。其次,插件和Eclipse融合在一起,原Eclipse的一些菜單和工具欄是無法完全屏蔽的。

          5.2  插件的Hello World

          5.2.1  使用向導一步步創建HelloWorld

          我們利用Eclipse的“新建”向導來創建一個簡單的插件。

          1、新建一個插件項目

          1)選擇主菜單“文件→新建→項目”,在彈出的窗口中(如圖5.1所示)選擇“插件開發”下的“插件項目”,然后單擊“下一步”。

          5.1  項目類型選擇

          2)如圖5.2所示,輸入項目名“myplugin”,其他設置不變,然后單擊“下一步”。

          5.2  項目名稱

          3)在新顯示的窗口中接受所有缺省值不變,直接單擊“下一步”,這時將顯示模板選擇窗口(如圖5.3所示)。勾選“使用其中一個模板來創建插件”項,然后選擇模板“Hello,World”項。最后單擊“完成”結束向導對話框。

          5.3  模板選擇窗口

          2、插件項目myplugin簡介

          如果在新建項目中操作正確,Eclipse將顯示如圖5.4所示界面。

          5.4  建立一個插件項目后的Eclipse界面

          界面的左邊視圖中多了一個名為“myplugin”的項目。項目中有兩個文件:MypluginPlugin.javaSampleAction.javaMypluginPlugin.java較重要,今后將會使用到它,而SampleAction.java則是一個類似JFace中的Action,可以把它看做是插件中的Action,等會運行時我們將看到SampleAction.java的效果。

          項目根目錄下還有一個非常重要文件的plugin.xml,這個文件是插件的入口文件,Eclipse是根據這個文件里的設置信息來加載插件的。在插件加發初期會頻繁在這個文件中做編輯,術語叫“設置擴展點”。象在Eclipse的增加主菜單、視圖、按鈕等,都是在這個文件里面設置不同的擴展點,后面的將詳細講到如何編輯此文件。有人會問:開發一個系統會有很多的菜單和按鈕,是不是都要在這個文件里設置呢?回答:不必。在plugin.xml里只設置和Eclipse接壤的主要擴展點,其他軟件自有的菜單和按鈕不用在plugin.xml設置了。圖5.4Eclipse界面中部顯示的就是plugin.xml的設置窗口,單擊該窗口下部的plugin.xml項后(如圖5.5所示),就可以直接編輯此文件。

          5.5  plugin.xml編輯窗下部的選項條

          3、運行插件

          如圖5.6所示,選擇主菜單“運行→運行方式→運行工作平臺”,這種是專用是插件的運行方式,它將打開一個新的Eclipse環境,并同時將插件項目編譯加載到新的Eclipse環境中。今后開發經常要通過這個方法來試運行所開發的插件項目,不過那時候選擇“運行→調試方式→運行工作平臺”以調試方式來運行插件會比較多,Eclipse支持調試期間的熱修改,不用每次修改都新啟一個Eclipse,這樣能節省很多調試開發時間。

           新開的Eclipse界面如圖5.6所示,在新的Eclipse環境中新增加了一個工具欄按鈕和一個主菜單項。單擊此按鈕或菜單項,將彈出一個“HelloEclipse world”信息提示框。

          5.6  myplugin插件運行效果圖

          4、總結

          本節里我們還只是依樣畫葫蘆,感覺有點云里霧里的吧。但不管怎么樣,第一個Eclipse插件已經在我們手里誕生了,下一節我們將不用HelloWorld模板來新建一個空白的插件項目,然后一步步的經過手工實現這個Hello World插件項目所擁有的功能。

          5.2.2  以空白項目為基礎手工創建HelloWorld

          1、新建項目

          按照上一節所講新建插件項目的方法,新建一個名為myplugin2的插件項目。注意在最后一步不要選擇任何模板,直接單擊“完成”結束向導對話框,除此之外的其他步驟都一樣。很幸運,Eclipse3.0修正了很多BUG,象以前用Eclipse2.X中文版時,在這一步還會出很多庫引用的錯誤,要很麻煩的一個個去修正。

          2、創建IWorkbenchWindowActionDelegate接口的實現類

          新建一個包book.chapter_5,并將上一節中由HelloWorld模板生成的myplugin項目中的SampleAction.java文件復制到本項目中(Eclipse支持鼠標拖拉操做)。然后對SampleAction做了一些小修改:刪除了無用的注釋和構造函數,修改了一下彈出框的提示文字,修改后的代碼如下:

          /**

           * 本類相當于插件的Action,要在Eclipse中增加主菜單或工具欄按鈕,

           * 就需要寫一個實現IWorkbenchWindowActionDelegate接口的類

           */

          public class SampleAction implements IWorkbenchWindowActionDelegate {

              private IWorkbenchWindow window;

              public void run(IAction action) {

                  //打開一個信息提示框

                  MessageDialog.openInformation(window.getShell(),
                                               "Myplugin2
          插件", "Hello,這是手工做的插件");

              }

              public void selectionChanged(IAction action, ISelection selection) {}

              public void dispose() {}

              public void init(IWorkbenchWindow window) {this.window = window;}

          }

          3、原plugin.xml文件各設置項說明

          如圖5.7所示,將plugin.xml文件打開,并單擊窗口下的“plugin.xml”項轉到其代碼編輯窗。

          5.7  plugin.xml的代碼編輯窗

          項詳細介紹其中的各項設置如下:

          1<plugin>

          <plugin

             id="myplugin2"

             name="Myplugin2 插件"

             version="1.0.0"

             provider-name=""

             class="myplugin2.Myplugin2Plugin">

          說明:<plugin>plugin.xml的主體。

          l           id 插件的唯一標識。實際項目中一般加上包名或網址名來命名id,比如eclipsetomcat插件是這樣命名的:org.eclipse.tomcat,這樣在世界上就不會有插件的標識名和你重名了。以后在某些擴展點中的屬性也會用到標識符作為名稱的前綴。

          l           name 插件的名稱,可以不唯一。

          l           version 插件版本號。

          l           provider-name 插件開發商的名稱,可以寫上作者或公司的名稱。

          l           class 插件類的名稱,即插件項目自動生成的MypluginPlugin2.java文件的類,前面加上包名。

          2< runtime>

          <runtime>

            <library name="myplugin2.jar">

               <export name="*"/>

            </library>

          </runtime>

          說明:這里是聲明插件運行時需要的jar包,比如插件要連接MySQL數據庫需要它的一個包,如下定義,其中“lib\”是該包所在路徑。其中本插件自身的jar包也要聲明,而且本插件在打包時將以myplugin2.jar為名打包。

          <runtime>

            <library name="myplugin2.jar">

               <export name="*"/>

            </library>

            <library name="lib\mysql-connector-java-3.0.9-stable-bin.jar"/>

          </runtime>

          3<requires>

          <requires>

            <import plugin="org.eclipse.ui"/>

            <import plugin="org.eclipse.core.runtime"/>

          </requires>

          說明:在requires域中定義了該插件所要使用的依賴插件。現在兩項就夠了,隨著開發的不斷深入這里將會添加更多對其它插件的引用。如下是筆者的實際項目中的requires設置,它要用到draw2dgef插件來畫圖、用于插件的幫助系統來創建建自己的幫助文檔。

          <requires>

              <import plugin="org.eclipse.ui"/>

              <import plugin="org.eclipse.core.runtime"/>

              <import plugin="org.eclipse.core.resources"/>

              <import plugin="org.eclipse.draw2d"/>

              <import plugin="org.eclipse.gef"/>

              <import plugin="org.eclipse.help"/>

              <import plugin="org.eclipse.help.ui"/>

              <import plugin="org.eclipse.help.appserver"/>

              <import plugin="org.eclipse.help.webapp"/>

          </requires>

          4、為HelloWorld修改plugin.xml

          將如下代碼加入到plugin.xml的“</requires>”行之后:

             <extension point="org.eclipse.ui.actionSets">

                <actionSet

                      label="樣本操作集"

                      visible="true"

                      id="myplugin2.actionSet">

                   <menu

                         label="樣本菜單(&amp;M)"

                         id="sampleMenu">

                      <separator

                            name="sampleGroup">

                      </separator>

                   </menu>

                   <action

                         label="樣本操作(&amp;S)"

                         icon="icons/sample.gif"

                         class="book.chapter_5.SampleAction"

                         tooltip="Hello,這是手工做的插件"

                         menubarPath="sampleMenu/sampleGroup"

                         toolbarPath="sampleGroup"

                         id="book.chapter_5.SampleAction">

                   </action>

                </actionSet>

             </extension>

          說明:

          <extension>項設置要擴展的擴展點,它是非常重要的一項。

          l           point="org.eclipse.ui.actionSets",設置了本插件的擴展點為何,actionSets是指Eclipse的菜單、菜單項和工具欄按鈕的擴展點

          l           <actionSet>項表示一個action(菜單、按鈕)label是顯示的名稱。id其唯一標識符,只要保證在本plugin.xml文件中不存在重復的id就行了。visible指設置的按鈕或菜單是否顯示,如果設置成false,則不顯示。注意:要看visible設置的效果要將“透視圖”關掉再重新打開。

          l           <menu><actionSet>下的子項,它表示在Eclipse中插入顯示一個名為“樣本菜單(M)”的主菜單。separator標簽是一個結束符,它可以對菜單分組。

          l           <action>也是<actionSet>下的子項,由它設置菜單、按鈕。icon是圖片的路徑,如果該圖片不存,默認是一個紅色實心小框(Eclipse2.X)或不顯示圖片而顯示文字(Eclipse3.X)。Class是按鈕所對應的類,注意包名也要加上。menubarPath表示把這個action做成一個菜單項放在上前<menu>定義的主菜單下。toolbarPath表示把這個action再做成一個工具欄按鈕。id是標識符,設置成和class項一樣的名稱是個不錯的選擇。

          以上僅是Eclipse的擴展點中的一種,此外還有其它的擴展點共有一百多種之多。我們沒有必要了解所有擴展點的設置,只須熟悉一些常用的擴展點即可,如視圖的擴展點org.eclipse.ui.views、編輯器的擴展點org.eclipse.ui.editors等,本書將陸續給于介紹。另外,各種擴展點在Eclipse的幫助中有詳細的說明,其位置為:選擇主菜單“幫助→幫助內容”,然后打開“平臺插件開發指南→參考→擴展點參考”項。

          5、運行插件

          按上一節(5.2.1節)所說的方法運行插件(運行之前不妨將上節所建的myplugin項目關閉掉,關閉方法:右鍵單擊myplugin項目名,然后在彈出菜單中選擇“關閉項目”)。myplugin2插件的效果如圖5.8所示

          5.8  myplugin2插件運行效果圖

          posted on 2005-02-15 11:12 閱讀(318) 評論(0)  編輯  收藏 所屬分類: Edit Tools

          主站蜘蛛池模板: 屯门区| 新蔡县| 枝江市| 扬州市| 定远县| 全椒县| 新巴尔虎右旗| 浏阳市| 沂源县| 罗平县| 和硕县| 澳门| 翁源县| 武乡县| 沙田区| 镇康县| 淳化县| 丰原市| 扶绥县| 大姚县| 马鞍山市| 河曲县| 汉中市| 彭泽县| 新营市| 化隆| 札达县| 龙口市| 漳平市| 唐山市| 九龙坡区| 临汾市| 肇庆市| 海口市| 定兴县| 黎川县| 竹溪县| 应用必备| 榆中县| 西贡区| 灵丘县|