搭建非Eclipse下构建OSGI运行环境

由于工作需要,学习了OSGI。之前在Eclipse上搭建过OSGI模块化开发平台,但是这种启动plug-in项目的方法最终交付用户的时候不能让用户通过Eclipse来启动项目,所以我们要搭建一个非Eclipse下构建OSGI运行环境。

 

首先我写这篇文章的时间是2016年3月3日,我使用的编译器是Spring Tool Suite(和Eclipse几乎一模一样,只是添加了一些支持Spring的插件),我的JDK版本是1.7,OSGI的jar版本是org.eclipse.osgi_3.10.1.v20140909-1633.jar(也就是2014年9月的版本)。

 

在发布工程之前,我们要把我们工程需要的所有bundle全部打包成jar包。具体操作就是鼠标右键点击工程,选择Export,之后选择:Deployable plug-ins and fragments:

 

【OSGI】非Eclipse下构建OSGI运行环境_bundle

接下来选择需要导出的bundle项目和最终导出的目录:

 

【OSGI】非Eclipse下构建OSGI运行环境_osgi_02

然后我们点击”Finish”完成操作。

 

然后我们就会看到我们的工程在D盘的osgi_demo下被导出来了(默认导出到系统自创plugins文件夹下):

 

【OSGI】非Eclipse下构建OSGI运行环境_bundle_03

 

之后我们在D盘创建一个名为“osgi_platform”的文件夹,用于创建OSGI运行环境。

 

我们的以上准备工作做好之后,我们开始创建OSGI运行环境。首先我们从我们eclipse软件所在的根目录中找到plugins文件夹:

 

【OSGI】非Eclipse下构建OSGI运行环境_osgi_04

然后在该文件夹下找到“org.eclipse.osgi_XXX.jar”的jar包:

 

【OSGI】非Eclipse下构建OSGI运行环境_bundle_05

(我的版本是org.eclipse.osgi_3.10.1.v20140909-1633.jar,你们按照自己的版本拷贝。)

 

我们把这个jar包拷贝到我们之前创建好的文件夹“osgi_platform”下,更名为“equinox.jar”,然后新建一个记事本,在其中写下如下启动信息:

java -Dosgi.noShutdown=true -Dorg.osgi.service.http.port=8010 -jar equinox.jar -console

(上面是osgi的启动信息,一般默认是80端口,我的冲突了,所以改为8010端口)

然后将记事本更名为“run.bat”(格式由txt改为bat),这时候就变成了一个启动文件了。

目前文件夹是这个情况:

 

【OSGI】非Eclipse下构建OSGI运行环境_jetty_06

 

然后我们在文件夹“osgi_platform”下继续添加两个文件夹,分别是“configuration”和“bundles”。

 

【OSGI】非Eclipse下构建OSGI运行环境_osgi_07

因为我开发的是基于Servlet的Web项目,我要引入除了osgi本身之外的web所需要的插件包,所以我们在bundle下放置如下jar包(其中没有画红框的是我自己开发的工程bundle,大家按照自己的需要放置,剩下的都是Http项目运行系统必须的jar包)

 

【OSGI】非Eclipse下构建OSGI运行环境_osgi_08

 

以上jar包都可以在我们eclipse软件所在的根目录plugins文件夹中找到,如果您没有,那就在http://cn.jarfire.org/search?q=万能jar包搜索引擎中寻找。

 

剩下的就是处理configuration文件夹了,我们在configuration下创建“config.ini”文件,然后在里面填写如下信息:

osgi.noShutdown=true
osgi.bundles=reference\:file\:bundles/javax.servlet_3.0.0.v201112011016.jar@start,reference\:file\:bundles/org.apache.commons.logging_1.0.4.v201101211617.jar@start,reference\:file\:bundles/org.eclipse.osgi.services_3.4.0.v20140312-2051.jar@start,reference\:file\:bundles/org.eclipse.jetty.continuation_8.1.14.v20131031.jar@start,reference\:file\:bundles/org.eclipse.jetty.http_8.1.14.v20131031.jar@start,reference\:file\:bundles/org.eclipse.jetty.io_8.1.14.v20131031.jar@start,reference\:file\:bundles/org.eclipse.jetty.security_8.1.14.v20131031.jar@start,reference\:file\:bundles/org.eclipse.jetty.server_8.1.14.v20131031.jar@start,reference\:file\:bundles/org.eclipse.jetty.servlet_8.1.14.v20131031.jar@start,reference\:file\:bundles/org.eclipse.jetty.util_8.1.14.v20131031.jar@start,reference\:file\:bundles/org.eclipse.equinox.http.servlet_1.1.500.v20140318-1755.jar@start,reference\:file\:bundles/org.eclipse.equinox.http.jetty_3.0.200.v20131021-1843.jar@start,reference\:file\:bundles/org.apache.felix.gogo.runtime_0.10.0.v201209301036.jar@start,reference\:file\:bundles/org.apache.felix.gogo.shell_0.10.0.v201212101605.jar@start,reference\:file\:bundles/DictQueryWeb_1.0.0.jar@start,reference\:file\:bundles/LocalDictQuery_1.0.0.201603021501.jar@start,reference\:file\:bundles/RemoteDictQuery_1.0.0.201603021501.jar@start,reference\:file\:bundles/DictQuery_1.0.0.201603021503.jar@start,reference\:file\:bundles/org.eclipse.equinox.console_1.1.0.v20140131-1639.jar@start
osgi.bundles.defaultStartLevel=4

(里面配置的都是我们bundle文件夹中的jar包,为的是一次性Install所有的jar包,而不需要我们一个一个在CMD控制台黑屏里一个一个安装jar包)。

 

然后我们回到最初run.bat所在的目录,双击run.bat,如果出现”osgi>”信息,说明运行环境配置成功:

 

【OSGI】非Eclipse下构建OSGI运行环境_jetty_09

 

(后面的提示汉字是我自己的Web工程中的,纯净环境下是没有的)

然后我们输入”ss”指令,可以看到我们被激活的所有bundle:

【OSGI】非Eclipse下构建OSGI运行环境_jetty_10

 

然后我们就可以访问我们自己的应用了。

我的是基于Servlet的web小例子,是网上找的模拟电子词典的Web系统,我们保持run.bat的开启状态,打开浏览器,就可以访问我们发布在osgi上的应用了:

【OSGI】非Eclipse下构建OSGI运行环境_equinox_11

至此,我们的搭建非Eclipse下构建OSGI运行环境结束。