【发布时间】:2014-03-11 14:11:19
【问题描述】:
我正在开发几个 Eclipse 功能(形成可安装单元的 Eclipse 插件组),并且我被要求每个功能都必须能够被停用,或者换句话说,不能启动当 Eclipse 启动时。
我有一个对 UI 做出贡献的插件(透视图、向导、菜单项等),我试图像这样拦截对插件的 start 方法的调用...
请注意,PluginVerification 类正在另一个插件中运行,该插件将随包含我要停止的插件的功能的安装一起提供。换句话说,我的 Feature 由插件 A、B 和 C 组成。PluginVerification 存在于 C 中,我想用它来控制插件 A 和 B 的启动。
这是插件A和B的Activator类的启动方法
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
if(PluginVerification.verify(this)) {
super.start(context);
plugin = this;
}
}
如果对 PluginVerification.verify(this) 的调用返回 false,那么我不会启动插件。这工作了一半,因为插件确实没有启动,但是这个插件贡献的 UI 工件仍然出现。例如,这个插件提供的向导仍然可以通过 UI 访问。但是当您尝试使用其中之一时,会抛出 NullPointerExceptions,因为该插件从未启动。
我希望有人可以帮助我找到更好的地方来真正阻止插件启动,这样它就不会贡献它的 UI 工件。我打算提醒用户他的产品未经验证,因此无法启动。我希望用户感觉好像该功能已经从他的 Eclipse 环境中消失了。
感谢您的考虑, 追踪
【问题讨论】:
标签: eclipse eclipse-rcp eclipse-plugin