- 浏览: 214904 次
- 性别:
- 来自: 北京
最新评论
-
xupo:
tzg157 写道qinkangwencai 写道别误导大家了 ...
Java多线程编程环境中单例模式的实现 -
xupo:
qinkangwencai 写道别误导大家了行吗?double ...
Java多线程编程环境中单例模式的实现 -
qaddafi2008:
内部静态类的方法貌似是目前最好的解法了!
Java多线程编程环境中单例模式的实现 -
sanshizi:
学习了
Java多线程编程环境中单例模式的实现 -
tzg157:
qinkangwencai 写道别误导大家了行吗?double ...
Java多线程编程环境中单例模式的实现
摘要:
在开发eclipse pluin的时候,某些情况下我们需要访问eclipse workspace,例如:在插件中以编程的方式调用ant命令、访问eclipse workspace中的project等。一次在网上偶遇到本文的原创者kobye,此人正在进行jsports项目的开发,对此颇有心地,故在此行文与 众人共同探讨之。
一、基础工作-在插件中以编程的方式调用ant命令:
在开发eclipse pluin的时候,某些情况下我们需要访问eclipse workspace,例如:在插件中以编程的方式调用ant命令等。
如何做到这一点?
public void execute(){ IWorkspace ws = ResourcesPlugin.getWorkspace(); IProject[] ps = ws.getRoot().getProjects(); System.out.println(ws.getRoot().getFullPath().makeAbsolute().toOSString()); for(int i=0;i<ps.length;i++){ IProject p = ps[i]; IPath location = p.getLocation(); IFile ifile = p.getFile("build.xml"); System.out.println(ifile.getLocation().toFile().getAbsolutePath()); File f = new File(ifile.getLocation().toFile().getAbsolutePath()); if(!f.exists()){ continue; } Project pro = new Project(); pro.setBasedir(location.toFile().getAbsolutePath()); pro.init(); ProjectHelper helper = ProjectHelper.getProjectHelper(); helper.parse(pro, f); Hashtable tars = pro.getTargets(); System.out.println("name==="+name); Target t = (Target) tars.get(name); if(t==null){ return; } DefaultLogger consoleLogger = new DefaultLogger(); consoleLogger.setErrorPrintStream(System.err); consoleLogger.setOutputPrintStream(System.out); consoleLogger.setMessageOutputLevel(Project.MSG_INFO); pro.addBuildListener(consoleLogger); pro.executeTarget(this.name); break; } }
以上代码(单独编译不会通过,请把 name换位ant 的target)可以放到插件的代码中。
以上代码的含义:
获得eclipse workspace的引用,对workspace下的pronjects进行循环,如果该project下有build.xml并且该文件中有name的 target那么就以ant的方式调用,并把ant运行的输出输出到eclipse的console。
二、如何访问current project:
上一节给出来在eclipse plugin 中访问eclipse workspace, 从而访问该workspace下所有project的方案,WorkSpace以及相关的类不提供直接访问current project的方法,所以只能走其他途径.
在我们的plugin中,我们要提供界面入口,比如 PopMenu ActionMenu 等之类的,
这些界面入口是要实现一些接口的,例如:PopMenu要实现IObjectActionDelegate,
这个接口有几个方法,其中 public void selectionChanged(IAction action, Iselection
selection) ;
这个方法很早重要,可以通过Iselection获得当前选择中的Project.
Iselection共有三个子接口,分别对应三个实现类,那么通过判断Iselection的实际类型可以获得其子接口的引用,
然后对其遍历,通过getAdaptor方法获得所有的选择的IResource的引用,
再进一步对IResource进行类型识别,得到IResource.PROJECT类型的元素即为IProject的引用.
下面是程序:
import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.IAction; 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.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; /** * @author Kobye */ public class TestPopMenu implements IObjectActionDelegate { private IStructuredselection selection; /** * Constructor for Action1. */ public TestPopMenu () { super(); } /** * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart) */ public void setActivePart(IAction action, IWorkbenchPart targetPart) { } /** * @see IActionDelegate#run(IAction) */ public void run(IAction action) { Shell shell = new Shell(); MessageDialog.openInformation( shell, "Pop Plug-in", "New Action was executed."); } public static Object getAdapter(Object adaptable, Class c) { if (c.isInstance(adaptable)) { return adaptable; } if (adaptable instanceof IAdaptable) { IAdaptable a = (IAdaptable) adaptable; Object adapter = a.getAdapter(c); if (c.isInstance(adapter)) { return adapter; } } return null; } /*** * 这个方法和下面的方法很重要。 * @param selection * @param c * @return */ private Object[] getselectedResources(IStructuredselection selection,Class c) { return getselectedAdaptables(selection, c); } private static Object[] getselectedAdaptables(Iselection selection, Class c) { ArrayList result = null; if (!selection.isEmpty()) { result = new ArrayList(); Iterator elements = ((IStructuredselection) selection).iterator(); while (elements.hasNext()) { Object adapter = getAdapter(elements.next(), c); if (c.isInstance(adapter)) { result.add(adapter); } } } if (result != null && !result.isEmpty()) { return result.toArray((Object[])Array.newInstance(c, result.size())); } return (Object[])Array.newInstance(c, 0); } /** * 这个方法保存了Iselection的引用, * 请注意:Iselection的实际类型因不同的应用,其实际类型可能不同, * 共有三种可能,请查阅eclipse API。 * * @see IActionDelegate#selectionChanged(IAction, Iselection) */ public void selectionChanged(IAction action, Iselection selection) { this.selection = (IStructuredselection) selection; System.out.println("current project name==="+this.getProject().getName()); } /** * 这个方法可以得到current project。 * * @return */ private IProject getProject(){ IResource[]rs = (IResource[])getselectedResources((IStructuredselection)selection,IResource.class); IProject project = null; for(int i =0;i<rs.length;i++){ IResource r = rs[i]; if(r.getType()==IResource.PROJECT){ project = (IProject) r; break; } } return project; } }<!-- bottom ads -->
发表评论
-
RHEL5 利用 CentOS的yum 安装openssl gc++及Nginx
2011-04-12 16:17 122261.确保RHEL5中已经安装了yum[root@xupo~]# ... -
用URL重写来实现会话管理
2011-04-11 11:02 1327通常,会话管理是通过服务器将 Session ID 作为一个 ... -
JAVA实现与Linux通信(通过SSH协议)
2011-03-24 14:47 5786使用InputStream和OutputStream来获得命令 ... -
花生壳配置
2011-03-18 17:22 1030[edgen@rhel54 ~]$ su - root口令:[ ... -
服务器相关配置备忘
2011-03-11 10:28 1290JDK安装配置 1、下载jd ... -
Hibernate C3P0 Maven 配置
2011-02-10 14:55 2999pom.xml中增加: <depe ... -
用blazeDS实现推技术
2010-11-11 10:37 1118http://blog.csdn.net/yangyawen/ ... -
用 Quartz 进行作业调度
2010-09-06 14:46 940http://www.ibm.com/developerwor ... -
工作流
2010-09-06 14:26 1050jbpm4 :http://sourceforge.net/p ... -
《构建高性能web站点》读书笔记
2010-08-13 20:20 1056《构建高性能web站点》读书笔记 http://book.g ... -
Comet:基于 HTTP 长连接的“服务器推”技术
2010-08-13 20:15 887http://czh19860925.iteye.com/bl ... -
(转)关于大型软件重构的一些想法
2010-04-01 20:51 1142做当前这个项目也快 ... -
关于设计模式中各种工厂的理解
2010-04-01 20:46 1062对于Java的工厂模式,简单工厂、工厂方法、抽象工厂之间的区别 ... -
(转)探讨代理模式与Java反射机制的应用
2010-04-01 20:21 1337代理模式,相信大多数人都非常熟悉,常见的实现方式是通过公共接口 ... -
OpenNMS架构介绍
2010-03-30 10:06 12595一、OpenNMS简介 OpenNMS的开发基于TMN及FC ... -
OpenNMS配置指南
2010-03-30 09:54 3218OpenNMS的配置是一个繁琐的过程,由于网上没有系统介绍如何 ... -
java调用javascript :js引擎rhino
2009-10-30 16:04 9273前段时间,在浏览javaeye论坛,看见有人征集如何在java ... -
扩展 Eclipse 辅助和规范开发流程
2009-10-26 15:12 1482本如果市场上的开发工具不能满足您的需要,而自己开发 IDE 又 ... -
作业调度器的JAVA实现(第一篇)--Job Scheduling in Java
2009-09-07 23:41 2874On some projects, you find you ... -
对象缓存管理器JAVA实现(第一篇)---一个简单的对象缓存器实现方式
2009-09-07 23:31 2268As I wrote in a previous post, ...
相关推荐
然而,根据“how to use eclipse”这一标题,我将基于这一假设,提供Eclipse开发环境(IDE)的使用方法。 Eclipse是Java开发环境中广泛使用的一款集成开发工具,它是由Eclipse基金会维护的一个开源项目。Eclipse ...
【标题】"eclipse-workspace.zip" 是一个包含Eclipse工作空间内容的压缩文件,它通常存储了开发者在Eclipse集成开发环境中(IDE)的工作项目和相关配置。Eclipse是一款广泛应用的开源Java IDE,但同时也支持其他编程...
在Eclipse中,"workspace"是开发者进行项目管理的核心概念,它是存储项目、配置信息以及Eclipse工作相关数据的地方。下面将详细讨论如何设置和管理Eclipse的workspace。 1. **创建与选择workspace** 当首次启动...
- 解压`Eclipse-Workspace.zip`文件到`C:\WebGoat-x.x`目录下。 2. **启动Eclipse** - 使用`eclipse.bat`文件启动Eclipse。此文件位于`<webgoat-root>/eclipse.bat`目录下。 - 启动后,在Eclipse的左上角“项目...
### Eclipse中改变默认Workspace的方法详解 #### 一、引言 Eclipse是一款广泛使用的开源集成开发环境(IDE),适用于多种编程语言,尤其是Java开发者。它提供了丰富的功能来提高开发效率,包括代码编辑、调试、构建...
如何修改Eclipse的 workspace目录.doc
【Eclipse_workspace-master.zip】是一个包含Python项目的压缩包,项目主要目标是实现CAN(Controller Area Network)通信的上位机程序。CAN总线是一种广泛应用在汽车、工业自动化和嵌入式系统中的通信协议,它允许...
### 解决Eclipse保存代码时building workspace因前台代码验证导致的速度慢或卡死问题 在进行软件开发过程中,经常会遇到各种工具性能问题,这些问题往往会影响到开发效率。其中,Eclipse作为一款广泛使用的集成开发...
【标题】"eclipse_workspace" 是一个与Java开发密切相关的概念,它指的是Eclipse集成开发环境(IDE)中的工作空间。在Eclipse中,工作空间是用户进行项目开发的主要区域,包含了所有项目的源代码、配置文件、构建...
在Eclipse这个强大的Java开发环境中,处理中文字符可能会遇到一些挑战,尤其是在资源文件(如.properties或.xml文件)中。Eclipse默认的编码设置可能不完全兼容中文字符集,导致中文字符显示为乱码或者在保存时出现...
eclipse-workspace测试md
此资源为在windows环境下使用EClipse进行CppUTest单元测试教程的配套资源。 教程地址:https://tangxing.blog.csdn.net/article/details/118866411
Eclipse 工作空间恢复选择提示和删除无用workspace列表 Eclipse 平台是 Java 开发者的不二之选,但是在使用 Eclipse 时,我们经常会遇到一些问题,其中之一就是工作空间选择提示的消失。今天,我们将讨论如何恢复 ...
Eclipse工作空间(eclipse-workspace)是Eclipse集成开发环境(IDE)中的核心概念之一。它是用户在Eclipse中进行项目开发的主要区域,存储着用户的项目、首选项设置、工作集以及其他配置信息。理解Eclipse工作空间的...
Workspace ONE Access数字化工作空间枢纽方案.pptx
Eclipse工作空间 一个集中式存储库,用于我在Eclipse IDE上所做的所有工作 项目: 虚拟微服务Spring Boot REST API遵循microservices architecture 。 MQTT应用一个简单的MQTT发布者/订阅者应用程序。
Workspace ONE Access数字化工作空间枢纽方案.pdf