一、目的

Android源码太庞大,涉及几十个G、上千万个文件,普通的IDE都无法完全加载全部代码,更不用谈搜索、索引,这对于Android源码的学习、调试非常不利。

        OpenGrok是一个源码搜索及交叉引用查询引擎,OpenGrok的引入可以帮助我们更好地在浩如烟海的源码里找到自己需要的那坨代码。

二、环境

  1. 系统:Ubuntu 14.04
  2. 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

访问:http://127.0.0.1:8080/

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服务

  1. 拷贝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/
  1. 配置相关环境变量。
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
  1. 使能环境变量
source ~/.bashrc
  1. 创建相关目录
 mkdir opengrok-1.13.7/etc opengrok-1.13.7/src opengrok-1.13.7/data  opengrok-1.13.7/history
  1. 将待索引代码拷贝到src目录下。 建议创建一个软链接,不然多一份代码占用空间。
cp -r xxx opengrok-1.13.7/src/
  1. 生成索引 (之后每次在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
  1. 配置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>
  1. 验证功能。 启动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" />

六、参考资料

  1. OpenGrok搭建

    https://blog.csdn.net/weixin_39577288/article/details/120565619
  2. OpenGrok介绍

    https://www.jianshu.com/p/3371d3b213d2

Linux OpenGrok搭建的更多相关文章

  1. [代码搜索]OpenGrok搭建简易教程

    面对着动辄几十GB且随时不断更新的大型代码,我们产生了以下需求:1.快速搜索代码2.代码存放于本地/服务器3.代码可跳转4.跨平台5.易于维护... 显然SourceInsight.ctags.gre ...

  2. Linux环境搭建-在虚拟机中安装Centos7.0

    最近在空闲时间学习Linux环境中各种服务的安装与配置,都属于入门级别的,这里把所有的学习过程记录下来,和大家一起分享. 我的电脑系统是win7,所以我需要在win7上安装一个虚拟机-VMware,然 ...

  3. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  4. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  5. Linux下搭建个人网站

    前不久在阿里买了一个服务器,然后开始第一次尝试搭建自己的个人网站.前端采用了bootstrap框架,后端采用的是PHP,数据库使用的是Mysql.新手第一次在linux下搭建遇见很多问题,在这里分享一 ...

  6. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  7. Linux下搭建PHP环境

    转载于: http://www.uxtribe.com/php/405.html 该站下有系列PHP文章. 在Linux下搭建PHP环境比Windows下要复杂得多.除了安装Apache,PHP等软件 ...

  8. Java学习心得之 Linux下搭建Java环境

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 Linux下搭建Java环境 1.前言2.JDK安装3.配置环境变量4. ...

  9. Java学习心得之 Linux下搭建JavaWeb环境

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 Linux下搭建JavaWeb环境 1. 前言2. Java安装3. t ...

  10. Ruby学习心得之 Linux下搭建Ruby环境

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Ruby学习心得之 Linux下搭建Ruby环境1.前言2.Linux下安装Ruby环境 一 ...

随机推荐

  1. Python多线程编程深度探索:从入门到实战

    title: Python多线程编程深度探索:从入门到实战 date: 2024/4/28 18:57:17 updated: 2024/4/28 18:57:17 categories: 后端开发 ...

  2. 对C语言符号的一些冷门知识运用的剖析和总结

    符号 目录 符号 注释 奇怪的注释 C风格的注释无法嵌套 一些特殊的注释 注释的规则建议 反斜杠'\' 反斜杠有续行的作用,但要注意续行后不能添加空格 回车也能起到换行的作用,那续行符的意义在哪? 反 ...

  3. 深入学习和理解Django模板层:构建动态页面

    title: 深入学习和理解Django模板层:构建动态页面 date: 2024/5/5 20:53:51 updated: 2024/5/5 20:53:51 categories: 后端开发 t ...

  4. centos中普通用户使用sudo报错:centos is not in the sudoers file. This incident will be reported.

    centos中普通用户使用sudo报错:centos is not in the sudoers file. This incident will be reported. su - chmod u+ ...

  5. 用 Certbot-auto 在 letsencrypt.org申请免费 SSL 证书实现 HTTPS

    参考帖子 https://www.cnblogs.com/lzpong/p/6433189.html https://www.cnblogs.com/756623607-zhang/p/1163850 ...

  6. 显示器AVG、DVI、HDMI、DisplayPort、Type-C、雷电接口

    在近十年的发展,显示设备的接口发生了巨大的改变.以前使用比较多的是蓝色VGA接口,接著出现了白色的DVI接口,当遇到不同接口时,还得买转接头进行转接.后来,又有了HDMI等接口,现在则出现DP和USB ...

  7. CSS样式(第三篇)

    ​ <div class="box1"> <div class="line"></div> <div class=&q ...

  8. SQL中常用的字符串CHARINDEX函数和PATINDEX函数详解!

    今天整理了些日常可能经常遇到的一些处理字符串的函数,有些可能在写SQL时突然间想不到如何使用,今天就给大家总结两个函数的应用方法,以备不时之需!记得点赞收藏! CHARINDEX(expression ...

  9. java学习之旅(day.20)

    注解和反射 注释comment:给人看 注解annotation:不仅可以给人看,还能给程序看,甚至能被其他程序读取 注解入门 什么是注解 注解的作用: 不是程序本身,可以对程序作出解释(这一点和注释 ...

  10. salesforce零基础学习(一百三十七)零碎知识点小总结(九)

    本篇参考: https://help.salesforce.com/s/articleView?id=release-notes.rn_lab_conditional_visibiliy_tab.ht ...