我不习惯使用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);
如果有人帮助我,我感激不尽! 感谢。
答案 0 :(得分:0)
您可以使用平台状态获取已安装的捆绑包描述列表:
State state = Platform.getPlatformAdmin().getState();
BundleDescription [] bundles = state.getBundles();
BundleDescription
包含getRequiredBundles
等方法,可返回捆绑包要求的列表。
BundleSpecification [] specs = desc.getRequiredBundles();
您无法获得插件的Plugin
,您可以使用以下插件获取Bundle
插件:
Bundle bundle = Platform.getBundle("plugin id");
由于只有一个插件类的实例,你可以在类中使用静态来保存该实例 - 例如ResourcesPlugin
这样做:
public final class ResourcesPlugin extends Plugin {
private static ResourcesPlugin plugin;
public ResourcesPlugin() {
plugin = this;
}
public static ResourcesPlugin getPlugin() {
return plugin;
}
}
答案 1 :(得分:0)
因为IPluginDescriptor不再支持,所以对于“插件描述符”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;