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包。然后在需要的插件里依賴前插件,即可。這樣配置相對靈活一點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM