如何在安装Eclipse功能后停止启动它

时间:2012-03-26 18:56:44

标签: eclipse eclipse-rcp eclipse-plugin

我正在开发几个Eclipse功能(构成可安装单元的Eclipse插件组),并且我已经被要求每个功能必须能够被停用,或者换句话说,不能启动当Eclipse启动时。

我有一个对UI(Perspective,Wizards,Menu项等)做出贡献的插件,我试图直接拦截对插件的start方法的调用......

请注意,类PluginVerification正在另一个插件中运行,该插件将随安装包含我想要停止的插件的功能一起提供。换句话说,我的功能包括插件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环境中消失了。

感谢您的考虑, 微量

2 个答案:

答案 0 :(得分:2)

我认为你会有更好的运气p2 director。至于为什么有些工件可用,可能是因为你的插件已安装(你可以用osgi控制台检查)但是没有启动。enter image description here

答案 1 :(得分:1)

您需要查看<eclipse_home>/configuration/config.ini文件和osgi.bundles属性

请参阅the eclipse help

  

osgi.bundles

     

以逗号分隔的捆绑包列表,这些捆绑包在系统启动并运行后自动安装并可选择启动。每个条目的格式为:

<URL | simple bundle location>[@ [<start-level>] [":start"]]
     

起始级别表示捆绑软件应运行的OSGi启动级别。如果省略了起始级别(> 0整数),则框架将使用该捆绑包的默认起始级别。如果添加了“start”标记,则安装后该包将标记为已启动。

认为你应该能够通过将捆绑包添加到该列表而不将其列为“开始”和/或更改插件之间的起始级别来实现您想要做的事情一个在另一个之前开始。

另外,请查看Dude, where's my bundle