与以下Eclipse平台调用相同的纯OSGi是什么:
org.eclipse.core.runtime.Platform.getBundle([bundle-id]) - >束
答案 0 :(得分:7)
没有直接等价的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
,甚至是片段。
答案 1 :(得分:0)
在纯OSGi中,您可以使用PackageAdmin service
org.osgi.service.packageadmin.PackageAdmin.getBundles(String, String)
答案 2 :(得分:-2)
由于OSGi 1.6还存在方法BundleContext.getBundle(String),如果您已经有BundleContext。