1、从Eclipse安装程序中找到org.eclipse.osgi_3.3.0.v20070530.jar文件(版本字符串取决于你的Eclipse)并将它复制到一个空目录。为了保持命令的简短, 我们重命名该文件为equinox.jar。
2、在DOS命令窗口中定位到equinox.jar文件所在目录下,并执行以下命令:
java -jar equinox.jar -console
如果屏幕出现 osgi> 提示符,则说明OSGi已经成功运行了。
可以输入ss命令,查看已经安装的Bundle列表和它们当前的状态信息:
这表示有一个Bundle已被安装和激活,并且它是系统Bundle。这是一个在OSGi中总是存在的特殊Bundle,它表示框架本身。
3、创建自己的Bundle
在同一目录下创建一个名为HelloActivator.java的类文件,该类必须实现BundleActivator接口,源码如下:
import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class HelloActivator implements BundleActivator { public void start(BundleContext context) throws Exception { System.out.println("start hello bundle!"); } public void stop(BundleContext context) throws Exception { System.out.println("stop hello bundle!"); } }
4、创建Bundle的描述文件
一个Bundle需要一个MANIFEST文件来声明各种关于Bundle的描述数据,例如它的名称,版本等等。这里创建一个名为Hello.MF的文件,内容如下:
Manifest-Version: 1.0 Bundle-Name: Hello Bundle-Activator: HelloActivator Bundle-SymbolicName: Hello Bundle-Version: 1.0.0 Import-Package: org.osgi.framework
注意:文件必须以一个空行结尾,否则,jar命令行工具会截去文件最后一行内容。
导入包:Import-Package: com.cjm.bundle.user.service;version="[1.0.0,2.0.0)", org.osgi.framework;version="1.3.0"
导出包:Export-Package: com.cjm.bundle.user.manager;version="1.0.1", com.cjm.bundle.user.service;version="1.0.0"
方括号意味着包括,圆括号意味着排除。
如果缺少 Import-Package: org.osgi.framework 描述,则会抛出类似以下的异常信息:
org.osgi.framework.BundleException: The activator HelloActivator for bundle Hello is invalid at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:141) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:970) ...... Caused by: java.lang.NoClassDefFoundError: org/osgi/framework/BundleActivator at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
5、编译打包Bundle
在新的DOS命令窗口中定位到equinox.jar文件所在目录下,并按顺序执行以下两个命令:
javac -classpath equinox.jar HelloActivator.java
jar -cfm Hello.jar Hello.mf HelloActivator.class
将会在当前目录下生成一个名为Hello.jar的文件
6、安装Bundle
在OSGi控制台中执行以下命令: install file:Hello.jar ,控制台输出Bundle id is 1。重新执行ss命令可以看到Bundle已被成功安装。
7、启动Bundle
在OSGi控制台中执行以下命令: start 1 ,其中1是Bundle的id
8、停止Bundle
在OSGi控制台中执行以下命令: stop 1 ,其中1是Bundle的id
9、卸载Bundle
在OSGi控制台中执行以下命令: uninstall 1 ,其中1是Bundle的id