Osgi 如何在Equinox 3.10及以后的版本中获取所有已加载的捆绑包

Osgi 如何在Equinox 3.10及以后的版本中获取所有已加载的捆绑包,osgi,equinox,osgi-bundle,Osgi,Equinox,Osgi Bundle,我希望以编程方式检索已加载的所有捆绑包。在旧版本中,我们以这种方式使用它: Field osgiField = EclipseStarter.class.getDeclaredField("osgi"); osgiField.setAccessible(true); final org.eclipse.osgi.framework.internal.core.OSGi osgi = (org.eclipse.osgi.framework.intern

我希望以编程方式检索已加载的所有捆绑包。在旧版本中,我们以这种方式使用它:

    Field osgiField = EclipseStarter.class.getDeclaredField("osgi"); 
    osgiField.setAccessible(true);
    final org.eclipse.osgi.framework.internal.core.OSGi osgi =
          (org.eclipse.osgi.framework.internal.core.OSGi) osgiField.get(null);
    osgi.getBundleContext().getBundles();

如何在最新的osgi中检索所有加载的bundle?

从bundle中,您可以实现BundleActivator接口,并在清单中将您的类标记为“BundleActivator:my.ClassName”

或者,如果不可能,可以使用FrameworkUtil.getBundle(this.getClass()).getBundleContext()

另见这个问题:

然后使用bundleContext.getBundles()


这些方法应该适用于任何OSGi框架。

您是从OSGi外部还是从捆绑包中进行此操作?我正在尝试从另一个捆绑包中进行此操作。您真正需要的似乎是获得OSGi捆绑包文本,而之前您使用了一种非常奇怪的方法来获得它。正确的方法是实现Bundle激活器。