OpenGrok是一個源碼搜索及交叉引用查詢引擎,OpenGrok的引入可以幫助我們更好地在浩如煙海的源碼里找到自己需要的那坨代碼。 ...
目錄
一、目的
Android源碼太龐大,涉及幾十個G、上千萬個文件,普通的IDE都無法完全載入全部代碼,更不用談搜索、索引,這對於Android源碼的學習、調試非常不利。
OpenGrok是一個源碼搜索及交叉引用查詢引擎,OpenGrok的引入可以幫助我們更好地在浩如煙海的源碼里找到自己需要的那坨代碼。
二、環境
- 系統:Ubuntu 14.04
- CPU:13th Gen Intel(R) Core(TM) i5-13500
三、相關概念
3.1 OpenGrok
OpenGrok為一個方便快速的源碼搜索及交叉引用查詢引擎。它以Java編寫,可用於源碼搜索、交叉引用查詢、以及源碼樹定位。它支持多種編碼語言和多種代碼版本控制引擎系統。
3.2 CTags
CTags是一個在Linux系統中廣泛使用的工具,它可以幫助程式員更有效地瀏覽和管理大型代碼庫。CTags能夠創建一個索引文件,其中包含代碼庫中的函數、類、結構體等關鍵詞的位置信息。
3.3 Tomcat
Tomcat是一個免費的開放源代碼的Web應用伺服器,屬於輕量級應用伺服器,由Apache軟體基金會(Apache Software Foundation)的Jakarta項目開發。 它是一個Servlet容器,同時也是JSP(Java Server Pages)的一個容器,支持最新的Servlet和JSP規範。Tomcat的設計目標是提供一個可靠且易於使用的Web應用伺服器,特別適用於中小型系統和併發訪問用戶不是很多的場合。由於其技術先進、性能穩定且免費,Tomcat深受Java愛好者的喜愛,並得到了部分軟體開發商的認可,成為比較流行的Web應用伺服器之一。
四、OpenGrok搭建
4.1 安裝jdk
sudo apt install openjdk-11-jdk
4.2 安裝ctags依賴
sudo apt install autoconf automake
4.3 安裝universal-ctags
4.3.1 下載universal-ctags
git clone https://github.com/universal-ctags/ctags.git
4.3.2 編譯&&安裝universal-ctags
cd ctags
./autogen.sh
./configure
make
sudo make install
4.4 安裝Tomcat
4.4.1 下載&&解壓Tomcat
# http://tomcat.apache.org/
tar -xvf apache-tomcat-10.1.24.tar.gz
4.4.2 啟動Tomcat
sh apache-tomcat-10.1.24/bin/startup.sh
4.4.3 驗證Tomcat
4.5 安裝OpenGrok
# https://github.com/oracle/opengrok
# https://github.com/oracle/opengrok/releases
tar -xvf opengrok-1.13.7.tar.gz
4.6 基於Tomcat搭建OpnGrok服務
- 拷貝OpenGrok的源項目到Tomcat下。 Tomcat啟動後會自動解壓source.war,可以通過瀏覽器訪問:http://127.0.0.1:8080/source/
cp opengrok-1.13.7/lib/source.war apache-tomcat-10.1.24/webapps/
- 配置相關環境變數。
sudo vi ~/.bashrc
# opengrok
export JAVA_HOME=/usr
export OPENGROK_TOMCAT_BASE=/media/2TB/lzq/openGrok/apache-tomcat-10.1.24
export CATALINA_HOME=/media/2TB/lzq/openGrok/apache-tomcat-10.1.24
export OPENGROK_APP_SERVER=Tomcat
export OPENGROK_INSTANCE_BASE=/media/2TB/lzq/openGrok/opengrok-1.13.7
export LANG=zh_CN.UTF-8
- 使能環境變數
source ~/.bashrc
- 創建相關目錄
mkdir opengrok-1.13.7/etc opengrok-1.13.7/src opengrok-1.13.7/data opengrok-1.13.7/history
- 將待索引代碼拷貝到src目錄下。 建議創建一個軟鏈接,不然多一份代碼占用空間。
cp -r xxx opengrok-1.13.7/src/
- 生成索引 (之後每次在src目錄下有更新需要重新索引)。在opengrok-1.13.7/data/下會有相關索引信息,也是很占空間,此過程費時,這台拖拉機索引一次用了6天(粗略估算了一下,一分鐘僅能掃描100個文件)。
java -jar opengrok-1.13.7/lib/opengrok.jar -P -S -v -s opengrok-1.13.7/src -d opengrok-1.13.7/data -H --repository opengrok-1.13.7/history -W opengrok-1.13.7/etc/configuration.xml
- 配置configuration.xml路徑。 索引生成後,會生成opengrok-1.13.7/etc/configuration.xml文件,需要讓tomcat下的項目引用該配置。
# apache-tomcat-10.1.24/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>/media/2TB/lzq/openGrok/opengrok-1.13.7/etc/configuration.xml</param-value>
</context-param>
- 驗證功能。 啟動tomcat,同時瀏覽器訪問http://127.0.0.1:8080/source/, 大功告成。
五、相關問題
5.1 TomCat訪問source異常404?
一開始我下載apache-tomcat-9.0.89,然後http://127.0.0.1:8080/source/, 一直出現404。經歷一系列各種亂七八糟的調試後,始終起不來。
後面更新apache-tomcat-10.1.24,完美。原因不明。
5.2 OpenGrok沒有projects選擇項?
我最開始在opengrok-1.13.7/src/下創建了UIS7870文件夾,然後生成索引的目標目錄是指向:opengrok-1.13.7/src/,導致projects僅有UIS7870,故不顯示(具體可參考configuration.xml & apache-tomcat-10.1.24/webapps/source/menu.jspf);
後續將目標索引目錄修改成opengrok-1.13.7/src/UI7870/即可。
5.3 如何修改Tomcat埠?
- 將server埠修改為8006
- 將HTTP埠修改為8085
- 將AJP埠修改為8010
# sudo cat apache-tomcat-10.1.24/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8085" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector protocol="AJP/1.3"
address="::1"
port="8010"
redirectPort="8443" />
六、參考資料
- OpenGrok搭建
https://blog.csdn.net/weixin_39577288/article/details/120565619 - OpenGrok介紹
https://www.jianshu.com/p/3371d3b213d2