在这篇文章中,我将大概讲述一下如何在Eclipse里面安装和配置OSGi开发环境,并且如何以OSGi Bundle的形式开发史上最牛的应用程序 "Hello World"。读者读完这篇文章,可以扬帆远行,开始自己的OSGi之旅了。
所需软件
==================================================================================
Eclipse:3.3.1
Felix binary:http://labs.xiaonei.com/apache-mirror/felix/felix-framework-2.0.1.zip
Felix 源代码:http://download.youkuaiyun.com/source/1958471
BND 编辑器:http://www.aqute.biz/repo/biz/aQute/bnd/0.0.384/bnd-0.0.384.jar
注释:1)BND编辑器是一个很轻的工具,能够帮助我们从.bnd文件自动在Eclipse中生成Bundle的jar文件
2)Felix的源代码分散在不同的子项目中,我在这里整理好,供大家下载。
Eclipse 环境设置
==================================================================================
1 解压缩Eclipse到本地磁盘
2 将bnd-0.0.384.jar放在Eclipse的plugins目录。
3 导入Felix源代码项目:在Eclipse中,点击" File -> Import -> General -> Existing Projects into Workspace", 选中Flex源代码的zip文件,最后在Eclipse里面可以看到一个项目felix-src .
4 解压缩Felix binary的zip文件到本地磁盘, 假定路径为Felix_Home (不需要设置环境变量)
5 创建并且配置OSGi开发项目
5.1) 创建一个Java项目,名字为"OSGi ".
5.2) 配置OSGi项目的Java Build Path属性,在里面创建一个新的User Library 名称为"Felix", 将$Felix_Home/bin/felix.jar加入到该User Library中,并且指定Source Attachement为felix-src/src目录。
5.3) 将$Felix_Home/bundle和$Felix_Home/conf两个目录导入到项目OSGi的根目录下面。
5.4) 配置Run选项:点击"Run -> Open Run Dialog... " 右击 Java Application, 创建一个新的Run选项,设置选项name为Felix, Project为OSGi,Main Class为org.apache.felix.main.Main。
经过上述配置过程,在Eclipse Package Explorer里面,OSGi的目录结构看起来是下面这个样子:
OSGi /
src
JRE System Library (library)
Felix (library)
bundle /
org.apache.felix.bundlerepository-1.4.2.jar
org.apache.felix.shell.tui-1.4.1.jar
org.apache.felix.shell-1.4.1.jar
conf /config.properties
验证Eclipse 环境的Felix设置
==================================================================================
1 点击"Run -> Felix", 这是应该在Console这个View中看到下面的信息,证明你已经打开了与Flex交互的Shell会话。
Welcome to Felix
================
->
2 输入 ps 命令, 你应该看到下面信息:
Welcome to Felix
================
-> ps
START LEVEL 1
ID State Level Name
[ 0] [Active ] [ 0] System Bundle (2.0.1)
[ 1] [Active ] [ 1] Apache Felix Bundle Repository (1.4.2)
[ 2] [Active ] [ 1] Apache Felix Shell Service (1.4.1)
[ 3] [Active ] [ 1] Apache Felix Shell TUI (1.4.1)
我们可以看到目前有4个Bundle在运行。System Bundle是Felix框架自己,Apache Felix Bundle Repository提供了一个接口,使得我们可以下载其它Bundle,另外两个Bundle是运行我们正在使用的Shell的Bundle。
创建第一个OSGi Bundle
==================================================================================
1 在src下创建下面的Java类
package org.osgi.helloworld;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class HelloWorldActivator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out .println("Hello World!" );
}
public void stop(BundleContext context) throws Exception {
System.out .println("Goodbye World" );
}
}
2 在src下创建文件helloworld.bnd
Private-Package : org.osgi.helloworld
Bundle-Activator : org.osgi.helloworld.HelloWorldActivator
3 右击helloworld.bnd文件,在弹出菜单中点击Make Bundle, 这时可以看到在src目录下生成了一个helloworld.jar
4 在Console中输入 install file:src/helloworld.jar
5 在Console中输入 ps,这时可以看到下面信息,我们可以看到helloworld这个Bundle被安装,ID是8
START LEVEL 1
ID State Level Name
[ 0] [Active ] [ 0] System Bundle (2.0.1)
[ 1] [Active ] [ 1] Apache Felix Bundle Repository (1.4.2)
[ 2] [Active ] [ 1] Apache Felix Shell Service (1.4.1)
[ 3] [Active ] [ 1] Apache Felix Shell TUI (1.4.1)
[ 8] [Installed ] [ 1] helloworld (0)
6 分别输入命令start 8 和 stop 8,可以在Console里看到下面的信息
-> start 8
Hello World!
-> stop 8
Goodbye World
->
恭喜,我们已经配置好环境,并且开发了第一个OSGi的Bundle,希望大家继续关注我后面的文章系列,继续一起学习~~