Java 禁用Eclipse RCP应用程序中的插件贡献

Java 禁用Eclipse RCP应用程序中的插件贡献,java,eclipse,eclipse-rcp,Java,Eclipse,Eclipse Rcp,我经常遇到这个问题,但还没有找到解决方案:每当我编写一个新的基于EclipseRCP的应用程序并包含来自Eclipse平台的插件时,我都会从这些插件中“继承”UI贡献 大多数贡献(菜单项、键盘快捷键、属性页)都很有用,但有时我宁愿禁用其中一些贡献,因为我真的不需要它们,它们可能会混淆用户 有人知道在Eclipse RCP应用程序中禁用/禁止选定贡献的官方或实用方法吗?唯一接近此目的的方法是: 保罗·韦伯斯特(Paul Webster)一直呼吁采取措施改变菜单的可见性,防止任何贡献,但这一想法尚

我经常遇到这个问题,但还没有找到解决方案:每当我编写一个新的基于EclipseRCP的应用程序并包含来自Eclipse平台的插件时,我都会从这些插件中“继承”UI贡献

大多数贡献(菜单项、键盘快捷键、属性页)都很有用,但有时我宁愿禁用其中一些贡献,因为我真的不需要它们,它们可能会混淆用户


有人知道在Eclipse RCP应用程序中禁用/禁止选定贡献的官方或实用方法吗?

唯一接近此目的的方法是:

保罗·韦伯斯特(Paul Webster)一直呼吁采取措施改变菜单的可见性,防止任何贡献,但这一想法尚未被整合

您可以看到在这个类中删除贡献的示例


看看Eclipse“活动”API。它允许您根据ID隐藏贡献

几个链接:


Equinox转换也可用于提供XLST转换,以删除不需要的UI贡献。

谢谢!但是我做对了吗?我用这种方式禁用所有贡献?无法禁用单个贡献(可能由其ID标识)?我不认为removeContributionFactory()用于禁用所有贡献,而是用于取消注册一个视图/菜单贡献的“
dispose
”机制,我建议用它来明确地删除来自其他插件的贡献。所以它是:a/不完全是你想要的,b/不容易,因为你必须检测这些贡献并删除它们。但这就是我到目前为止得到的。重读你的评论:不,你没有禁用所有贡献(来自所有其他插件),但你可能最终禁用来自某个给定外部插件的所有贡献。
public static void removeMenuContribution() {
    if (!PlatformUI.isWorkbenchRunning()) {
        return;
    }
    IMenuService menuService = (IMenuService) PlatformUI.getWorkbench()
            .getService(IMenuService.class);
    if (menuService==null) {
        return;
    }
    menuService.removeContributionFactory(viewMenuAddition);
    viewMenuAddition = null;
    menuService.removeContributionFactory(viewToolbarAddition);
    viewMenuAddition = null;
}