快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

基于JDT的JAR源代码搜索

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

引言

Eclipse 为程序员提供了强大的文本搜索功能,程序员可以方便 的在工作空间中搜索到需要的 JAVA 代码或者文本。但是有时候,程序员希望在 .class 文件源码或者普通文本文件中搜索某个字符串,而这些文件包含于 Jar 文件中,此时 Eclipse 就无法满足要求。比如,用户试图寻找 UI 上显示的某 字符串的定义位置,这就需要在 Jar 文件内的普通文本文件 , 以及 .class 文 件源码中搜索。这些 Jar 文件包含于项目类路径中,这个功能在 RCP 开发中是 经常需要的,而 Eclipse 目前还未提供这个特性。本文通过使用 JDT(Java Development Toolkit)中与 Jar 相关的接口,解决了这个问题,并给出示例及 程序。

Eclipse 中搜索的原理

Eclipse 采用 Lucene 技术开发其搜索内核, 该内核通过对关键字进行索引,快速定位目标文件。例如,Eclipse 会对 JAVA 源文件中的类名、字段名、方法名等进行索引,当程序员使用 Open Type 功能 (快捷键:CTRL+SHIFT+T)进行类搜索时,便可以通过类名这个索引字段进行快 速搜索 ; 在使用 JAVA 搜索(Java Search)功能时,Eclipse 也会让用户指定 具体的索引字段(Search For),如可以选择方法名、类名、字段名、包名、构 造器名等,Eclipse 会根据选择的索引字段与用户的输入,快速搜索到源代码。

Eclipse 在提供 Jar 源代码搜索方面的限制

Eclipse 提供了文 件搜索(File Search)的功能,用来搜索指定范围 ( 项目、工作空间等 ) 内 的文本文件。这个功能并没有根据某些特殊关键字进行索引。因为对于任意字符 串的搜索,是无法找到特定关键字进行索引的。因此为了提高搜索效率, Eclipse 对于任意字符串的搜索范围仅限于用户编写的文本文件,而没有对项目 所依赖的 Jar 文件中的类的源代码进行搜索。因为 Jar 源代码的数量往往数量 庞大,搜索它们将是一个相当费时的操作。但是在很多情况下,程序员有必要进 行类源代码的搜索,通过查看需要的源代码解决一些问题,Eclipse 目前提供的 搜索功能就无法满足这样的需求。

JDT 中 Jar 文件相关的类结构图分析

下面两图展示了 JDT 中与 Jar 文件处理相关的类,从图中,可以清晰 的了解它们的层次、包含和对应关系。

图 1. JDT 中与 Jar 文件相关的 UML 类结构图

图 2. JDT 中与 Jar 文件相关的类结构对应图

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

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

上图描述了各个节点之间的层次、包含和对应关系,了解这些信息, 对文章下一部分的阅读是必要的。Java 项目,Jar 文件,Jar 文件中的包,Jar 文件中的普通文件夹,class 文件和非 class 文件分别对应于 IJavaProject, JarPackageFragmentRoot,JarPackageFragment,JarEntryDirectory, IClassFile 以及 JarEntryFile。IJavaProject 包含了多个 JarPackageFragmentRoot。而每个 JarPackageFragmentRoot 包含多个的 JarPackageFragment、JarEntryDirectory 和 JarEntryFile。类似的, JarPackageFragment 包含多个的 IClassFile 和 JarEntryFile;每个 JarEntryDirectory 包含多个的 JarEntryFile 和 JarEntryDirectory。

Jar 源代码搜索解决方案

本文将用一个例子程序,逐步介绍如何 实现 Jar 源代码的搜索,进一步了解 JDT 提供的 API。解决方案的主要逻辑为 :遍历工作空间下的所有 JAVA 项目,并且逐一获得项目所依赖的 Jar 文件列 表。然后遍历该列表获得每个 Jar 文件中的 class 文件源码和非 class 文件 的文本内容,使用正则表达式进行匹配查找。最后输出结果的类名、文件路径、 匹配的起始位置和匹配的字符串长度等信息。

结合这个逻辑以及 JDT 中 Jar 文件相关的类结构,上

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号