Ubuntu服务器搭建OpenGrok,阅读Android源码

OpenGrok是一个很好的阅读Android开源框架,通过在Linux服务器上搭建该框架,可以做到一处部署源码,多处阅读源码。

下文主要介绍在Ubuntu中搭建OpenGrok的具体步骤。

1、安装JDK环境

这块无需介绍,网上有很多的参考方法

2、安装Tomcat

参考Tomcat官网 https://tomcat.apache.org/

3、安装和配置ctags

这个很重要,它会直接决定OpenGrok的索引是否成功

(1)查看exuberant-ctags版本信息: dpkg -l exuberant-ctags

如果是5.9~svn20110310-11,则说明是比较老的版本,需要更新

先移除老的版本: sudo apt remove exuberant-ctags -y

(2)安装新的ctags

sudo apt install autoconf

cd /tmp

git clone https://github.com/universal-ctags/ctags

cd ctags

./autogen.sh

./configure --prefix=/opt/software/universal-ctags

make -j8 sudo make install

建立新编译安装的universal-ctags软链接:

sudo ln -s /opt/software/universal-ctags/bin/ctags /usr/bin/ctags

(3)配置ctags

set tags=tags;

set autochdir

cd /tmp

git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime

sh ~/.vim_runtime/install_awesome_vimrc.sh

4、安装OpenGrok

(1)下载和解压OpenGrok: https://github.com/oracle/opengrok/releases/tag/1.1-rc36

在解压的目录下新建data和source 目录(这两个目录可以随意命名,后面配置成相应目录名的就可以了),然后将需要搜索的代码拷贝到source目录下(当然也可以不用拷贝,直接建立软链接即可,我个人比较倾向于建立软链接的方法,因为Android的源码那么庞大,如果用拷贝的方式会比较麻烦和冗余)

(2)将opengrok lib目录下的source.war文件拷贝到tomcat webapps目录下,然后重新运行tomcat 的startup.bat脚本;

这时会生成一个source文件夹,编辑source\WEB-INF\web.xml

最后验证是否配置好了,重新运行tomcat 的startup.bat脚本,打开浏览器,在地址栏输入:http://localhost:8080/source/

如果能够显示下述界面,就说明配置成功了

(3)建立源码的索引

将需要被引入的代码在opengrok-1.1-rc36/source中建立软链接,然后创建索引

sudo java -Djava.util.logging.config.file=/home/share/data/tools/OpenGrok2/opengrok-1.1-rc36/doc/logging.properties \
    -jar /home/share/data/tools/OpenGrok2/opengrok-1.1-rc36/lib/opengrok.jar \
    -c /usr/bin/ctags \
    -P -S -v -s /home/share/data/tools/OpenGrok2/opengrok-1.1-rc36/source/ -d /home/share/data/tools/OpenGrok2/opengrok-1.1-rc36/data -T 1 -H -P -S -G \
    -W /home/share/data/tools/OpenGrok2/opengrok-1.1-rc36/data/configuration.xml

创建索引会比较慢,过程中如下如下报错,可忽略

23:48:36 WARNING: Error from ctags: ctags: Warning: "--file-scope" option is obsolete; use "--extras=+F" instead
23:48:36 WARNING: Error from ctags: ctags: Non-alphanumeric char is used in kind name: 'case classes' in "--regex-scala" option
23:48:36 WARNING: Unexpected end of file!
23:48:36 WARNING: ctags exited with code: 1

耐心等待,如果代码比较多,有可能需要几天时间。

Good Luck To You!!!