最近用OSGI+嵌入jetty做了一個IDE的后台管理,OSGI真是個好東西,即插即用。
現總結一下初學時候遇到的問題。
1、啟動WEB服務
需要加載6個插件(org.eclipse.osgi是默認一定要加載的插件,不計入其中):
javax.servlet
org.apache.commons.logging
org.eclipse.equinox.http
org.eclipse.equinox.http.servlet
org.eclipse.osgi.services
org.mortbay.jetty
2、導出\配置\啟動OSGI遇到的問題:
如何導出OSGI?
首先是打包,可以自己手動來,找到OSGI需要的全部插件,然后打包,也可以選擇maven2等插件來幫助打包並解決依賴性問題,目前為了保持干凈的工作空間,我沒有安裝任何其他的插件,但又有數百個插件是要打包的,這種情況下,推薦如下方式:
a、新建一個target difinition項目,該項目用來保存各種版本的壓縮文件
b、在該項目下新建一個.target文件,該target使用方式是一目了然的,Eclipse提供了target editor。

在這里選擇引用文件夾,target編輯器將會從這些位置搜索插件,注意,它並不真正的產生效果,僅僅只是為了后面查找插件依賴服務的,相當於添加索引。

在這個位置添加你要啟動的插件,依賴性通過右邊的“Add Required”自動完成。注意:該editor的功能並不完善,它只是原樣的導出你的選擇,所以如果是你自己寫的插件,請之后再手動export,不然只有src沒有bin,當然你可以通過配置build選項,給bin文件夾打鈎來解決(我的下步工作會是寫個新的構建器,使之能給自定義插件打jar包),然后,add required也會導入很多多余的插件,如ui包等。
然后選擇導出,即可。

如何配置OSGI?
你需要一個start.bat,內容參考插件configuration的argument
如
java -jar -Dorg.osgi.service.http.port=10000 equinox.jar -console 10000為指定的端口。 equinox.jar是啟動的jar包,equinox是eclipse基於OSGI框架的產品。該jar包可以在eclipse的plugins目錄找到。復制,放在根目錄下。創建一個configuration文件夾,里面有config.ini配置文件。內容如下: #This configuration file was written by: #org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser
#Thu Dec 22 15:48:36 CST 2011
#org.eclipse.update.reconcile=false
#osgi.instance.area.default=@user.home/workspace
#osgi.framework=plugins/org.eclipse.osgi_3.7.0.v20110613.jar
#equinox.use.ds=true
osgi.noShutdown=true
eclipse.ignoreApp=true
#org.osgi.framework.bootdelegation=*
osgi.bundles=reference\:file\:plugins/javax.servlet_2.5.0.v201103041518.jar@\:start,\
reference\:file\:plugins/org.apache.commons.logging_1.0.4.v201101211617.jar@\:start,\
reference\:file\:plugins/org.eclipse.equinox.http.jetty_2.0.100.v20110502.jar@\:start,\
reference\:file\:plugins/org.eclipse.equinox.http.servlet_1.1.200.v20110502.jar@\:start,\
reference\:file\:plugins/org.mortbay.jetty.util_6.1.23.v201012071420.jar@\:start,\
reference\:file\:plugins/org.mortbay.jetty.server_6.1.23.v201012071420.jar@\:start,\
reference\:file\:plugins/org.eclipse.osgi.services_3.3.0.v20110513.jar@\:start
osgi.bundles.defaultStartLevel=4嗯,以上屬性……參考字面意思。注意插件的加載級別即可。 如何啟動OSGI?雙擊start.bat……
遇到的ClassNotFoundException問題
有可能是因為config.ini中的org.osgi.framework.bootdelegation沒有配置好
org.osgi.framework.bootdelegation=* 即可
當然也可以指定package,用逗號隔開,可以使用通配符
