如何找到导出包的包?找到导出包的OSGI包?
我使用felix,我有一个像“com.test”这样的字符串,我怎么知道哪个包导出了这个包?
我不想使用PackageAdmin,因为它已被弃用,而且我不想为每个包获取Export-Package标题并解析它。
任何想法?
如何找到导出包的包?找到导出包的OSGI包?
我使用felix,我有一个像“com.test”这样的字符串,我怎么知道哪个包导出了这个包?
我不想使用PackageAdmin,因为它已被弃用,而且我不想为每个包获取Export-Package标题并解析它。
任何想法?
这听起来像你想以编程方式做到这一点,而不是在Gogo shell ...至少我会从你的问题的措辞假设。
没有真正的方法来说“哪个包”导出给定的包,因为可以有许多包导出任何给定的包,并且该包可以被许多包中的许多包使用。如果您有特定的软件包,并且想知道哪个软件包提供了软件包com.test
,则可以获取导入软件包的接线Bundle.adapt(BundleWiring.class)
,然后使用BundleWiring.getRequiredWires()
获取所有软件包相关性的提供程序。
从那里,你只需要找到osgi.wiring.package
命名空间你想要的包线,则该线的供应商将是你有兴趣在该包的BundleRevision
的BundleCapability
。
的最新版本Apache Felix OSGi控制台包含一个“依赖查找程序”插件,其中列出了导出给定程序包或类的程序包。有一些截图在http://www.6dlabs.com/blog/dklco/2012-05-04/new-cq-55-dependency-finder(其中提到CQ5但插件不依赖于此)。
这是在管理水平提供了有用的,如果你需要找到出代码,你可以看看该插件的源代码,请参阅https://issues.apache.org/jira/browse/FELIX-3045
这基本上是我正在寻找的。这是一个耻辱,我必须通过所有捆绑,并检查这个。我希望在框架上有一个方法,这里有一个包,哪个包满足它?鉴于这是框架在幕后进行的工作,无论如何它必须解决依赖关系。但无论如何,谢谢你的答案。 – Boomah 2012-08-13 10:18:54