我希望能够轻松启动OSGi框架(最好是Equinox)并从java main加载pom中列出的所有 bundle 软件。
这可能吗?如果是这样,怎么办?
似乎pax工具可以做到这一点,但是我似乎找不到任何表明这种情况的文档。我知道我可以像这样启动Equinox:
BundleContext context = EclipseStarter.startup( ( new String[] { "-console" } ), null );
但是我想做更多的事情-就像我说的那样:加载更多的包,也许启动一些服务,等等。
最佳答案
可以使用FrameworkFactory
API以编程方式启动任何OSGi框架(R4.1或更高版本):
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);
重申一下,仅通过将JAR框架放在类路径上,此方法就可以将的任何OSGi框架(包括Equinox和Felix)用于。