Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse plugin 自定义Eclipse插件部署,并向PackageExplorer提供弹出窗口_Eclipse Plugin - Fatal编程技术网

Eclipse plugin 自定义Eclipse插件部署,并向PackageExplorer提供弹出窗口

Eclipse plugin 自定义Eclipse插件部署,并向PackageExplorer提供弹出窗口,eclipse-plugin,Eclipse Plugin,我开发了一个简单的插件来生成一些例程代码。这个插件对PackageExplorer的弹出菜单有贡献。当从开发环境运行时(从EclipseRCP以Eclipse应用程序的形式启动),它可以正常工作——菜单中会出现一个适当的菜单项,它的调用执行预期的操作 但是,我很难将它部署到另一个Eclipse实例中 开发的插件通过导出向导导出,导出向导生成一个单独的jar文件。这个jar文件已经放在另一个Eclipse安装(新解包)的dropings目录中。当此Eclipse实例启动时,PackageExplo

我开发了一个简单的插件来生成一些例程代码。这个插件对PackageExplorer的弹出菜单有贡献。当从开发环境运行时(从EclipseRCP以Eclipse应用程序的形式启动),它可以正常工作——菜单中会出现一个适当的菜单项,它的调用执行预期的操作

但是,我很难将它部署到另一个Eclipse实例中

开发的插件通过导出向导导出,导出向导生成一个单独的jar文件。这个jar文件已经放在另一个Eclipse安装(新解包)的dropings目录中。当此Eclipse实例启动时,PackageExplorer的弹出菜单不包含已贡献的菜单项。来自Eclipse安装详细信息的信息显示插件位于插件选项卡上,配置选项卡将其列为
tg.companion(1.0.0.201208132302)“companion Object Generator”[启动]

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

塔克斯


菜单贡献的
locationURI
popup:org.eclipse.jdt.ui.PackageExplorer
,属性
allPopups
的值是
true

插件未签名


这里的插件文件,可能会有一些启示

Plugin.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> 
命令处理程序:

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文件(出于某种原因)没有检查plugin.xml。因此,plugin.xml没有包含在导出向导生成的jar文件中

一旦build.properties文件被修改为包含plugin.xml,生成的jar文件就可以毫无问题地包含和部署它


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

错误日志中是否有任何内容。另外,您是否能够在osgi控制台中检查插件的状态-它处于什么状态?运行打印为“427 STARTING tg.companion_1.0.0.201208141117”的ss命令。使用start 427命令激活插件,导致状态为ACTIVE。但是,没有出现菜单贡献。从Windows->Show View打开的错误日志中没有错误。是否可以发布插件here@katsharp是否可以为问题附加一个档案?或者你的意思是发布嵌入问题的特定文件的源代码(例如plugin.xml和command class)?塔克斯。
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
    }

}