在PluginRegistry中注册Bundles?

时间:2011-12-30 11:56:46

标签: java eclipse eclipse-rcp

我正在尝试在运行时从任意文件夹加载OSGi Bundle,以便在我的Eclipse RCP应用程序中使用它们。到目前为止,我已经完成了以下步骤来实现这一目标:

  1. 创建新插件
  2. 从Plugin Activator获取BundleContext
  3. 通过BundleContext的install()方法安装Bundle
  4. 通过start()方法
  5. 启动获取的Bundle

    在这些步骤之后,Bundle处于ACTIVE状态,可以通过任何BundleContext检索。我的问题是无法通过PluginRegistry.getAllModels()检索包。显然,PluginRegistry没有列出BundleContext中的更改。我需要找到一种在PluginRegistry中注册我的Bundle的方法。这很重要,因为已经存在的软件部分使用PluginRegistry,例如清单编辑。

    PluginRegistry没有注册Bundles的方法。有没有办法将它们添加到注册表中?

2 个答案:

答案 0 :(得分:2)

PluginRegistry类是支持PDE的开发时间类。这是否意味着您的RCP应用程序包含PDE并且(部分)用于插件开发?如果这是真的,那么你现在需要解决PDE的工作(这是我不太了解的事情)。我建议看看org.eclipse.pde.runtime插件中的类(而不是内部类)。您应该能够使用调试器并查看代码如何将插件添加到PDE运行时。如果您对此有其他疑问,请在Eclipse站点上使用PDE新闻组。

如果你的RCP应用程序不包含插件开发,那么就不需要在运行时使用PluginRegistry,所以我对你的问题感到困惑。也许你可以详细说明一下?

答案 1 :(得分:1)

在Acceleo的开发过程中,我们偶然发现了这个问题,因为我们需要让用户在运行的Eclipse实例中部署位于其工作空间中的Eclipse插件(之后我们还需要卸载这些插件)。由于Acceleo是开源的,您可以查看github上的源代码。

我不会详细介绍这里的所有内容,但是您应该在第880行和第752行之后找到您要查找的内容。链接的文件是我们的实用工具类,用于在工作区中操作Eclipse插件和Eclipse中的Eclipse包。运行实例,这样你就可以找到解决问题所需的任何东西。

小警告,当我们动态部署位于工作区的Eclipse插件时,我们会停用其plugin.xml。由于大多数Eclipse工具只是查看插件,这些插件在给定时刻为其扩展点做出贡献,并且因为他们没有动态地监听Eclipse插件的安装/卸载,这些插件有助于他们的扩展点(可以像{一样完成) {3}})他们可能会继续引用我们稍后将卸载的插件的贡献,这可能会产生问题。第一个链接文件中的第775行详细说明了此行为。

此致

Stephane Begaudeau