OpenGrok是一个非常好用的代码浏览和查询工具。也可以用来管理多个不同的项目。但是由于不能按照项目分别index,在管理多个大型项目时会导致索引很慢(索引一个AOSP的完整项目需要2~3个小时)。这时,自然而然能想到的方法是将多个项目分别部署到不同的webapp中。下面简单记录下具体步骤:
创建新的WEBAPP
首先复制一个现有的webapp(一般是source.war),命名成项目的webapp
mv [path_to_opengrok]/source.war [path_to_tomcat]/webapps/[prj_name].war
然后修改 WEB-INF/web.xml 中的 CONFIGURATION 和 ConfigAddress 字段。
Extract 文件
cd [path_to_tomcat]/webapps;
unzip [prj_name].war WEB_INF/web.xml
- 将CONFIGURATION中的默认地址 /var/opengrok/etc/configuration.xml 修改成 /[DATA_PATH]/[prj_name]/etc/configuration.xml
- 将ConfigAddress中默认的端口 2424 替换成其他端口(2425,2426…)
保存后写回war
zip -u [prj_name].war WEB-INF/web.xml;
rm -rf WEB-INF;
增加对webapp名字的支持
在默认的<
我们增加一个新的环境变量,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} \
……
-s ${SRC_ROOT} -d ${DATA_ROOT} \
+++ -w ${OPENGROK_WEBAPP_NAME} \
“${@}”
}
索引项目
当需要索引非默认项目时,先设置 OPENGROK_INSTANCE_BASE 和 WEBAPP_CONFIG_CFGADDR后做索引
export OPENGROK_INSTANCE_BASE=/[DATA_PATH]/[prj_name];
export WEBAPP_CONFIG_CFGADDR=localhost:[port_for_config] ; (2425, 2426….)
export OPENGROK_WEBAPP_NAME=[prj_nam,e]
./Opengrok index [path_to_source] ;
Trouble-shoot
对于大型项目来说,索引过程通常很久,需要2~3个小时。但有时,也会出现索引了4,5个小时也没有完成的情况。这个时候,我们可以到 /[DATA_PATH]/[prj_name]/log 下查看下输出的log,确保索引过程仍在正常进行。如果发现过程已经停滞了一段时间,很有可能是ctags出现了问题,可以尝试将当前的ctags进程kill掉(可能会导致某些文件的索引丢失),让opengrok继续索引。
增加JAVA HEAP. JAVA_OPT=”${JAVA_OPTS:–Xmx4096m}”