是否可以在Eclipse插件中使用Felix Dependency Manager?

时间:2013-06-07 22:37:44

标签: eclipse-plugin osgi apache-felix

我编写了一个使用Apache Felix Dependency management的捆绑包。它是Activator扩展 DependencyActivatorBase。但插件我的插件激活器扩展AbstractUIPlugin。如何从eclipse插件中获取felix依赖管理器的服务?

DependencyManager有一个getDepenencyManagers方法,但它是一个列表,不知道如何知道列表中的正确经理。

2 个答案:

答案 0 :(得分:2)

是的,您可以在任何OSGi框架中使用Dependency Manager,包括Equinox(Eclipse所基于的)。

为什么您的捆绑激活器需要来扩展AbstractUIPlugin?您实际上是在使用AbstractUIPlugin,还是刚为您生成的,因为您使用Eclipse PDE生成初始代码? PDE中的项目模板基本上是垃圾,大多数捆绑包根本不需要激活器,而且极少数真正需要扩展AbstractUIPlugin

因此,只需将您的激活器更改为DependencyActivatorBase而不是AbstractUIPlugin

答案 1 :(得分:2)

DependencyActivatorBase类只是一个基类,为方便起见。如果出于某种原因,你不能使用它(比如说,在你的情况下),你总是可以自己从你自己的类中实例化DependencyManager的实例。它需要的只是对BundleContext的引用(你可以从BundleActivator的start()方法获得它,假设你自己实现了)。然后做这样的事情:

DependencyManager dm = new DependencyManager(bundleContext);
dm.add(dm.createComponent()
  .setImplementation(YourComponent.class)
  .add(dm.createServiceDependency()
    .setService(LogService.class)
  )
);