如何在 Eclipse 工作区中获取插件
How to get the plugins in Eclipse workspace
当 IPluginRegistry 被弃用时,我曾经使用它来获取所有插件,现在在新版本中,它的一些方法实现被删除,比如 getPluginRegistry。
IPluginRegistry pReg = Platform.getPluginRegistry();
IPluginDescriptor[] plugins = pReg.getPluginDescriptors();
IPluginPrerequisite[] pPrereqs = plugins[i].getPluginPrerequisites();
上面的代码有什么替代方案吗?
此外,我无法像下面在 eclipse 4.3 中那样从 plugin-id 获取插件,getPlugin(plugin_id) 方法已弃用并在新版本中删除了它们的实现。下面的代码还有其他选择吗?
Plugin plugin = Platform.getPlugin(pluginId);
boolean bool = plugin instanceOf MyCustomPlugin;
MyCustomPlugin.java
public abstract MYCustomPlugin extends AbstractUIPlugin{
}
如果我像下面这样使用包,我只能得到没有插件名称的包名称,如 com.plugins.pluginPack
而不是 com.plugins.pluginPack.MyCustomPlugin
。我需要完整的插件而不仅仅是包名。
Bundle bundle = Platform.getBundle(pluginId);
如果有人帮助我,我将不胜感激!!
谢谢。
您可以使用平台状态获取已安装的捆绑包描述列表:
State state = Platform.getPlatformAdmin().getState();
BundleDescription [] bundles = state.getBundles();
BundleDescription
具有诸如 getRequiredBundles
之类的方法 return 捆绑包要求的列表。
BundleSpecification [] specs = desc.getRequiredBundles();
您无法再获得插件的 Plugin
,您可以使用以下方式获得插件的 Bundle
:
Bundle bundle = Platform.getBundle("plugin id");
因为插件的 class 只有一个实例,所以您可以在 class 中使用静态来保存该实例 - 例如 ResourcesPlugin
这样做:
public final class ResourcesPlugin extends Plugin {
private static ResourcesPlugin plugin;
public ResourcesPlugin() {
plugin = this;
}
public static ResourcesPlugin getPlugin() {
return plugin;
}
}
因为 IPluginDescriptor 不再支持所以,对于 "plugin descriptor" uniqueIdentifier 我们可以使用 bundle
Myplugin plugin; //this Myplugin extending Plugin abstract class
IPluginDescriptor pluginDescriptor = plugin.getDescriptor();
String uniqueIdentifier = pluginDescriptor.getUniqueIdentifier();
**备选方案(下)
String uniqueIdentifier = plugin.getBundle().getSymbolicName()
对于插件对象,您可以使用 bundle 和 org.osgi.framework.Constants
找到替代方案
Plugin plugin = Platform.getPlugin(pluginId);
**备选方案(下)
Bundle bundle = Platform.getBundle(pluginId);
String activator = (String)bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR);
Object activatorInstance = bundle.loadClass(activator).newInstance();
Plugin plugin = (Plugin) activatorInstance;
当 IPluginRegistry 被弃用时,我曾经使用它来获取所有插件,现在在新版本中,它的一些方法实现被删除,比如 getPluginRegistry。
IPluginRegistry pReg = Platform.getPluginRegistry();
IPluginDescriptor[] plugins = pReg.getPluginDescriptors();
IPluginPrerequisite[] pPrereqs = plugins[i].getPluginPrerequisites();
上面的代码有什么替代方案吗?
此外,我无法像下面在 eclipse 4.3 中那样从 plugin-id 获取插件,getPlugin(plugin_id) 方法已弃用并在新版本中删除了它们的实现。下面的代码还有其他选择吗?
Plugin plugin = Platform.getPlugin(pluginId);
boolean bool = plugin instanceOf MyCustomPlugin;
MyCustomPlugin.java
public abstract MYCustomPlugin extends AbstractUIPlugin{
}
如果我像下面这样使用包,我只能得到没有插件名称的包名称,如 com.plugins.pluginPack
而不是 com.plugins.pluginPack.MyCustomPlugin
。我需要完整的插件而不仅仅是包名。
Bundle bundle = Platform.getBundle(pluginId);
如果有人帮助我,我将不胜感激!! 谢谢。
您可以使用平台状态获取已安装的捆绑包描述列表:
State state = Platform.getPlatformAdmin().getState();
BundleDescription [] bundles = state.getBundles();
BundleDescription
具有诸如 getRequiredBundles
之类的方法 return 捆绑包要求的列表。
BundleSpecification [] specs = desc.getRequiredBundles();
您无法再获得插件的 Plugin
,您可以使用以下方式获得插件的 Bundle
:
Bundle bundle = Platform.getBundle("plugin id");
因为插件的 class 只有一个实例,所以您可以在 class 中使用静态来保存该实例 - 例如 ResourcesPlugin
这样做:
public final class ResourcesPlugin extends Plugin {
private static ResourcesPlugin plugin;
public ResourcesPlugin() {
plugin = this;
}
public static ResourcesPlugin getPlugin() {
return plugin;
}
}
因为 IPluginDescriptor 不再支持所以,对于 "plugin descriptor" uniqueIdentifier 我们可以使用 bundle
Myplugin plugin; //this Myplugin extending Plugin abstract class
IPluginDescriptor pluginDescriptor = plugin.getDescriptor();
String uniqueIdentifier = pluginDescriptor.getUniqueIdentifier();
**备选方案(下)
String uniqueIdentifier = plugin.getBundle().getSymbolicName()
对于插件对象,您可以使用 bundle 和 org.osgi.framework.Constants
找到替代方案Plugin plugin = Platform.getPlugin(pluginId);
**备选方案(下)
Bundle bundle = Platform.getBundle(pluginId);
String activator = (String)bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR);
Object activatorInstance = bundle.loadClass(activator).newInstance();
Plugin plugin = (Plugin) activatorInstance;