Eclipse Platform.getBundle()的纯OSGi等价是什么

Kon*_*hik 2 java eclipse osgi

什么是纯OSGi等效于以下Eclipse平台调用:

org.eclipse.core.runtime.Platform.getBundle([bundle-id]) - > Bundle

Ang*_*jpt 7

没有直接等价的getBundle(String symbolicName),并且普通的OSGi没有这样的静态助手,因为VM中可能有多个框架.

正如Amir指出的那样,getBundle(long id)如果您知道它的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;
}
Run Code Online (Sandbox Code Playgroud)

如果BundleContext由于某种原因你没有可用的(我猜这些是罕见的情况),你可以尝试使用FrameworkUtil找到一个,

FrameworkUtil.getBundle(getClass()).getBundleContext()
Run Code Online (Sandbox Code Playgroud)

通过它你可以获得Bundle加载给定类的内容,甚至是片段.

  • 你在Activator中获得了一个BundleContext,你应该以某种方式保持它.某些OSGi DI解决方案也可以为您注入BundleContext.现在,如果您发现自己处于'客户端代码'中,没有看到BundleContext,您应该想知道为什么您需要首先找到其他捆绑包. (3认同)