- OpenGrok簡介
有些情況下,我們需要在GB級別甚至幾十GB級別且隨時不斷更新的大型代碼(比如Android源碼)裏面搜索閱讀源碼,那麼我們自然而然會有以下一些基本的需求:
能夠快速搜索代碼
代碼可存放於本地/服務器
代碼之間可以跳轉
跨平臺
易於維護
…
顯然SourceInsight、ctags、grep等工具在這些場景下就不太適合,於是有了OpenGrok這類代碼搜索引擎。
先看看維基百科對OpenGrok的介紹:
OpenGrok is a source code search and cross reference engine. It helps programmers to search, cross-reference and navigate source code trees. —— [ 維基百科]
大概的意思是說,OpenGrok是一個快速、便於使用的源代碼搜索與對照引擎。它能夠幫助我們搜索,對照,定位我們的源代碼樹。
OpenGrok 應該算是我目前所知道的最好用的代碼搜索、瀏覽工具了。由於OpenGrok是基於數據庫的搜索,在代碼量巨大的情況下(比如整份Android源碼),搜索速度比sourceinsight要快速得多。另外,OpenGrok還是OpenSolaris操作系統源文件瀏覽和搜索的工具。一直以來,我都是使用OpenGrok來搜索閱讀Android系統的源代碼。
目前網絡上已經有使用OpenGrok對Android源碼進行索引的搜索引擎,地址:http://androidxref.com
OpenGrok官方主頁請參照:http://opengrok.github.io/OpenGrok/
下面記錄一下OpenGrok的搭建過程。
-
Java環境配置
1.通過 sudo yum install java 或者 sudo apt-get install java安裝java 1.8.x版本(已有java1.8版本可跳過該步驟) -
查看設備Java版本號,確保$ java -version 爲 java version “1.8.x”及以上版本
java -version//命令可以查看版本 -
Tomcat環境配置
$ sudo apt-get install exuberant-ctags tomcat8
$ sudo /etc/init.d/tomcat8 restart
瀏覽器中打開http://localhost:8080/,出現下圖說明tomcat8沒問題。
3. OpenGrok搭建
-下載OpenGrok
OpenGrok目前的版本不斷演進:https://github.com/oracle/opengrok/releases
但是強烈建議不要採用最新版本(根據實測發現雖然可以完成OpenGrok環境的搭建,但極大可能發生無法爲代碼建立索引的情況,該問題排查數天無果,轉而基於低版本搭建成功)
如下版本存在各自的問題
(1). https://github.com/oracle/opengrok/releases/tag/1.1-rc38 無法完成代碼的符號解析
(2). https://github.com/oracle/opengrok/releases/tag/0.12.1.5
(3). https://github.com/oracle/opengrok/releases/tag/0.13-rc10
從 https://github.com/oracle/opengrok/releases/tag/0.12.1.5 下載並解壓至 /opt/opengrok-0.12.1.5
爲OpenGrok配置環境
export OPENGROK_PATH="/opt/opengrok-0.12.1.5"
-部署OpenGrok
OpenGrok提供了現成的腳本。首先到前面解壓後的目錄,運行以下命令。其中環境變量OPENGROK_TOMCAT_BASE爲tomcat所在路徑(tomcat7貌似腳本自己能找到,tomcat8自動找不到,所以人肉指定)。
tomcat 安裝路徑通過命令查詢如下:
$ sudo OPENGROK_TOMCAT_BASE=/var/lib/tomcat8 ./OpenGrok deploy
這步之後瀏覽器打開http://localhost:8080/source/,應該能看到下面的頁面,但現在是空的。
- 生成索引
用下面命令生成代碼索引。假如代碼在/home/jzj/source/Android/7.1下的話:
~opt/opengrok-0.12.1.5/bin$ sudo ./OpenGrok index /home/cpy/a6/kernel
等結束後打開http://localhost:8080/source/,大概20min就能瀏覽代碼了。
https://www.linuxidc.com/Linux/2017-11/148466.htm (轉載)