2010年1月20日 星期三

Use service with Eclipse in OSGi

現在最常開發OSGi的環境是Eclipse,很多廠商都對OSGi推出pluging套件供整合開發。不同的廠商有提供特殊功能的services,但是都不是屬於標準之內。

要使用這些service不外乎要在bundle內部的manifest寫入import-package動作。但是在IDE眼中,這些import-package雖然寫了,但是我要compile時仍然沒有這些jar可供參考呀!所以會可能發生無法編譯的情形。

我原本是使用Eclipse EE進行開發,但是遇到這種情形,Export出來的bundle都是不合格式,只要一引用外部service就會發生。下圖就是一個非法格式bundle。不應該有.setting、bin和src目錄存在。
image

然後我就浪費了許多時間在Eclipse EE身上。後來改用Eclipse 3.4.1版本,然後再搭配一些方法,就可以順利做出可用的bundle了。

在進行之前,請先確定至少有想要引用service的bundle。這裡以prosyst的putil為範例。

首先就是先下載3.4.1版本的Eclipse,不需要做任何多餘套件的安裝。先建立一個新專案。進入該專案的Manifest,在MANIFEST.MF內填入你要import的package,通常就是你的service interface類別。要得到切確路徑,除了可以看API,還可以從該framework內以指令查到。
image

接著為了要讓IDE知道該import的package哪裡可以找到,因此要為他加入eclipse所屬的framework中。之前在EE環境中測試過若把bundle放進去eclipse的/plugin目錄中,那麼不會被eclipse讀到,也許要某種產生的plugin才可以。所以要手動建立。

在左邊package視窗,在專案上按右鍵選Import。
image

選擇Plug-ins and Fragments。接著下一步選擇你的.jar bundle,便可以加入了。
image

你可以看到左邊package視窗多了一個專案。
image

接著設定你自己專案的lib,這樣一來compiler可以得知目前import的class的狀態,如語法偵錯等等。在你專案上按下右鍵選properties。在Labraries頁面上加入你的bundle。
image

剩餘就是你coding的工作了,使用方法就像網路上隨處可以找到的說明。

這樣一來你就可以正確的Export你的bundle了。要注意的是,上述動作在Eclipse EE環境下皆會失敗。

沒有留言: