自定义 Eclipse 插件部署,对包资源管理器有弹出窗口贡献



我开发了一个简单的插件来生成一些例程代码。此插件对包资源管理器的弹出菜单有贡献。当从开发环境(Launch as Eclipse application从 Eclipse RCP)运行时,它按预期工作 - 菜单中会出现一个适当的菜单项,并且它的调用会执行预期操作。

但是,我很难将其部署到不同的 Eclipse 实例中。

开发的插件与导出向导一起导出,导出向导生成了一个单独的 jar 文件。此 jar 文件已放入另一个 Eclipse 安装(新解压缩)的 dropings 目录中。启动此 Eclipse 实例时,包资源管理器的弹出菜单不包含提供的菜单项。Eclipse 安装详细信息中的信息显示该插件存在于"插件"选项卡上,并且"配置"选项卡将其列为tg.companion (1.0.0.201208132302) "Companion Object Generator" [Starting]

我错过了什么?为什么贡献的菜单项没有显示?

谢谢。


菜单贡献的locationURIpopup:org.eclipse.jdt.ui.PackageExplorer,属性allPopups的值为 true

插件未签名。


以下是可能会有所启发的插件文件。

插件.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="true"
            locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
         <command
               commandId="tg.companion.handler.generator"
               label="TG Create Companion Object"
               style="push"
               tooltip="Creates a companion object to the selected entity object, and provides DAO/RAO implementations">
         </command>
      </menuContribution>
   </extension>
   <extension point="org.eclipse.ui.commands">
      <command
            defaultHandler="tg.companion.handler.GenerateCompanionObjects"
            id="tg.companion.handler.generator"
            name="Generate Comanion">
      </command>
   </extension>
</plugin> 

清单。中频:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Companion Object Generator
Bundle-SymbolicName: tg.companion;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: tg.companion.Activator
Bundle-Vendor: TG
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime,
 org.eclipse.jdt.core;bundle-version="3.8.1",
 org.eclipse.core.resources;bundle-version="3.8.0",
 org.eclipse.core.expressions;bundle-version="3.4.400"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy

命令处理程序:

package tg.companion.handler;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
public class GenerateCompanionObjects extends AbstractHandler implements IHandler {
    @Override
    public Object execute(final ExecutionEvent event) throws ExecutionException {
        final Shell shell = HandlerUtil.getActiveShell(event);
        final ISelection sel = HandlerUtil.getActiveMenuSelection(event);
        final IStructuredSelection selection = (IStructuredSelection) sel;
        final Object firstElement = selection.getFirstElement();
        if (firstElement instanceof ICompilationUnit) {
            createOutput(shell, (ICompilationUnit) firstElement);
        } else {
            MessageDialog.openWarning(shell, "Companion Object Generation Warning", "Please select an entity object for generating a corresponding companion.");
        }
        return null;
    }
    private void createOutput(final Shell shell, final ICompilationUnit cu) {
         // does code generation work using Java Model
    }
}

终于解决了!

在仔细审查了项目结构后,确定build.properties文件(由于某种原因)没有插件.xml检查。结果,插件.xml未包含在导出向导生成的jar文件中。

一旦 build.properties 文件被修改为包含插件.xml,生成的 jar 文件就包含了它并部署了它,没有任何问题。

有趣的是,插件导出向导甚至没有警告排除插件.xml,这是我个人所期望的。

最新更新