整個Android代碼非常復(fù)雜谊迄,涉及到各種類型的文件,要做完整的搜索非常困難,給開發(fā)帶來很大的不便荚虚。對于aosp的代碼,可以通過http://androidxref.com/這個網(wǎng)址搜索籍茧,但是對于有平臺vendor的開發(fā)代碼來說就很困難版述。所以借用開源的opengrok自建一個搜索服務(wù)。
第一步:安裝tomcat寞冯,這個比較簡單
$ sudo apt-get install exuberant-ctags tomcat8
?$ sudo /etc/init.d/tomcat8 restart
瀏覽器中打開http://localhost:8080/渴析,出現(xiàn)下圖說明tomcat8沒問題晚伙。
第二步:布署 opengrok
在https://github.com/OpenGrok/OpenGrok/releases下載OpenGrok安裝包,比如opengrok-1.0俭茧,解壓安裝包咆疗。OpenGrok提供了現(xiàn)成的腳本可是自動布署,首先到前面解壓后的目錄母债,運(yùn)行以下命令午磁。其中環(huán)境變量OPENGROK_TOMCAT_BASE為tomcat所在路徑(tomcat7貌似腳本自己能找到,tomcat8自動找不到毡们,所以人肉指定)漓踢。
$ sudo OPENGROK_TOMCAT_BASE=/var/lib/tomcat8 ./OpenGrok deploy,
這樣就在tomcat的webapps目錄下有了source目錄
這步之后瀏覽器打開http://localhost:8080/source/漏隐,應(yīng)該能看到下面的頁面喧半,但現(xiàn)在是空的。
布署后最好重啟一下tomcat青责,否則可以提示找不到config文件挺据。
第三步:建立索引
建立索引有兩種方式,
第一種:
假如代碼在/home/jzj/source/Android/7.1下的話:用OpenGrok腳本生成脖隶,如下:
$ sudo ./OpenGrok index /home/jzj/source/android/7.1/
第二種扁耐,直接執(zhí)行opengrok.jar,這種方式相對比較靈活产阱,而且可以配置source root 和data root婉称,可以配置多項目,所以建議用這種构蹬。
sudo java -jar opengrok.jar -P -S -v -s /home/xhw241/opengrok-1.0/code -d /var/opengrok/etc -W /var/opengrok/etc/configuration.xml
-P表示為 source root 目錄下的每個一級子目錄生成一個工程王暗。
-S表示搜索并添加 “external” source repositories。
-v表示打印操作的進(jìn)度信息庄敛。
-s表示指定 source root俗壹, source root 就是代碼放置的路徑,指定這個目錄后藻烤,可以在目錄下面建子目錄绷雏,一個子目錄就是對應(yīng)一個project,可以配置多項目怖亭,在搜索界面選擇project涎显。
-d表示指定 data root,這個目錄里面是生成的索引信息兴猩,還有configuration文件期吓,里面放的項目配置信息。這個configuration.xml文件的路徑在tomcat的source目錄里面WEB_INF里面的web.xml里面配置路徑峭跳。
-W表示指定將配置寫到該文件膘婶。
還有更多配置選項可以使用java -jar /path/to/opengrok.jar查看缺前。
第四步:啟動定時任務(wù)更新代碼和索引
通過 crontab -e 建立定時任務(wù) ?
(/bin/bash $PATH/auto_sync.sh 1 > $PATH/cron_log.txt 2>&1)
#! /bin/bash
SRC_PATH="/home/qqq/svn_code"
OpenGrok_PATH="/home/qqq/opengrok-1.0/lib"?
data_root_path = ''your path"
source_root_path = "your path"
? function svn_sync()
? {? ?
? ? #repo forall -c 'git reset --hard; git clean -f -d -x'? ?
? ? #repo sync -j4?
? ? svn update -q
? ? date
? }
? function opengrok_index()
? {
? ? cd $OpenGrok_PATH
? ? #./OpenGrok index
java -jar opengrok.jar -P -S -v -s $source_root_path? -d $data_root_path -W $data_root_path/configuration.xml
? ? date
? }
? function main_sync()
? {
? ? echo "start sync==============================="
? ? dir=$(ls -l? $SRC_PATH |awk '/^d/ {print $NF}')
? ? for i in $dir
do
? ? ? echo $i
? ? ? if [ -d $i ];then
? ? ? ? echo "=================================="
? ? ? ? echo "To be sync branch ==>>>>>>>>>>>>>$i "
? ? ? ? cd $i
? ? ? ? svn_sync
? ? ? ? cd ..
? ? ? else
? ? ? echo "The Folder is not exist"
? ? ? fi
done?
? ? echo "svn sync done, start opengrok"
? ? echo "======================================"
? }
? main_sync
? #opengrok_index
? echo "==========================================="
? /etc/init.d/tomcat8 restart
? echo "End!!!"
這個腳本如果不是root用戶運(yùn)行可能會有權(quán)限問題,可以在基本里面要執(zhí)行的命令前加 echo pwd | sudo -S .... ?