OpenGrok源码搜索引擎搭建

声明

版权声明:博文为原创内容,可以转载或引用,但须在明显位置标明原文作者和出处,未经同意不得擅自修改本文内容!博客地址:http://blog.csdn.net/luzhenrong45

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源码进行索引的搜索引擎,地址:http://androidxref.com 
OpenGrok官方主页请参照:http://opengrok.github.io/OpenGrok/

闲话少说,下面记录一下OpenGrok的搭建过程。

2. OpenGrok安装

首先附上opengrok和tomcat的下载链接:

opengrok-0.12.1.5.tar.gz 链接:http://pan.baidu.com/s/1qXGE1pa 密码:xysf 
apache-tomcat-7.0.40.tar.gz 链接:http://pan.baidu.com/s/1pLuCcaR 密码:fisr

2.1 安装 exuberant-ctags


sudo apt-getinstall exuberant-ctags 

2.2 安装 JDK

Ubuntu系统环境下JDK的安装可以参考以前的博文 Linux下安装配置JDK6,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). 首先到Tomcat官网(http://tomcat.apache.org/ )下载相应的安装包, 比如我下载的是 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是否安装成功 
打开浏览器,访问地址:http://localhost:8080,如果能够显示以下的欢迎页面说明Tomcat配置成功。 
3

2.4 安装 OpenGrok

(1). 首先到OpenGrok官网下载相应的安装包, 比如我下载的是 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的默认配置参数。 
打开浏览器,访问地址:http://localhost:8080/source/,可以看到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配置就算完成了,重新访问地址:http://localhost:8080/source/,便可以发现Opengrok搜索界面右侧,已经出现了Android4.4的源码,这个时候也可以进行搜索了:

4

比如在framework目录下搜索一下Android的恢复出厂设置API rebootWipeUserData,可以看出搜索结果秒出 
2 
如果平时使用过程中只需要搜索一个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

下面介绍一下多项目索引配置方法:

(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源码) 

src_projects


(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索引数据存放目录) 

opengrok_projects


(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两个目录


(6) 修改每个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同理进行修改)


(7) 重启Tomcat

/home/lzr/opengrok-laolu/tomcat/bin
sudo ./shutdown.sh
sudo ./startup.sh
  • 1
  • 2
  • 3

大功告成,OpenGrok安装搭建结束!

Android4.4 Opengrok搜索: http://localhost:8080/firefly-rk3288-kitkat/ 
Android5.1 Opengrok搜索: http://localhost:8080/firefly-rk3288-lollipop/

剩下一些事儿

  1. 设置Tomcat开机自启动 
    从前面的介结可以知道,tomcat服务是通过startup.sh脚本启动的,每次重启,都需要重新执行startup.sh脚本才能使用tomcat服务,比较繁琐。可以需要设置一下Tomcat开机自启动。 
    参考Linux下Tomcat开机自动启动

参考文章:

工具之OpenGrok的搭建方法

OpenGrok中多项目配置方法

Linux下Tomcat开机自动启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值