快速业务通道

基于JDT的JAR源代码搜索 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
述解决方案中的主要技术问题包括:

ResourcesPlugin.getWorkspace().getRoot().getProjects() 可以获得 工作空间下的所有项目,类型为 IProject。那么如何将 IProject 对象转换为 JAVA 项目对应的 IJavaProject 对象?(文中步骤 1 解决该问题)

获 得 IJavaProject 对象后,如何获得它所依赖的 Jar 文件列表,也就是 JarPackageFragmentRoot 对象列表?(文中步骤 2 解决该问题)

获得 JarPackageFragmentRoot 对象后,如何获得它下面的包(JarPackageFragment ),又如何获得包下的 class 文件(IClassFile)和非 class 文本文件 (JarFileEntry)?(文中步骤 3、5 解决该问题)

如何获得 IClassFile 的源代码,又如何获得 JarFileEntry 的文本内容?(文中步骤 4 、6 解决该问题)

下面将对各个步骤逐一地进行分析,并且一一解决上 面提到的问题。

基于JDT的JAR源代码搜索(3)

时间:2010-11-20 IBM 魏强 王芹华 邵兵

步骤 1. 转换 IProject 为 IJavaProject

Eclipse 工作空间下,可能存在许多类型的项目,有 JAVA 项目也有非 JAVA 项目,为了获得项目依赖的 Jar 文件,该项目必须是 Java 类型的项目。以下代码通过调用 JDT 提供的接口,获得 JAVA 项目列表。

清单 1. 获得工作空间下的所有 JAVA 项目

/* 获得工作 空间下的所有项目 */  IProject[] projects =  ResourcesPlugin.getWorkspace().getRoot()              .getProjects();  if (projects != null)  {      for (IProject p : projects)     {        /*  尝试转换普通项目为 JAVA 项目 */        IJavaProject  create = JavaCore.create(p);        /* 判断项目是否是  JAVA 项目 */        if (create != null &&  create.exists())        {           /* 操 作 JAVA 项目 */           …         }     }  }

步骤 2. 获得依赖的 JarPackageFragmentRoot 列表

获得 IJavaProject 对象后,需要得到它 所依赖的 Jar 文件列表。在 JDT 中,Jar 文件对应的类为 JarPackageFragmentRoot,下面一段程序用于获得 Jar 文件列表。

清单 2. 获得 JAVA 项目依赖的 Jar 文件列表的代码

IJavaProject  project= …  IJavaElement[] children =  project.getChildren();  if (children != null)  {   /* 遍历 project 下的 Java 元素 */   for  (IJavaElement ele : children)   {     /* 判断是否 是 JarPackageFragmentRoot 对象 */     if (ele instanceof  JarPackageFragmentRoot)     {        /* 操作此  jar 文件 */           …     }  }  }

大多数时候程序员想要搜索的范围并不包含 JRE 库的源代码,因此为了提高搜索效率,需要屏蔽 JRE 库源代码的搜索,下面一 段程序展示如何实现这个需求。

清单 3. 屏蔽 JRE 库的源码搜索

JarPackageFragmentRoot jarFile = … ;   IJavaProject project = … ;  /**  * 判断此 Jar  是否在 JRE 库中。如果是,将其屏蔽 , 以提高效率  */   IClasspathEntry rawClasspathEntry = jarFile.getRawClasspathEntry ();  IClasspathContainer classpathContainer =  JavaCore.getClasspathContainer(           rawClasspathEntry.getPath(), project);  /* 判断此 jar 是否属 于项目默认的 JRE 库。如果是,不检查该 jar*/  if  (classpathContainer.getKind() ==  IClasspathContainer.K_DEFAULT_SYSTEM)  {

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号