源碼閱讀環境OpenGrok搭建

工欲善其事,必先利其器。
<!--more-->前端

導語

閱讀源碼最多見操做的就是在函數/方法的調用與定義之間跳轉,對於只有大部分源碼來講,均可以經過ctags+vim得到比較好的體驗,但對於Android源碼這樣10G多的大型項目,這種方法就捉襟見肘了,更沒必要說對高度定製化的搜索需求(如查找某個文件的某個方法)的支持。
OpenGrok其實就是一個搜索引擎,只不過不一樣於Google、Baidu面向的是網頁,OpenGrok面向的是源碼,經過創建索引,OpenGrok能夠幫助咱們更好地在浩如煙海的源碼裏找到本身須要的那部分。java

環境搭建

環境搭建的繁瑣程度和最終的便利性成反比,把源碼解壓出來,隨便裝一個文本編輯器就能夠開始閱讀源碼了,可是若是你真的這樣作就會發現即便查找某個函數/方法的聲明都極其耗時,因此但願讀者接下來能夠保持耐心,由於環境搭建對於源碼閱讀來講是一件一勞永逸的事情。
對於自學能力強者,建議直接看官方文檔:How to setup OpenGrok · oracle/opengrok Wikigit

網頁瀏覽器+Servlet

什麼要網頁瀏覽器?由於OpenGrok本質是一個創建和處理索引的工具,就像ctags同樣,咱們通常用的編輯器Vim其實充當了一個顯示代碼的前端的做用,這個裏的網頁瀏覽器其實功能就和Vim相似,用來顯示代碼。Vim可以直接解析ctags工具生成的tags文件,但網頁瀏覽器卻不能,因此須要一個Servlet(服務器端),用來處理查找方法、跳轉到方法聲明之類的操做所產生的請求,這裏咱們選擇tomcat,版本要求8+。安裝過程以下:github

sudo apt-get install tomcat8 
sudo /etc/init.d/tomcat8 restart

打開http://localhost:8080/看到相似下面的網頁說明成功了:
web

最後下載OpenGrok,並把source.war這個文件放在Tomcat的webapp目錄下:vim

sudo cp ~/下載/opengrok-1.1-rc41/lib/source.war /var/lib/tomcat8/webapps

此時http://localhost:8080/source/應該就能訪問了,可是可能會報一些錯誤,只要不是404就不要慌,繼續配置。瀏覽器

JDK1.8+

官方明確要求JDK1.8及以上版本,若是版本低會報tomcat

An error occurred at line: 55 in the jsp file: /menu.jspf
'<>' operator is not allowed for source level below 1.7

之類的錯誤,如何安裝JDK的教程不少,不作贅述。
經過java -versionjavac -version能夠查看版本。服務器

ctags

必須是universal-ctags,不然後面創建索引的時候會報錯:oracle

嚴重: Exception running indexer
    org.opengrok.indexer.index.IndexerException: Didn't find Universal Ctags
    at org.opengrok.indexer.index.Indexer.prepareIndexer(Indexer.java:888)
    at org.opengrok.indexer.index.Indexer.main(Indexer.java:298)

通常經過apt-get安裝的都是exuberant-ctags,要注意:

sudo apt-get install tags[TAB]
exuberant-ctags               geany-plugin-ctags            libparse-exuberantctags-perl

能夠直接下載universal-ctags的源碼來編譯安裝:

# prepare
sudo apt-get remove ctags
sudo apt-get autoremove
sudo apt-get install autoconf
sudo apt-get install automake

git clone https://github.com/universal-ctags/ctags.git
cd ctags
./autogen.sh 
./configure
make
sudo make install

其餘

足夠的硬盤空間。

導入源碼

管理源碼

OpenGrok會經過一個目錄存放全部須要被索引的工程,經過一個目錄存放索引,對於須要創建索引的源碼,爲了避免影響其餘操做,咱們能夠創建一個目錄opengrok-workspace(名字自定義,下同),將源碼放在project目錄下,索引放在data目錄下。但這樣直接移動源碼實在不夠優雅,其實project目錄存在的意義是讓OpenGrok知道哪些工程須要被索引,因此咱們只需創建一個軟連接(Windows下的快捷方式)就好了,這裏我爲Android源碼、Vim源碼和Git源碼創建了軟連接,表示我須要索引這三個工程:

cd ~/opengrok-workspace/project
ln -s ~/SourceCode/Android_6.0/mydroid/ Android6.0
ln -s ~/SourceCode/git/ git
ln -s ~/SourceCode/vim/ vim

效果以下:

~/opengrok-workspace/project $ ls
Android6.0  git  vim

這樣咱們不想索引某個項目只須要移除他的軟連接(幾kb)就好了,而沒必要移動項目自己(動輒幾G)。

參數配置

強烈建議經過java -jar ~/Install/opengrok-1.1-rc41/lib/opengrok.jar -h查看每個參數的意義,好比我最終的命令是下面這樣:

java -jar ~/Install/opengrok-1.1-rc41/lib/opengrok.jar -P -S -v -s ~/opengrok-workspace/project -d ~/opengrok-workspace/data -I *.java -I *.c -I *.h -I *.cpp -W ~/opengrok-workspace/configuration.xml

其中-s代表項目地址,-d代表索引輸出地址,-W代表配置輸出地址,都是必須的。對於Git和Vim不要-I參數可能都沒有問題,但對於Android源碼,若是不要這個參數產生的索引就會不可用,由於.jar.so等文件都沒法創建索引,因此這裏我指定了只對Java和C、C++相關的文件創建索引,不只創建速度更快,佔用空間也更小。

Tomcat配置

最後,去/var/lib/tomcat8/webapps/source/WEB-INF目錄配置CONFIGURATION參數,讓服務器端知道索引在哪:

......
    <context-param>
        <description>Full path to the configuration file where OpenGrok can read its configuration</description>
        <param-name>CONFIGURATION</param-name>
        <param-value>/home/zhaoyu/opengrok-workspace/configuration.xml</param-value>
    </context-param>
......

按照上面的命令重啓Tomcat服務器端使新的配置生效,最後大功告成:

總結

本文只是介紹了環境的基本搭建流程,OpenGrok支持高度定製,這裏只使用了最基本的參數。此外,前端和服務器端也能夠根據本身的喜愛定製,例如asenac/vim-opengrokjdevera/vim-opengrok-search都在嘗試把Vim做爲瀏覽代碼的前端,固然在Chrome裏面裝個vimium也能得到相似的體驗。

相關文章
相關標籤/搜索