我试图在运行时从任意文件夹加载OSGi Bundles,以便在Eclipse应用程序中使用它们。为实现这一目标,我迄今已采取以下步骤:
在这些步骤之后,Bundle处于活动状态,可以通过任何BundleContext检索。我的问题是,无法通过PluginRegistry.getAllModels()检索包。显然,PluginRegistry并没有列出BundleContext中的更改。我需要找到一种方式在PluginRegistry注册我的捆绑。这一点很重要,因为已经存在的软件部件(例如清单编辑器)使用了PluginRegistry。
PluginRegistry没有注册Bundles的方法。有没有办法将它们添加到注册表中?
发布于 2011-12-30 14:28:49
PluginRegistry类是一个支持PDE的开发时类。这是否意味着您的RCP应用程序包括PDE,并且(部分地)用于插件开发?如果这是真的,那么您需要现在就完成PDE的工作(这是我不太了解的事情)。我建议查看一下org.eclipse.pde.runtime插件中的类(而不是内部类)。您应该能够使用调试器并查看如何向PDE运行时添加插件的代码。如果您对此有进一步的疑问,请使用Eclipse站点上的PDE新闻组。
如果您的RCP应用程序不包括插件开发,那么就没有必要在运行时使用PluginRegistry,所以我对您的问题感到困惑。也许你能再详细说明一下?
发布于 2012-01-06 20:20:25
在Acceleo的开发过程中,我们也遇到了这个问题,因为我们需要让用户在运行的Eclipse实例中部署位于其工作区中的Eclipse插件(之后还需要卸载这些插件)。由于Acceleo是开源的,所以您可以查看我们在github上的源代码。
我不会详细说明这里的一切,但是你应该在880线和752线附近找到你要找的东西。链接的文件是我们用于操作工作区中的Eclipse插件和运行实例中的Eclipse捆绑包的实用程序类,因此您可以找到处理问题所需的几乎任何东西。
小警告,当我们在工作空间中动态部署一个Eclipse插件时,我们会禁用它的plugin.xml。由于大多数Eclipse只是查看插件,它在给定的时刻贡献了它们的扩展点,而且由于它们没有动态地侦听对其扩展点(可以像这一样完成)的Eclipse的安装/卸载,所以它们可能保留对插件贡献的引用,我们稍后会卸载这些插件,这可能会造成问题。此行为将在第一个链接文件的第775行中详细解释。
致以敬意,
斯蒂芬娜·贝戈多
https://stackoverflow.com/questions/8679205
复制相似问题