爱听网4G上面可以听的^_^

OpenGrok 0.11 发布,源码搜索引擎
OpenGrok 0.11 发布了,该版本增加 PHP、VB、JavaScript 和独立的 C# 代码分析器;对整个应用的UI进行重构,更新 jQuery 到 1.4.4 版本,兼容 SSL、SSO 和 mod_proxy ,修复了不少 bug。
OpenGrok一个快速、便于使用的源代码搜索与对照引擎。它帮助你搜索,对照,定位你的源代码树。它能够明白各种程序文件格式和版本控制历史记录如 SCCS,RCS,CVS与。OpenGrok是操作系统源文件浏览和搜索的工具。
OpenGrok 的详细介绍:
OpenGrok 的下载地址:
转载请注明:文章转载自 开源中国社区
本文标题:OpenGrok 0.11 发布,源码搜索引擎
本文地址:OpenGrok源码搜索引擎搭建 - 博客频道 - CSDN.NET
就这么Android着
沉溺于Android的世界里不可自拔...
分类:LinuxAndroid
——————————————————————————–
此文章仅作为学习交流所用
转载或引用请务必注明原文地址:
或联系作者:
否则后果自负
——————————————————————————–
1. OpenGrok简介
有些情况下,我们需要在GB级别甚至几十GB级别且随时不断更新的大型代码(比如Android源码)里面搜索阅读源码,那么我们自然而然会有以下一些基本的需求:
能够快速搜索代码
代码可存放于本地/服务器
代码之间可以跳转
显然SourceInsight、ctags、grep等工具在这些场景下就不太适合,于是有了OpenGrok这类代码搜索引擎。
先看看维基百科对OpenGrok的介绍:
OpenGrok is a source code search and cross reference engine. It helps programmers to search, cross-reference and navigate source code trees.
大概的意思是说,OpenGrok是一个快速、便于使用的源代码搜索与对照引擎。它能够帮助我们搜索,对照,定位我们的源代码树。
OpenGrok 应该算是我目前所知道的最好用的代码搜索、浏览工具了。由于OpenGrok是基于数据库的搜索,在代码量巨大的情况下(比如整份Android源码),搜索速度比sourceinsight要快速得多。另外,OpenGrok还是OpenSolaris操作系统源文件浏览和搜索的工具。一直以来,我都是使用OpenGrok来搜索阅读Android系统的源代码。
目前网络上已经有使用OpenGrok对Android源码进行索引的搜索引擎,地址:
OpenGrok官方主页请参照:
闲话少说,下面记录一下OpenGrok的搭建过程。
2. OpenGrok安装
首先附上opengrok和tomcat的下载链接:
opengrok-0.12.1.5.tar.gz 链接: 密码:xysf
apache-tomcat-7.0.40.tar.gz 链接: 密码:fisr
sudo apt-getinstall exuberant-ctags
2.2 安装 JDK
Ubuntu系统环境下JDK的安装可以参考以前的博文 ,OpenGrok 0.12以后的版本,官网宣称已经不支持JDK6,这里可以安装更高版本的,比如JDK7,安装方式是一致的。(不过貌似我用JDK6也是用得好好的…)
2.3 安装Web服务器—-Tomcat
OpenGrok是一个Web系统,因此要共享OpenGrok搜索引擎,需要安装Web服务器,这里使用Tomcat。Tomcat的安装可以直接使用命令安装, 也可以选择手动下载配置。
命令安装方式为:
sudo apt-get install tomcat6
由于后面Opengrok需要配置多个工程,需要修改到tomcat一些相关的参数,为了方便,这里选择手动下载安装包配置安装tomcat的方式。
(1). 首先到( )下载相应的安装包, 比如我下载的是 apache-tomcat-7.0.70.tar.gz
(2). 解压到某一目录下(比如我的是/home/lzr/opengrok-laolu/tomcat), 然后进入Tomcat的bin目录,启动Tomcat服务
cd /home/lzr/opengrok-laolu/tomcat/bin
sudo ./startup.sh
注:startup.sh为启动Tomcat服务脚本,如果需要停止Tomcat服务,则执行同目录下的 shutdown.sh脚本即可。
(3). 检查Tomcat是否安装成功
打开浏览器,访问地址:,如果能够显示以下的欢迎页面说明Tomcat配置成功。
2.4 安装 OpenGrok
(1). 首先到下载相应的安装包, 比如我下载的是 opengrok-0.11.1.tar.gz
(2). 解压opengrok-0.11.1.tar.gz 到某一目录下(比如我的是/home/lzr/opengrok-laolu/opengrok), 然后进入opengrok目录,拷贝lib目录下的source.war文件到tomcat的webapps文件夹中
cd /home/lzr/opengrok-laolu/opengrok/lib
cp source.war /home/lzr/opengrok-laolu/tomcat/webapps/
source.war会自动解压成source目录,里面即为OpenGrok的默认配置参数。
打开浏览器,访问地址:,可以看到OpenGrok的默认搜索页面,由于还没有建立源码索引,此时还不能搜索源码。
(3). OpenGrok开始deploy部署
OpenGrok可执行文件位于bin目录下,执行时带deploy参数即可开始部署
cd path_to_opengrok_bin
# path_to_opengrok_bin指的是opengrok的bin目录
./OpenGrok deploy
(4). OpenGrok建立index索引
deploy之后,就可以开始为源代码建立OpenGrok索引了,这是OpenGrok与源代码之间真正的建立起联系,索引建
cd path_to_opengrok_bin # path_to_opengrok_bin指的是opengrok的bin目录
./OpenGrok index [path_to_src_code] # path_to_src_code指的是需要建立索引的源码路径
建立index的时间比较长,视源码大小而定,比如Android4.4的源码,使用本人的机器建立index大约耗时1小时。
index建立结束后,默认的OpenGrok配置就算完成了,重新访问地址:,便可以发现Opengrok搜索界面右侧,已经出现了Android4.4的源码,这个时候也可以进行搜索了:
比如在framework目录下搜索一下Android的恢复出厂设置API rebootWipeUserData,可以看出搜索结果秒出
如果平时使用过程中只需要搜索一个project的源码,那么,做完以上操作就可以了,接下来的可以不看。
3. OpenGrok多项目索引配置
3.1 OpenGrok默认安装的缺陷
按照以上默认的OpenGrok安装方法,会存在一些缺陷,比如:
OpenGrok只能索引一个project,无法同时索引多个project
project名称默认指定为”source”,不够个性化
index过程中会生成好几个数据目录,比如data, log, etc…, 而且这些目录居然是存放在源码目录下的,与源码目录混淆(而且个人感觉这样不好,破坏了原来相对比较独立的源码目录)
由于我在平时的学习开发过程中,经常需要接触不同的Android源代码,比如RK3288的Android4.4和Android5.1源代码,因此有索引多个project的需求。
3.2 OpenGrok多项目索安装配置
如果需要使用OpenGrok配置索引多个project, 就需要对OpenGrok进行一定的定制修改了。发现网上的教程大多是鱼龙混杂,试了几个都是不靠谱的,遇到了好些问题,折腾了好几天,这才搞定。之所以写这篇博文,其实也纯粹是为了记录OpenGrok多项目索引配置安装方法!
先上一下效果图, OpenGrok同时配置了两个project,一个是rk3288 android4.4源码,另外一个是android5.1源码,两个project是独立的,因此在OpenGrok使用过程互相不冲突。并且,两个project index过程中生成的数据是放在指定的目录下的,与源码目录隔离开来!
下面介绍一下多项目索引配置方法:
(1). Android源码目录:
/home/lzr/android/source/firefly-rk3288/firefly-rk3288-kitkat
(RK3288 Android4.4源码)
/home/lzr/android/source/firefly-rk3288/firefly-rk3288-lollipop (RK3288 Android5.1源码)
(2) Opengrok 索引过程生成的数据目录放到指定目录,与源码隔离开来
/home/lzr/opengrok-laolu/source/firefly-rk3288/firefly-rk3288-kitkat
(Android4.4索引数据存放目录)
/home/lzr/opengrok-laolu/source/firefly-rk3288//firefly-rk3288-lollipop (Android5.1索引数据存放目录)
(3) 修改OpenGrok脚本
前面说到,在默认的OpenGrok 脚本中,不支持除了source以外的webapp名字。因此,需要修改一下这个脚本以增加对其他的webapp name的支持。
OpenGrok增加一个新的环境变量OPENGROK_WEBAPP_NAME。如果没有在外部定义,则还是使用默认的 “source”
OPENGROK_INSTANCE_BASE=”${OPENGROK_INSTANCE_BASE:-/var/opengrok}”
+++ OPENGROK_WEBAPP_NAME="${OPENGROK_WEBAPP_NAME:-source}"
LOGGER_CONFIG_FILE=”logging.properties”
在启动 Java -jar opengrok.jar的时候加入 -w参数
StdInvocation()
${DO} ${JAVA} ${JAVA_OPTS} ${PROPERTIES}
${LOGGER_PROPERTIES}
${MAX_INDEXED_WORDS} ${SKIN} ${LEADING_WILDCARD}
${READ_XML_CONF}
-W ${XML_CONFIGURATION}
${WEBAPP_CONFIG}
-s ${SRC_ROOT} -d ${DATA_ROOT}
+++ -w ${OPENGROK_WEBAPP_NAME}
(4). 为不同的project建立index (重点)
Android4.4 Kitkat:
export OPENGROK_INSTANCE_BASE="/home/lzr/opengrok-laolu/source/firefly-rk3288/firefly-rk3288-kitkat" #这是生成源码数据库文件的路径,非源码路径
export OPENGROK_WEBAPP_NAME="firefly-rk3288-kitkat" #自定义webapp name
export OPENGROK_TOMCAT_BASE="/home/lzr/opengrok-laolu/apache-tomcat-7.0.40" #改成自己的tomcat路径
/home/lzr/opengrok-laolu/opengrok/bin/OpenGrok deploy
#不要加sudo,否则环境变量找不到
/home/lzr/opengrok-laolu/opengrok/bin/OpenGrok
index /home/lzr/android/source/firefly-rk3288/firefly-rk3288-kitkat #不要加sudo,否则环境变量找不到
Android5.1 Lollipop:
export OPENGROK_INSTANCE_BASE="/home/lzr/opengrok-laolu/source/firefly-rk3288/firefly-rk3288-lollipop"
export OPENGROK_WEBAPP_NAME="firefly-rk3288-lollipop" #自定义webapp name
/home/lzr/opengrok-laolu/opengrok/bin/OpenGrok deploy
/home/lzr/opengrok-laolu/opengrok/bin/OpenGrok
index /home/lzr/android/source/firefly-rk3288/firefly-rk3288-lollipop
建立完各个projects的index, 工作便完成90%以上了
(5) source.war分别重命名为firefly-rk3288-kitkat.war, firefly-rk3288-lollipop.war,拷贝至tomcat webapps目录
cd /home/lzr/opengrok-laolu/
cp opengrok/lib/source.war tomcat/webapps/firefly-rk3288-kitkat.war
cp opengrok/lib/source.war tomcat/webapps/firefly-rk3288-lollipop.war
于是,会自动生成firefly-rk3288-kitkat,firefly-rk3288-lollipop两个目录
修改每个project目录WEB-INF/web.xml
原始的web.xml里面,param-name为”CONFIGURATION”的配置项里,param-value的值为
“/var/opengrok/etc/configuration.xm”, 如下所示:
&param-name&CONFIGURATION&/param-name&
&param-value&/var/opengrok/etc/configuration.xml&/param-value&
可以看到,OpenGrok默认寻找的index配置路径为/var/opengrok,因此,需要修改为我们的指定index路径:
也就是说,需要将param-value里面的值修改为/home/lzr/opengrok-laolu/source/firefly-rk3288/firefly-rk3288-kitkat/etc/configuration.xml
(lollipop同理进行修改)
重启Tomcat
/home/lzr/opengrok-laolu/tomcat/bin
sudo ./shutdown.sh
sudo ./startup.sh
大功告成,OpenGrok安装搭建结束!
Android4.4 Opengrok搜索:
Android5.1 Opengrok搜索:
剩下一些事儿
设置Tomcat开机自启动
从前面的介结可以知道,tomcat服务是通过startup.sh脚本启动的,每次重启,都需要重新执行startup.sh脚本才能使用tomcat服务,比较繁琐。可以需要设置一下Tomcat开机自启动。
参考文章:
luzhenrong45
排名:千里之外
(31)(16)(3)(3)(2)(1)(3)(2)(5)android(105)
from :&http://blog.csdn.net/michaelpp/article/details/9258563
使用OpenGrok的Android系统源码搜索引擎,搜索速度简直太快速了!:
另外,OpenGrok的也是可以在本地计算机中安装配置的,主要是安装Tomcat服务器和OpenGrok模块(Ubuntu 13):
1. 安装Tomcat:
&&& sudo apt-get install tomcat7
&&& 安装完之后在浏览器中输出 http://localhost:8080 如果能显示tomcat页面则表示tomcat已经安装并启动成功。
2. 安装OpenGrok:
&&& 官方安装教程:
&&& 下载OpenGrok:http://opengrok.github.io/OpenGrok/
&&& 解压至路径,比如:/home/xxx/dev/tools/opengrok-0.11.1
&&& 把其中source/source.war文件复制到apache-tomcat-7.0.42/webapps/opengrok.war
&&& 在浏览器地址栏里输入:http://localhost:8080/opengrok/ (这一步会生成apache-tomcat-7.0.42/webapps/opengrok/目录和相关配置文件)
&&& 修改 ./bin/OpenGrok文件,这其实是一个sh脚本,将其中一行改为:
&&& OPENGROK_INSTANCE_BASE=&${OPENGROK_INSTANCE_BASE:-../myopengrok/}& (这是你过后生成index的路径)
&&& 执行以下命令
&&& cd /home/xxx/dev/tools/opengrok-0.11.1/
&&& ./OpenGrok index /xxxxxxxx/JellyBean/&& (生成JellyBean的index)
&&& 修改配置文件apache-tomcat-7.0.42/webapps/opengrok/WEB-INF/web.xml,如下:
& &context-param&
&&& &param-name&CONFIGURATION&/param-name&
&&& &param-value&/home/xxx/dev/tools/opengrok-0.11.1/myopengrok/etc/configuration.xml&/param-value&
&&& &description&Full path to the configuration file where OpenGrok can read it's configuration&/description&
& &/context-param&
&&& 刷新浏览器,可以看到JellyBean源码可以搜索出来了。
&&& 配置源码让搜索页面中可以下载源码源文件:把JellyBean/目录里的所有文件和目录复制到opengrok-0.11.1/myopengrok/data/raw/目录下,即可。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:367478次
积分:4771
积分:4771
排名:第5155名
原创:80篇
转载:326篇
评论:66条
(5)(19)(6)(15)(8)(11)(5)(11)(7)(2)(1)(3)(7)(10)(1)(3)(3)(3)(11)(13)(10)(10)(7)(10)(13)(4)(3)(10)(2)(18)(8)(18)(6)(23)(32)(17)(28)(4)(30)(16)相关文章推荐:
一个完美快速的Android代码在线查看网站,使用opengrok源代码搜索引擎
AndroidXref - Android Source Code Cross Reference.
This is an attempt to make Android source code easily available
for reference. This site uses opengrok to create a complete index of Android
4.0 - Ice Cream Sandwich - source code. It also includes the source
of the common branch of the kernel 3.0...
Android平台
阅读(1) 回复(0)
其他文章推荐
盛拓传媒:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
ITPUB推荐文章解答你所有技术难题1900人阅读
Android学习(14)
& & & OpenGrok一个快速、便于使用的源代码搜索与对照引擎。它帮助你搜索,对照,定位你的源代码树。它能够明白各种程序文件格式和版本控制历史记录。借助 Eclipse 以及本地源码可以比较方便地分析 Android 源码,但是对于 Native 代码的调用就无法通过 Eclipse 的快速定位来查看相应的 Native 源码了,而且 Android 源码中对 Native库的加载一般不是通过在
Static 块里调用 System.loadLibrary 来加载库文件并完成 Native 函数注册的,所以定位这类代码比较困难。一个可以采取的方法是使用 UltraEdit 等工具来在文件中搜索特定的字符串,如函数名,对于 JNI 函数来说,一般存在于/frameworks/base/core/jni目录下。在文件数目较多的情况下,使用这种方法搜索起来还是比较忙的,所以这里介绍下AndroidXRef。
& & & AndroidXRef()项目提供 Android 源码的交叉索引,可以快速的搜索符合特定条件的
Android 源代码,后台是基于 OpenGrok 引擎,OpenGrok 主要用来在源码中搜索、交叉索引以及进行导航。AndroidXRef 提供了完整的 Android 源码的索引,包括内核源码。在 AndroidXRef 主页的右侧显示了可用的源码版本,如图 1 所示,点击相应的源码版本链接就可以进入对应的源码分支,如图 2 所示。
图 2 右侧提供在特定目录下搜索,例如在分析 Framework 时,可以选择 frameworks 目录,这样可以减少搜索范围,能够更加精确地定位到需要的源代码。左侧则是提供了一些搜索的条件,其意义如下(在指定的 Project(s)下):
Full Search: 进行全文搜索,会匹配所有的单词、字符串、标识符以及数字等,例如在frameworks 下通过 Full Search 搜索”activity”,则会显示所有包含 activity 字符(忽略大小写)的结果,即使是注释也会显示出来,如图 3 所示。点击绿色背景的链接会打开包含activity 字符串文件所在的文件夹;点击左侧文件名如 native_activity.cpp 链接会打开包含activity 字符串文件;点击右侧每一行的搜索结果链接同样会打开相应的文件内容;
图3 Full Search 搜索
Definition:搜索符号定义相关的代码,例如搜索 startActivityIfNeeded 函数的定义,显示结果如图 4 所示从搜索结果可以看到,右侧绿色字体表明了是位于 Activity 类中的 方法;
图 4 Definition 搜索
Symbol:搜索符号,例如可以搜索类中的成员变量等,图 5 显示了通过 Symbol 搜索WINDOW_HIERARCHY_TAG 的结果;
图 5 Symbol 搜索
File Path:搜索源码文件名中包含给定字符串的文件,例如想要搜索文件名包含 Activity
的源码文件,则可以在 File Path 中填入 Activity 进行搜索,结果如所示;
图 6 File Path 搜索
当然可以通过组合的方式使用上述提到的搜索方法,例如想在 Activity.java 文件中搜索finish 函数的定义,则可以在 Definition 中填入”finish”,在 File Path 中填入”Activity.java”,搜索
结果如图 7 所示。
图 7 组合搜索
因为 AndroidXRef 使用的是 OpenGrok 引擎,因此还支持一些其他的搜索方式:
+ 表示包含此字符串,- 表示包含此字符串。例如在 Full Search 中搜索包含 activity字符串但是不包含 service 字符串的源文件,可以填入+”activity” -“service”(去掉双引号同样可以,但是对于不可分割的词且两者间包含空格则双引号不可去,此规则适用于所有的搜索规则,例如 Full Search “final String”,双引号去除表示或的关系,这个与 Google 的搜索规则是一样的);
布尔操作,可以使用 AND(&&),”+”,OR(||),NOT(!)以及”-”(AND 等必须全部大写),例如搜索既包含 final 又包含 String 的源码文件,可以 Full Search 中填入”final” AND “String”;
使用通配符,”?”代表一个字符,”*”代表多个字符(“?”和”*”不可用于字符串的开头);
模糊查询,可以使用”~”搜索包含与提供的字符串拼写类似的源码文件等内容;
转义字符,OpenGrok 中使用到的特殊字符包括+ - && || ! ( ) { } [ ] ^ & ~ * ? : \ ,因此如果需要搜索的内容中包含这些特殊字符,可以使用\进行转义,例如搜索(1+1):2,可以这样\(1\+1\)\:2
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:48687次
积分:1275
积分:1275
排名:千里之外
原创:78篇
转载:11篇
(4)(20)(26)(1)(1)(2)(2)(2)(2)(1)(2)(1)(1)(3)(1)(15)

我要回帖

更多关于 爱听听书 的文章

 

随机推荐