什么是纯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,即使是对于片段也是如此。

10-04 12:47