`
melord
  • 浏览: 145464 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

阅读更多

本插件已经发布到Eclipse Marketplace, 说明文档请见:

http://icode.wiki.lc/doku.php?id=zh:wiki:eclipse_explorer


 

修改历史:

2010-04-23:

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

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

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

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

运行效果示例图

5,重新上传附件;

2011.06.16

1,支持自定义打开命令(支持linux系统)

2,添加附件tar.gz,内含源代码及导出的jar包

2011.08.03

1,修复linux系统下,无法对java project正确explorer的bug。

2,将preference 移动到general目录下

3,添加系统自动检测,linux默认为nautilus命令。

 

使用过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。就是我们的插件包了。

六、linux包使用说明

解压后,plugins/下面有jar包,直接copy到eclipse后,重启

打开Window->Preference,在Explorer Preferences中输入linux下打开文件管理器命令

七、附录

1,工程源文件下载

2,可运行的插件包下载

  • 大小: 609.9 KB
2
0
分享到:
评论
1 楼 galebo 2011-06-24  
eclipse内部的ResourceUtil这个类也可以用下

相关推荐

    eclipse插件开发-JDT.pdf

    Eclipse 插件开发 - JDT Eclipse 插件开发中的 JDT(Java Development Tools)是用于定义 Java 核心元素和 API 的插件。在开发特定于 Java 的功能部件时,总是应该将此插件列示为先决条件。JDT 核心包使您能够访问 ...

    Jetty For Eclipse 插件快速安装.rar

    为了在Eclipse中方便地调试和运行基于Jetty的Web应用,可以安装Jetty For Eclipse插件。这个压缩包"Jetty For Eclipse 插件快速安装.rar"包含了必要的文件,帮助用户快捷地在Eclipse环境中集成Jetty。 1. **插件...

    在Eclipse下开发BPEL实例分享

    ### 在Eclipse下开发BPEL实例的知识点详解 #### 一、环境准备 **1.1 预置环境** - **JDK版本:** 需要安装JDK 1.6版本,这是BPEL开发的基本要求之一。 - **Tomcat版本:** 使用的是Tomcat 6.0,作为Web应用服务器...

    activiti-eclipse-plugin

    "activiti-eclipse-plugin" 指的是 Activiti 的 Eclipse 插件,这个插件是为了方便开发者在 Eclipse 集成开发环境中设计、管理和调试 Activiti 流程模型而设计的。 在 Eclipse 中集成 "activiti-eclipse-plugin" ...

    eclipse-java开发者教程

    Eclipse作为一款强大的开源开发工具,广泛应用于Java、JavaScript等多语言的开发,其丰富的插件系统和优秀的代码辅助功能深受开发者喜爱。 本教程涵盖的内容包括: 1. **Eclipse基础**:首先介绍如何下载、安装和...

    Eclipse报表插件birt

    若已有 Eclipse 安装,则将下载的文件夹中的 `plugins` 和 `features` 目录内容复制到对应的 Eclipse 文件夹中,并通过 DOS 命令行启动 Eclipse-clean 清除缓存后启动 Eclipse。 ##### 安装方法二:通过 Eclipse ...

    eclipse的tomcat插件

    3. **plugins_dir文件夹**:这是Eclipse插件的核心部分,包含了一系列.jar文件和目录,这些是插件的实现和资源。将这个文件夹复制到Eclipse的安装目录下的"dropins"或"plugins"文件夹中,Eclipse在启动时会自动识别...

    Eclipse3.5集成Flex_Builder3或Flash_Builder4

    - 直接将之前配置成功的D:\Program Files\Adobe\FlexBuilder3Plug-in\eclipse下的features和plugins文件夹复制到其他Eclipse实例对应的目录下。 2. **重启Eclipse** - 重新启动Eclipse,即可使用Flex3功能。 ###...

    eclipse-testng离线包

    Eclipse是一款广泛使用的Java集成开发环境,它允许开发者通过插件扩展其功能。"eclipse-testng离线包"就是专门为Eclipse设计的TestNG插件的离线安装版本。 TestNG的主要特点包括: 1. **测试套件(Test Suites)**...

    java+eclipse+android开发环境亲自实际搭建

    在本文中,作者使用的是较旧版本的ADT 0.9.5,需要手动将features和plugin文件夹中的内容复制到Eclipse对应的目录。对于最新版本的ADT,请参照官方文档进行安装,因为不同版本的安装方法可能有所变化。 设置完ADT后...

    eclipse protobuf 安装配置示例

    Eclipse Protobuf是一款由Google开发的数据序列化工具,它允许开发者定义数据结构,然后生成能够轻松在各种数据流中解析和编码这些结构的代码。在本文中,我们将深入探讨如何在Eclipse环境中安装和配置Protobuf,...

    eclipse3.5.1汉化包

    Eclipse 3.5.1汉化包是一个针对Eclipse集成开发环境的本地化插件,主要用于将Eclipse的工作界面从英文翻译成简体中文,方便中国用户更便捷地使用这款强大的开发工具。Eclipse是一个开源的Java IDE,广泛应用于Java、...

    截止到2016年11月份最新的eclipse版本neno tomcat插件下载

    通过这个插件,开发者可以在Eclipse内直接启动、停止、调试和管理Tomcat实例,而无需离开IDE。对于开发Web应用程序来说,这种集成极大地提高了效率。 描述中提到,Neno插件不仅支持最新的Tomcat 9.x系列,同时也...

    eclipse_BPEL_4

    在这个压缩包中,包含了“plugins_9.rar”、“plugins_8.rar”和“plugins_10.rar”三个文件,这些是Eclipse插件的离线安装包,用于为不同版本的Eclipse添加BPEL支持。 安装BPEL插件的步骤如下: 1. **解压插件...

    eclipse3.7.0中文语言包

    Eclipse 3.7.0 中文语言包是一款专为Eclipse IDE设计的本地化插件,用于将软件界面从英文转换为简体中文,方便中国用户进行开发工作。Eclipse是一个广泛使用的开源集成开发环境(IDE),尤其在Java开发领域具有很高...

    Flex+Eclipse+BlazeDS+JDK+Tomcat开发实例

    【Flex+Eclipse+BlazeDS+JDK+Tomcat开发实例】是一个典型的BS架构(Browser-Server,浏览器-服务器)的开发配置,用于构建富互联网应用程序(RIA)。在这个实例中,我们将详细介绍如何整合这些组件来创建一个用户...

    axis的eclilpse插件

    通过"plugins"这个文件夹名,我们可以推测压缩包中可能包含了Eclipse插件的安装文件或库。这些文件通常需要按照Eclipse的安装指南进行导入或解压到特定目录,以便在IDE中启用和使用插件。 总结起来,"Axis的Eclipse...

    Eclipse编写的Android的弹窗应用实例

    压缩包中的"NewApp019"可能是这个弹窗应用实例的项目文件夹,包含了所有源代码、资源文件以及项目配置。通过打开并分析这些文件,你可以更深入地理解如何在Eclipse中实现弹窗功能,包括XML布局文件的结构、Java代码...

Global site tag (gtag.js) - Google Analytics