ubuntu16.04下搭建opengrok阅读android源码
写在前面
最近准备了解,学习一下安卓的源码。但是使用Android Studio导入源码,使用过朋友的都知道那叫一个慢,这个时候就需要一个自己搭一个本地的opengrok服务器来解除我们的痛处。
openGrok的作用:
- 通过浏览器查看代码
- 快速查找
- 每个java/cpp 文件的方法/成员变量列表显示
…
更多的功能用的时候再一一体会
系统环境
- 系统
ubuntu16.04 - 环境软件
open jdk 1.8以上
安装步骤
1. 安装universal-ctags
因为新版本的OpenGrok对exuberant-ctags的支持不太好,所以官方建议安装universal-ctags。
universal-ctags的下载地址:
https://github.com/universal-ctags/ctags
具体的命令如下:
sudo apt-get update
# 卸载 exuberant-ctags
sudo apt-get remove --purge exuberant-ctags
# 安装依赖软件 autoconf
sudo apt-get install autoconf
mkdir ~/soft/universal-ctags
cd ~/soft/universal-ctags
# 下载universal-ctags
git clone https://github.com/universal-ctags/ctags
cd ctags
./autogen.sh
# 我的安装路径。就使用这个,后面索引就是这个路径(/home/zjs/soft/universal-ctags/bin)
./configure --prefix=/home/zjs/soft/universal-ctags
make -j8
# 安装(这里会将软件安装到~/soft/universal-ctags/bin目录下,这个路径需要在后面写入配置文件中)
sudo make install
2. 安装tomcat8
- 安装
sudo apt-get install tomcat8
- 启动服务
sudo /etc/init.d/tomcat8 start
- tomcat常用的三条命令
sudo /etc/init.d/tomcat8 restart
sudo /etc/init.d/tomcat8 start
sudo /etc/init.d/tomcat8 stop
- 测试是否安装成功
在浏览器输入http://localhost:8080/看到:
3. 下载opengrok
openGrok的下载地址
https://github.com/oracle/opengrok/releases/
下载后缀为.tar.gz的文件即可,我这里下载的是1.3.0版本。下载后,将它解压到你想放置的位置。我将它放在了 ~/soft/OpenGrok/ 下。
官网说要安装tools下面的opengrok-tools.tar.gz,这个可以不安装,不是必须的。
解压后在软件根目录新建三个文件夹。
- src 存放代码(或者是代码的映射)
- data 存放索引
- etc 存放配置文件
mv ~/soft/OpenGrok/opengrok-1.3.0 ~/soft/OpenGrok/opengrok
cd ~/soft/OpenGrok/opengrok
mkdir src data etc
因为我的代码是之前已经下载好的,所以这里直接建一个软链接将代码和src目录关联起来
cd ~/soft/OpenGrok/opengrok/src
ln -s ~/code/src/ android #(~/code/src/ : 需要链接的源码路径 android : src下的链接 )
复制source.war到tomcat中
# 不需要解压缩,因为会自己解压
sudo cp ~/soft/OpenGrok/opengrok/lib/source.war /var/lib/tomcat8/webapps/
修改 /var/lib/tomcat8/webapps/source/WEB-INF/web.xml 中 configuration.xml 的路径
gedit /var/lib/tomcat8/webapps/source/WEB-INF/web.xml
<context-param>
<description>Full path to the configuration file where OpenGrok can read its configuration</description>
<param-name>CONFIGURATION</param-name>
<param-value>/home/zjs/soft/OpenGrok/opengrok/etc/configuration.xml</param-value> //自己创建的etc路径,这里最好写绝对路径
</context-param>
4. 创建索引
新建一个openGrok.sh脚本,输入下面的命令
java \
-Djava.util.logging.config.file=/home/zjs/soft/OpenGrok/opengrok/doc/logging.properties \
-Xmx6g -jar /home/zjs/soft/OpenGrok/opengrok/lib/opengrok.jar \
-c /home/zjs/soft/universal-ctags/bin/ctags \
-s /home/zjs/soft/OpenGrok/opengrok/src -d /home/zjs/soft/OpenGrok/opengrok/data -H -P -S -G \
-W /home/zjs/soft/OpenGrok/opengrok/etc/configuration.xml -U http://localhost:8080/source \
-T 2 \
-m 1024
修改脚本的权限
sudo chmod a+x openGrok.sh
执行脚本
./openGrok.sh
等待脚本执行完成(这个过程有点漫长,想快一点可以在脚本里面将-T这一行去掉,使用cpu可以支持的最大线程来生成索引。只是这样做会让你的电脑暂时有点卡).
重启Tomcat服务器
sudo /etc/init.d/tomcat8 restart
在浏览器输入 http://localhost:8080/source/,可以看到如下的效果那表示你就成功了。
Project的位置是显示你的安卓源码的目录名
注意事项
- 命令的用法可以通过执行下面的命令,获取使用帮助
java -jar /home/zjs/soft/OpenGrok/opengrok/lib/opengrok.jar -h
- src中使用软链接的,在-s后面的源码路径必须要将软链接的路径写全。即如果你在src中创建了一个文件夹,并将代码指向了它。那么你的路径也必须要包含该文件夹,而不能只是上一级目录。
举例:
创建了一个路径/home/zjs/soft/opengrok/opengrok/src/code1 并在code1上创建一个软链接指向代码。
这个时候必须写/home/zjs/soft/opengrok/opengrok/src/code1 而不能写/home/zjs/soft/opengrok/opengrok/src ,否则虽然执行不会报错,但是索引不能生成。 - 生成索引的时候如果出现内存溢出,情按照上面的第4部,修改-Xmx6g的值,根据你的服务器内存大小调整。
- 如果要实现自动更新索引,需要安装opengrok提供的工具包,具体流程见官网的流程。(step4) https://github.com/oracle/opengrok/wiki/How-to-setup-OpenGrok