安装个Eclipse插件

EclipsePlugin

功能:将某个目录下的jar包,添加到buildpath

打包一个Bundle

这只是演示第三方jar包依赖的打包问题,Bundle之间的依赖,通过Import, Export来进行。

创建一个项目:

File -> New -> Project -> Plug-in Project,然后输入bundle名,target platform选择 an OSGi framework, standard. -> Next -> 最后一个Next,不要勾选模板即可

然后在项目的根目录,创建一个 lib 目录,将所依赖的jar,都放到这里(其实最好就做成bundle,运行成服务最好),然后右键项目 -> Properties -> Java Build Dath -> Libraries -> Add library -> Directory Container -> 选择刚创建的那个lib目录即可,这时该目录下的所有jar包,都放到build path里了。

Activator内容为:

package example;

import org.apache.commons.lang.StringUtils;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

	private static BundleContext context;

	static BundleContext getContext() {
		return context;
	}

	public void start(BundleContext bundleContext) throws Exception {
		Activator.context = bundleContext;
		System.out.println("Hello World.");
		System.out.println(StringUtils.upperCase("Hello OSGi"));
	}

	public void stop(BundleContext bundleContext) throws Exception {
		Activator.context = null;
	}

}

** 注意 **

检查下右键项目 -> Properties -> Java Build Dath,看看source有没有其他的jar包文件,有的话,就删除掉,只保留源码目录。

这时,只是对eclipse编译通过了而已,还是还要在Bundle的描述文件里,配置Bundle-Classpath

打开META-INF目录下的MANIFEST.MF文件,打开Runtime这个tab,然后在右边的classpath里,点击Add来添加所依赖的第三方jar包(注意,不能直接选择lib目录,而是要定位到具体的jar文件)

这样子,环境方面就做好了。接下来,就是导出这个Bundle。

右键项目 -> Export -> Plug-in Development -> Deployable plug-ins and fragments -> 勾选项目,以及选择导出到某个目录即可。

这样子就OK了。

运行

直接放到 apache felix 安装目录的bundle目录,然后直接运行以下命令即可。

➜  felix-framework-5.2.0  java -jar bin/felix.jar
Hello World.
HELLO OSGI
____________________________
Welcome to Apache Felix Gogo

g!