搭建大型源码阅读环境——使用 OpenGrok

</description><context-param> <description>Full path to the configuration file where OpenGrok can read its configuration</description> <param-name>CONFIGURATION</param-name> <param-value>D:/Programs/opengrok-0.13-rc4/data/configuration.xml</param-value></context-param>
  • 配置 source root。

    可以让 OpenGrok 认为 source root 下的每个子文件夹是一个项目,所以我们利用这个特性来配置和阅读多个项目源码就好了。

    我的做法是在 OpenGrok 下创建了一个子目录 D:\Programs\opengrok-0.13-rc4\projects,然后将需要阅读的源码使用符号链接的方式链接到这个目录里:

    cd /d D:\Programs\opengrok-0.13-rc4\projectsmklink /J android D:\sources\android_5.1mklink /J openjdk7 D:\sources\openjdk7

    这样就有一个叫 android 的工程,它实际对应 D:\sources\android_5.1 下的源码,一个叫 openjdk7 的工程,它实际对应 D:\sources\openjdk7 下的源码。

  • 建立索引。

    使用 opengrok.jar 调用 ctags 来为源码建立索引。命令行:

    java -jar /path/to/opengrok.jar -P -S -v -s /path/to/source/root -d /path/to/data/root -W /path/to/configuration.xml

    -P 表示为 source root 目录下的每个一级子目录生成一个工程。

    -S 表示搜索并添加 “external” source repositories。

    -v 表示打印操作的进度信息。

    -s 表示指定 source root。

    -d 表示指定 data root。

    -W 表示指定将配置写到该文件。

    还有更多配置选项可以使用 java -jar /path/to/opengrok.jar 查看。

    比如我使用的完整命令行:

    java -jar D:\Programs\opengrok-0.13-rc4\lib\opengrok.jar -P -S -v -s D:\Programs\opengrok-0.13-rc4\projects -d D:\Programs\opengrok-0.13-rc4\data -W D:\Programs\opengrok-0.13-rc4\data\configuration.xml

    每次需要建立或更新索引的时候敲这么长一个命令当然很不爽,使用 doskey 或者 Cmder 里的 alias 命令将其 alias 为 opengrok-index 命令会省力不少,再不济把这命令存成个 bat 文件也行啊。

    为大型源码建立索引可能需要漫长的时间,这时候可以去干点别的事了。

  • 启动 Tomcat,愉快地 RTFSC。

    D:\Programs\apache-tomcat-8.5.8\bin\catalina.bat start

    用你最爱的浏览器打开 http://localhost:8080/source/,然后就能愉快地跟 OpenGrok 玩耍了。

    当新添加了项目,或者现有项目有源码更新时,再次执行上一步的命令,就能增量更新索引了。

  • 配置多项目

    我曾经为如何在 OpenGrok 里配置多项目苦恼了好久——一开始我是把 Android 源码的根目录当作 source root 的,可想而知 OpenGrok 把 Android 分成了好多个子项目,而这时我也没法再添加新的工程了。

    后来才发现建一个专用的 source root,然后把各种项目源码根目录软链接过来,让 OpenGrok 为 source root 下的每个 symbol 一级子目录建立一个项目才是正确的使用方法。

    Windows 下建立软链接的方法是使用 mklink /J android D:\sources\android_5.1,Mac OS X 和 Linux 下可以使用 ln -s /path/to/source project_name

    折腾狂魔

    在 Vim 里使用

    没错,还有人做了支持在 Vim 里使用 OpenGrok 的插件,如果你是 Vim 控+折腾狂魔,可以一试,这里仅给出插件地址: