1. 程式人生 > >如何在Eclipse RCP中使用第三方包(圖)

如何在Eclipse RCP中使用第三方包(圖)

這兩天一直被在Eclipse外掛專案中匯入第三方包的問題所困擾啊,我在專案中使用了dom4j的第三方包,可是在外掛執行是一直報“noClassDefFound”的錯誤,在網上找了些文件解決的方式也不明瞭,這篇文章圖文並茂,適合我這個初學者,所以轉過來了。

另外,好像這種方法在往其他人的機器上釋出時還得從新配路徑(看到有人提出這個問題,自己還沒實驗:P)。還有人提出可以把匯入的第三方包做成外掛,直接在depends裡面新增外掛引用即可。(這個方法我試了,但是有不少錯誤,還得在試試,也歡迎有成功者介紹經驗啊!)

我們拿一個簡單的示例來說明,這個示例使用的是eclipse rcp的template中最簡單的一個,也就是大家都見過的Hello,RCP。我用的eclipse版本是3.2M2。
  
  為了便於說明,我自己寫了一個java檔案然後打包成jar,再在rcp程式中呼叫它。這個程式是這樣的:
  
  Code:
  package demo;
  
  public class Hello {
  public static String sayHello()

 
  {
  return "hello,world";
  }
  }
  [Ctrl+A Select All]
  
  就這麼簡單,打包後做成一個hello.jar。具體過程略去不談。
  
  然後我們新建一個rcp application,具體過程也略去不談。這裡需要提醒大家的是rcp工程的名字最好用小寫英文,用大寫的話可能會出一些問題,至少在我用的這個版本是這樣。
  
  建好以後在下面新建一個lib目錄作為存放第三方庫的目錄。再把前面做好的hello.jar拷貝過去。參見下圖。
我們拿一個簡單的示例來說明,這個示例使用的是eclipse rcp的template中最簡單的一個,也就是大家都見過的Hello,RCP。我用的eclipse版本是3.2M2。
  
  為了便於說明,我自己寫了一個java檔案然後打包成jar,再在rcp程式中呼叫它。這個程式是這樣的:
  
  Code:
  package demo;
  
  public class Hello {
  public static String sayHello()
  {
  return "hello,world";
  }
  }
  [Ctrl+A Select All]
  
  就這麼簡單,打包後做成一個hello.jar。具體過程略去不談。
  
  然後我們新建一個rcp application,具體過程也略去不談。這裡需要提醒大家的是rcp工程的名字最好用小寫英文,用大寫的話可能會出一些問題,至少在我用的這個版本是這樣。
  
  建好以後在下面新建一個lib目錄作為存放第三方庫的目錄。再把前面做好的hello.jar拷貝過去。參見下圖。
我們拿一個簡單的示例來說明,這個示例使用的是eclipse rcp的template中最簡單的一個,也就是大家都見過的Hello,RCP。我用的eclipse版本是3.2M2。
  
  為了便於說明,我自己寫了一個java檔案然後打包成jar,再在rcp程式中呼叫它。這個程式是這樣的:
  
  Code:
  package demo;
  
  public class Hello {
  public static String sayHello()
  {
  return "hello,world";
  }
  }
  [Ctrl+A Select All]
  
  就這麼簡單,打包後做成一個hello.jar。具體過程略去不談。
  
  然後我們新建一個rcp application,具體過程也略去不談。這裡需要提醒大家的是rcp工程的名字最好用小寫英文,用大寫的話可能會出一些問題,至少在我用的這個版本是這樣。
  
  建好以後在下面新建一個lib目錄作為存放第三方庫的目錄。再把前面做好的hello.jar拷貝過去。參見下圖。

圖一

在RCP工程中,你可以有兩種辦法把jar加入到class path中,你可以任選一種:
  
  1、和普通的工程一樣,加入到build path裡面,參見下面圖二。



 圖二

2、開啟plugin的Build頁面,注意到最下面有個“Extra Classpath Entries”了麼?展開以後選Add Jars把需要
     的jar加進去,有同樣的效果,參見圖3

圖三

我在這裡說“任選一種”的意思是不要兩種辦法同時用,否則工程會報錯。

      在上面的工作都做完之後,仍然在plugin的Build頁面上,左邊的Binary Build下面把你程式的輸出目錄(我的工程裡面是bin)和你的jar所在的目錄(我的工程裡面是lib)打勾,這樣輸出時候會包含你編譯後的檔案以及第三方庫。仍然參照第三張圖
  
  然後切換到plugin的Runtime頁面,在右下角的Classpath裡面把你程式的輸出目錄(我的程式裡面是bin)和你所有要包含的jar檔案(我的程式裡面是lib/hello.jar)都加進去。參照圖4,這樣就基本上完成了。
 

