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