上篇文章介绍了如何在Eclipse中搭建Felix的运行环境,我们需要將Bundle发布到Felix框架的bundle目录下,Felix框架启动时才会自动加载这些Bundle,否则需要在Felix框架启动后手动安装Bundle,我们可以发现Bundle的管理非常麻烦,而且一旦Bundle启动报错,我们修改代码后,又需要重新发布Bundle进行调试,虽然我们可以使用自动化工具Ant或者Maven进行管理,但是一个项目中如果有几百个自定义的Bundle,这些Bundle管理起来就相当繁琐。
本文开始介绍如何在Eclipse中搭建Equinox的运行环境,由于Equinox是Eclipse组织对OSGI的实现,Eclipse中也集成了Equinox框架的管理工具,而Eclipse也是目前使用非常广泛的集成开发工具,所以使用Equinox开发实际的OSGI项目是非常方便的。
一、Eclipse中的Bundle管理工具
接下来我们就来了解一下Eclipse中内置的Bundle管理工具,首先单击Run=>Debug Configurations…菜单,打开如下界面:
在OSGI Framework条目下,右键=>New,如下图所示:
这里会显示Eclipse开发工具plugins目录下的所有Bundle,由于Eclipse中已经集成了Equinox框架,所以我们只需要勾选Equinox框架的几个核心的Bundle即可启动Equinox框架。下面是启动Equinox框架必须的几个Bundle:
勾选完成后,单击Debug即可完成Equinox框架的启动,接下来可以在控制台中输入ss命令查看所有运行的Bundle,如下:
osgi> ss
"Framework is launched."
id State Bundle
0 ACTIVE org.eclipse.osgi_3.10.0.v20140606-1445
1 ACTIVE org.apache.felix.gogo.shell_0.10.0.v201212101605
2 ACTIVE org.apache.felix.gogo.runtime_0.10.0.v201209301036
3 ACTIVE org.apache.felix.gogo.command_0.10.0.v201209301215
4 ACTIVE org.eclipse.equinox.console_1.1.0.v20140131-1639
osgi>
如果我们自己开发一个Bundle,该Bundle自动会在Bundle管理工具中显示,我们只需要勾选即可启动我们开发的Bundle,所以Bundle的开发与调试非常方便。
二、搭建Equinox运行环境
上节介绍了Eclipse中集成的Bundle管理工具,由于Eclipse中内置了Equinox框架,所有只需要勾选几个核心的Bundle即可运行Equinox框架,但是这种方式并不能用在项目中,因为不同的Eclipse版本,对应的Equinox框架版本不相同,项目中依赖的Bundle不能和具体的Eclipse版本有关,因为使用不同的Eclipse版本会引起很多未知的问题,而且Eclipse的plugins目录下的大多数Bundle是项目中用不到的,都会显示在Bundle管理工具列表中,所以我们需要自己下载Equinox框架的Release包,使用特定版本的Equinox框架搭建项目。
1、下载Equinox框架
首先我们需要下载Equinox框架Release发行包,读者可以从Eclipse官网下载,下载地址如下:
http://download.eclipse.org/equinox/
我们可以选择一个相对稳定的版本,例如笔者选择equinox-SDK-Luna版,下载后解压目录结构如下:
其中plugins目录下为Equinox框架所有的Bundle。
2、搭建Equinox运行环境
获取到Equinox框架的发行包后,接下来我们就开始搭建Equinox运行环境。
首先新建一个Java工程,名称为DynamicRuntime,接着新建一个core目录,將Equinox框架发行包plugins目录下的所有bundle拷贝到core目录下,如下图所示:
接着单击Window=>Preferences菜单,在弹出窗口中单击Plug-in Development=>Target Platform选项,如下图所示:
单击Add按钮,新建一个目标平台,如下图所示:
直接单击Next按钮,进入如下界面:
如上图所示,修改名称为DynamicRuntime,单击Add按钮,进入如下界面:
选择Directory条目,单击Next按钮,进入如下界面:
如上图所示输入Location为${workspace_loc}DynamicRuntimecore,单击Finish按钮,即可显示加载的Bundle,如下图:
单击Finish按钮,接下来选择我们新建的Target Platform,单击OK按钮即可完成操作。
3、启动Equinox框架
接下来我们就可以启动上面搭建的Equinox运行环境了,单击Run=>Debug Configurations…菜单,会发现Eclipse Bundle管理工具中会显示DynamicRuntime/core目录下的所有Bundle,如下图:
勾选如下几个核心的Bundle,单击Debug按钮即可启动Equinox框架。
框架启动后,输入ss命令即可查看所有启动的Bundle,如下:
osgi> ss
"Framework is launched."
id State Bundle
0 ACTIVE org.eclipse.osgi_3.10.0.v20140606-1445
5 ACTIVE org.apache.felix.gogo.command_0.10.0.v201209301215
6 ACTIVE org.apache.felix.gogo.runtime_0.10.0.v201209301036
7 ACTIVE org.apache.felix.gogo.shell_0.10.0.v201212101605
8 ACTIVE org.eclipse.equinox.console_1.1.0.v20140131-1639
osgi>
本篇文章就介绍这么多内容,下篇文章介绍如何开发一个自定义的Bundle,并使用Blueprint將Spring框架整合到OSGI中。