圖四

之後所要做的事情就是修改程式了,我在這裡只是簡單地把程式的標題做了修改,找到ApplicationWorkbenchWindowAdvisor這個類,把preWindowOpen修改成下面這樣:
  
  Code:
  
  public void preWindowOpen() {
  IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
  configurer.setInitialSize(new Point(400, 300));
  configurer.setShowCoolBar(false);
  configurer.setShowStatusLine(false);
  configurer.setTitle(Hello.sayHello());
  }
  [Ctrl+A Select All]
  
  這個示例就完成了,之後產生product檔案後export出來就可以看到結果了。過程也略去不談。
  
  執行以後會發現標題欄從“Hello,RCP”變成了“hello,world”,參見第圖五。

圖五

RCP實踐之第三方JAR包 寫道 感謝大家對上一篇文章的拍磚,引起的反響不小,目的達到了~,希望可以繼續板兒磚橫飛!

     今天來說說第三方JAR包的引入。RCP開發(或者plugin開發)中最讓人頭疼就是第三方JAR包的引入了,很多初學的朋友常常頭疼,介紹的文章也不少了,如果搞不定,自己google一下就可以了。

    為什麼第三方JAR包會引發如此眾多的問題,其實並不是Eclipse的錯,而是先入為主的錯。如果你一開始就就接觸Eclipse開發,以後再做不同java開發,你就會覺得java的類載入機制是變態了~Eclipse的類載入機制是基於OGSI的實現,它完成了外掛的獨立載入和獨立維護,正是因為這種變態的類載入機制,才有了我們頭大的第三方jar包的問題,也正是這種偉大的類載入機制,才有了即插即用的思路的誕生。

     大多數簡單的RCP專案都是將所有的JAR包放入本地專案中,然後直接進引入專案路徑,就開始整了,對於小的應用,或者開發人員少的情況下,這樣是可行的,也是便捷的~但是RCP的目標是大型的企業級應用,一個系統由十幾個,幾十個外掛組成,是很正常的。所以就要求我們將RCP中所有用到的第三方JAR包統一管理,統一維護,給開發人員少一些煩惱。

思路有兩種:

    1.將JAR檔案plugin樣子包裝,及新建Plug-in from existing jar archives 專案,然後選擇JAR檔案,再取消Unzip the jar archives into the project 選項,然後其它的外掛依賴它就可以了。

     2.新建一個不同外掛專案,然後把第三方JAR包放入這個專案,然後引入到此專案中,在plugin.xml的runtime配置頁的Exported Packages 選Add... 再選擇要釋出出去的包路徑,然後其他的外掛依賴它就可以了。

     官方推薦的方式是第一種,個人認為第一種確實很好,可以非常好而且方便的維護第三方JAR包。但是我還是選擇了第二種方式,理由是,配置檔案讀取的問題。

    每一個外掛檔案都會維護一份屬於自己的配置檔案,只有這樣才能做到自我獨立。但是這兩種方式都不能使其他外掛專案的配置檔案獨立維護,原因就是Eclipse那討厭又強大的類載入機制。

    使用第一種方式,配置檔案必須放在你記載的進來的JAR包的裡面,這樣Eclipse類載入機才會載入並處理,除非選擇了Unzip the jar archives into the project 選項,並把配置檔案和一堆的class檔案放在同一目錄下類載入機才能發現。我想這種方式誰都不會喜歡,要麼就是我們要創造自己的JAR包,要麼工作臺遍佈了各種各樣來自世界各地的class檔案。

    使用第二種方式,是通過執行時將需要釋出出來供別人依賴的package釋出出來,而配置檔案則需要放在此外掛專案中。相對而言,這種比上一種有很大的好處,而且也不是那麼難維護。

    以上只是自己專案中的一些總結,關於第三方JAR包的問題,我查了很多資料,好像逃不過這三種方式(直接在專案中依賴算一種),不知道各位大俠還有沒有更好的辦法,即能處理好第三方JAR包,又能保持各個外掛維護自己獨立的配置檔案?

轉載自http://www.blogjava.net/leeguannan/archive/2007/06/20/125423.html