任何 OSGi 框架(R4.1 或更高版本)都可以使用FrameworkFactory
API 以编程方式启动:
ServiceLoader<FrameworkFactory> ffs = ServiceLoader.load(FrameworkFactory.class);
FrameworkFactory ff = ffs.iterator().next();
Map<String,Object> config = new HashMap<String,Object>();
// add some params to config ...
Framework fwk = ff.newFramework(config);
fwk.start();
OSGi 框架现在正在运行。由于Framework
扩展Bundle
,您可以调用getBundleContext
和调用所有普通 API 方法来操作包、注册服务等。例如
BundleContext bc = fwk.getBundleContext();
bc.installBundle("file:/path/to/bundle.jar");
bc.registerService(MyService.class.getName(), new MyServiceImpl(), null);
// ...
最后,您应该等待框架关闭:
fwk.stop();
fwk.waitForStop(0);
重申一下,这种方法适用于任何OSGi 框架,包括 Equinox 和 Felix,只需将框架 JAR 放在类路径中即可。