OSGI开发的一点心得

最近用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,用逗号隔开,可以使用通配符

原文地址:https://www.cnblogs.com/anrainie/p/2383939.html