Eclipse插件开发实例 - 打开资源对应的文件夹

 

修改历史:

2010-04-23:

1,修改对源文件目录不能打开的bug;

2,修改默认快捷键为CTRL+`(1左边的那个)原来的默认F3快捷键与某些eclipse版本存在冲突;

3,MANIFEST.MF依赖约束中去除版本绑定;

4,新添加一张效果示例图;

5,重新上传附件;

 

使用过MyEclipse的都知道有这么一个功能:选择文件->右键->MyEclipse->Open in Explorer能够在资源管理器中打开文件所在的文件夹,这个功能很实用,也很方便,不知道为什么eclipse不加个这个功能。不过在这里,我们可以开发一个eclipse的小插件(才5K)来实现这个功能,并将它集成到我们的eclipse中去。

准备工作:Eclipse Galileo(3.5.0) IDE, J2SE 1.5.0

一、创建一个插件工程。

取名为org.melord.pde.explorer,使用HelloWorld command模板,handler改名为OpenExplorerHandler,其它选项均为默认。

二、在plugin.xml extention选项卡设置菜单。

1,在org.eclipse.ui.bindings扩展点修改command 的sequence为F3(修改快捷键为F3);

2,删除org.eclipse.ui.menus扩展点下的menu menuContribution和toolbar menuContribution(不需要配置菜单栏与工具栏);

3,在org.eclipse.ui.menus扩展点添加popup menuContribution,其locationURI="popup:org.eclipse.ui.popup.any?after=additions"

在popup menuContribution下添加一个separator(分隔符),再添加我们的command;在icon中选择图标。

4,配置visiblewhen,含义如下,当选择的对象为org.eclipse.core.resources.IResource或org.eclipse.jdt.core.IJavaElement或org.eclipse.team.ui.synchronize.ISynchronizeModelElement实例时我们的command可见。关于表达式请参考eclipse core expression相关资料。

完整配置如下:

<extension point="org.eclipse.ui.menus"> <menuContribution locationURI="popup:org.eclipse.ui.popup.any?after=additions"> <separator name="org.melord.pde.explorer.separator1"> </separator> <command commandId="org.melord.pde.explorer.commands.sampleCommand" icon="icons/fldr_obj.gif" id="org.melord.pde.explorer.menus.sampleCommand" mnemonic="%command.mnemonic"> <visibleWhen> <iterate ifEmpty="false"> <or> <instanceof value="org.eclipse.core.resources.IResource"> </instanceof> <instanceof value="org.eclipse.jdt.core.IJavaElement"> </instanceof> <instanceof value="org.eclipse.team.ui.synchronize.ISynchronizeModelElement"> </instanceof> </or> </iterate> </visibleWhen> </command> </menuContribution> </extension> 

 

 三、实现我们的command hanlder类

重写excute方法,如下:

/** * the command has been executed, so extract extract the needed information * from the application context. */ public Object execute(ExecutionEvent event) throws ExecutionException { IWorkbenchWindow window = HandlerUtil .getActiveWorkbenchWindowChecked(event); ISelection sel = window.getSelectionService().getSelection(); if (sel instanceof IStructuredSelection) { Object obj = ((IStructuredSelection) sel).getFirstElement(); IResource resource = null; String path = null; // common resource file if (obj instanceof IFile) { resource = (IResource) obj; path = resource.getLocation().toOSString(); path = path.substring(0, path.lastIndexOf(File.separator)); } // other resource such as folder,project else if (obj instanceof IResource) { resource = (IResource) obj; path = resource.getLocation().toOSString(); } // explorer java element, contain field,method,package else if (obj instanceof IJavaElement) { // jar resource is null if (obj instanceof JarPackageFragmentRoot) { path = ((IPackageFragmentRoot) obj).getPath().toOSString(); // get folder path = path.substring(0, path.lastIndexOf(File.separator)); } else if (obj instanceof IPackageFragmentRoot) { // src folder String prjPath = ((IPackageFragmentRoot) obj) .getJavaProject().getProject().getParent() .getLocation().toOSString(); path = prjPath + ((IPackageFragmentRoot) obj).getPath() .toOSString(); } else if (obj instanceof IPackageFragment) {// other : package resource = ((IPackageFragment) obj).getResource(); path = resource.getLocation().toOSString(); } else {// member:filed: resource = ((IJavaElement) obj).getResource(); path = resource.getLocation().toOSString(); // get folder path = path.substring(0, path.lastIndexOf(File.separator)); } } // explorer team ui resource else if (obj instanceof ISynchronizeModelElement) { resource = ((ISynchronizeModelElement) obj).getResource(); } if (path != null) { try { Runtime.getRuntime().exec("explorer " + path); //$NON-NLS-1$ } catch (IOException e) { // } } } return null; } 

四、国际化。

在plugin.xml OverView选项卡点击/选择Externalize String。对plugin.xml进行国际化。

在bundle.properties同级目录下创建一个bundle_zh.properties作为中文的资源文件,此过程推荐使用第三方插件完成。不过需要国际化的其实就一个command的label而已。难度不大。

 

五、测试运行及打包发布。

测试通过没问题就发布吧。

发布时选择使用Directory方式。发布之后会在目标文件夹生成一个plugins文件夹,里面有一个jar。就是我们的插件包了。

六、附录

1,工程源文件下载

2,可运行的插件包下载

 

 

 

 

 

 

你可能感兴趣的:(eclipse,MyEclipse,eclipse插件,command,Path,extension)