什么是纯OSGi,等效于以下Eclipse平台调用:
org.eclipse.core.runtime.Platform.getBundle([bundle-id])->捆绑
最佳答案
没有getBundle(String symbolicName)
的直接等效项,普通的OSGi没有这样的静态帮助器,因为VM中可能有多个框架。
正如Amir所指出的,如果您知道捆绑包的ID,则可以使用getBundle(long id)
来获得捆绑包。
如果您希望捆绑软件具有给定的符号名称,则在最高版本中,您可以执行以下操作(假设您有BundleContext
可用),
Bundle getBundle(BundleContext bundleContext, String symbolicName) {
Bundle result = null;
for (Bundle candidate : bundleContext.getBundles()) {
if (candidate.getSymbolicName().equals(symbolicName)) {
if (result == null || result.getVersion().compareTo(candidate.getVersion()) < 0) {
result = candidate;
}
}
}
return result;
}
如果由于某种原因没有可用的
BundleContext
(我想这是极少数情况),可以尝试使用FrameworkUtil查找一个,FrameworkUtil.getBundle(getClass()).getBundleContext()
通过它可以获得加载给定类的
Bundle
,即使是对于片段也是如此。