1. 程式人生 > >Eclipse外掛引入jar包的方法

Eclipse外掛引入jar包的方法

搞了兩天,終於找到解決辦法了。原來  Eclipse 外掛專案引入外面的jar包不能用   build path---->add external jars的方法。

先說明兩個概念:類載入器,OSGI

類載入器(class loader),顧名思義就是JVM用於載入類的一個工具。當然,它本身也是一個java類,見java.lang.ClassLoader。它維護內部的類名空間,相互關係(域),併為它們隔絕外部侵害。

OSGI,Open Service Gateway Initiative,則是一個開放的架構,主要特性包括熱插拔,bundle獨立等。現版本的eclipse就是基於這個架構實現的,而eclipse實現OSGI主要途徑,就是通過為每個bundle分配一個獨立的classloader,然後使用MANIFEST.MF檔案的配置,來維護這些bundle之間的關係。

比如一行程式碼:

Platform.getBundle(BUNDLE_ID)

這就是獲得BUNDLE_ID的classloader的途徑,通過它來呼叫bundle(外掛)裡面的類的方式和反射呼叫的方式一致。

正題:

如何在一個外掛裡引用jar包?有一些新學eclipse外掛開發的朋友,往往會把需要用到的jar包新增到專案的執行環境裡面,這種做法雖然在eclipse編輯器編輯的時候不會出現問題,但一旦執行程式,就難免出現無法初始化類,或者找不到類的情況。

這就是因為,各bundle間的classloader是獨立的,在專案執行時新增的jar包,並沒有載入到本bundle的classloader中來,當然就會出現這種錯誤了。

兩種方案解決這個問題(本文使用的是eclipse 3.7):

1、如果一個jar包的使用範圍僅在本外掛內部,那麼可以在MANIFEST.MF中選擇runtime籤頁,找到classpath區域,如圖:

點選“Add”按鈕,彈出如下對話方塊:

在這裡選擇你要新增的jar包即可。

注意!add嚮導裡顯示的檔案、資料夾只有本外掛下的內容,所以,你需要建立一個“lib”資料夾,把需要的jar放置在其下(資料夾命名為lib是約定俗成的做法,如非必要,勿標新立異)。

2、如果一個jar包需要被多個外掛引用,方案1就顯得麻煩了。可以採用jar包外掛化的方法來實現公用的jar引用。

快捷鍵ctrl+N建立新"others",選擇

接下來按提示操作即可,這樣就生成了一個jar包外掛。在你需要的位置依賴它即可。

-------------------------

3、雖然只列了兩點,但其實還是有方式三的。即是結合上兩點,首先在classpath中引用jar包,然後在export package中開放這些jar包。然後在需要的外掛裡依賴前外掛,即可。這樣配置相對靈活一點。