OpenGrok 环境搭建踩坑。
不知道 OpenGrok 自己放 Google ,为何选它不选 Source Insight 或者 Source Navigator 也请自己查。
安装时,服务器上已有 JDK 和 Tomcat,这部分直接跳过。
Ctags
Exuberant V.S. Universal
OpenGrok 官方 Requirements
- Latest Java 1.8
- A servlet container like GlassFish or Tomcat (8.x or later) also running with Java at least 1.8
- Exuberant Ctags
前两个就不说。原打算装 Exuberant Ctags(以下简称EC) ,结果看到知乎上大家讨论,说Universal Ctags (以下简称UC)更好。
官网在此 http://ctags.io/
简单说,就是 EC 托管在 SourceForge 不再活跃了,UC 作为 Fork 接过接力棒,继续开发。
autogen.sh runs autoreconf internally. If you use a (binary oriented) GNU/Linux distribution, autoreconf may be part of the autoconf package. In addition you may have to install automake and/or pkg-config, too.
源码编译安装
官方提醒 autogen.sh 脚本里面调用了 autoreconf
,先安装 automake
|
|
然后跟着官方走:
|
|
报错,几个宏找不到。用这几个错误搜索,有人说这个包那个包,最后发现是 pkg-config
解决掉:
|
|
是不是很眼熟?是的,一开始那段提醒里就已经提到,因为 写着 or ,没当回事。安装完就不再报错了。
|
|
UC 安装完毕。
OpenGrok
初次索引
OpenGrok 分两个主要部分:
- index 生成工具
- 搜索查询的 webapp
下载之后,解压目录主要都是 1) ,llib/ 目录下的 source.war
则是 2)。
war 包直接放到 Tomcat 的 webapp 目录即可 通过 http://path/to/tomcat/source/
访问,只不过现在没有项目。
index 工具部分,主要是 lib/ 下的 opengrok.jar
和 bin/ 下的 OpenGrok
脚本。
网上大家讨论,往往要配置很多环境变量,调用 opengrok.jar 时还要给一堆参数。
我懒,直接来最简单的版本:
- 环境变量只配置
OPENGROK_INSTANCE_BASE
,设为 OpenGrok 根目录,其他相关目录,你没有配置会自动在根目录下生成。然后把OPENGROK_INSTANCE_BASE/bin/
加入 PATH (为了全局执行 OpenGrok )。 - 上述配置生效后(source 或者 重新登录 ssh),将项目源码放到
OPENGROK_INSTANCE_BASE/src/
下 (我是直接ln
过去,当然你真放也行),然后sudo -E OpenGrok index
。
尽可能使用默认配置,除了上面半开玩笑的懒,另一方面原因是怕以后会忘掉自己怎么配置。默认配置有它的道理,刚接触拍脑袋决定很难比默认好,集中放在根目录下也方便管理。以后有新需要,再改不晚。
关闭历史
第一次生成索引,非常顺利。
一段时间之后,代码有更新,重新生成索引,结果一堆报错,几乎每条都是相同内容:
|
|
原因清楚明白:OG 试图生成文件历史,对每个文件都执行 svn log
。可是没有账号密码。
当然没有,我都没给它。
我后来查到,只要定义两个宏的值,就可以告诉它账号密码:
|
|
其实你去看 OpenGrok 托管在 github 的 源码 ,看src/org/opensolaris/opengrok/history/SubversionRepository.java ,源码里写得很清楚。
不过因为某些原因,我暂时不想生成历史,怎么关闭历史索引功能呢?我找到了一个讨论:https://github.com/OpenGrok/OpenGrok/issues/32
简单说,只有加了 -S
和 -H
参数,才会生成历史;这点去看 src/org/opensolaris/opengrok/index/Indexer.java 能得到证实。
然而,我并没有加任何参数 ?!
一研究,是这样,参数是传给 oepngrok.jar 的。OpenGrok 脚本默认有添加一系列参数。
那就简单了,直接在 /path/to/OpenGrok/bin/OpenGrok 脚本里搜索,将 -S
和 -H
去掉。很简单,就不贴出来了。
本文为本人原创,采用知识共享 “署名-非商业性使用-相同方式共享” 4.0 (CC BY-NC-SA 4.0)”许可协议进行许可。
本作品可自由复制、传播及基于本作品进行演绎创作。如有以上需要,请留言告知,在文章开头明显位置加上署名(Jayce Chant)、原链接及许可协议信息,并明确指出修改(如有),不得用于商业用途。谢谢合作。
详情请点击查看协议具体内容。