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!!!