知识大全 如何加入到eclipse workspace方式

Posted

篇首语:胸怀万里世界, 放眼无限未来。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何加入到eclipse workspace方式相关的知识,希望对你有一定的参考价值。

   摘要     在开发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= ;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 re resources IProject;  import re resources IResource;  import re runtime IAdaptable;  import eclipse jface action IAction;  import eclipse jface dialogs MessageDialog;  import eclipse jface viewers ISelection;  import eclipse jface viewers IStructuredSelection;import eclipse swt widgets Shell;import eclipse ui IObjectActionDelegate;  import eclipse ui IWorkbenchPart;  /** * @author Kobye */public class TestPopMenu implements IObjectActionDelegate   private IStructuredSelection selection;  /** * Constructor for Action   */ 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   NewAction 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) erator();  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 );   /** * 这个方法保存了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 = ;i<rs length;i++)  IResource r = rs[i];  if(r getType()==IResource PROJECT)  project = (IProject) r;  break;      return project; cha138/Article/program/Java/ky/201311/28648

相关参考

知识大全 如何设定eclipse的档案的预设开启方式

如何设定eclipse的档案的预设开启方式开启Window——Preferences在视窗中选择General——Editors——FileAssociatior,可以看到各型别档案的开启方式修改.j

知识大全 使用links方式安装Eclipse插件

使用links方式安装Eclipse插件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一使用l

知识大全 eclipse开发jface时,main.class解决方法

  症状:   按照书上的方法开发jface要加入以下jar包:   eclipsejfacetext**jar  &n

知识大全 eclipse控制台输出重定向到文件

   Run>RunConfigurations>Common>File      &nbs

知识大全 eclipse插件的三种安装方法

   将插件直接拷贝到eclipse的plugins(有时候还包括features)目录下然后重启一下eclipse在eclipse的插件库中(>Help>S

知识大全 Js日期选择器并自动加入到输入框中示例代码

Js日期选择器并自动加入到输入框中示例代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Js日期选

知识大全 民间借贷加入宪法了吗

民间借贷加入宪法了吗早就加进去了,因为里面的油水太多,谁能管得住诈骗分子那双抓子民间借贷放松了吗申请贷款建议通过正规渠道:例如农行,网捷贷定义是指农业银行现金方式向符合特定条件的农业银行个人客户发放的

甲、乙、丙三人合伙经营一电器商场,因效益不佳,已欠债2万元。三人经协商一致,邀请有经营能力的丁加入到合伙之中,丁在被告知

甲、乙、丙三人合伙经营一电器商场,因效益不佳,已欠债2万元。三人经协商一致,邀请有经营能力的丁加入到合伙之中,丁在被告知合伙经营状况后出资加入其中,并以合伙人的身份参与经营。两年后,该电器商场因故停业

知识大全 Eclipse入门之使用指南及开发Eclipse插件 (2)

Eclipse入门之使用指南及开发Eclipse插件(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 在eclipse下配置生成 hadoop-eclipse-plugin jar包

  想在eclipse下编写Hadoop的程序必须要在eclipse下安装个所谓的hadoopeclipseplugin即插件貌似从hadoop版本后都不直接提供jar包了所以必须得自己编译一个因为是