工欲善其事,必先利其器之—使用OpenGrok阅读源码

工欲善其事,必先利其器之—使用OpenGrok阅读源码OpenGrok的介绍OpenGrokisafastandusablesourcecodesearchandcrossreferenceengine.Ithelpsyousearch,cross-referenceandnavigateyoursourcetree.Itunderstandsvariousprogramfilefor…

大家好,又见面了,我是你们的朋友全栈君。

OpenGrok的介绍

OpenGrok is a fast and usable source code search and cross reference engine. It helps you search, cross-reference and navigate your source tree. It understands various program file formats and history from many Source Code Management systems. In other words it lets you grok (profoundly understand) source code and is developed in the open, hence the name OpenGrok. It is written in Java.

OpenGrok的安装

前置环境

  • Java运行环境至少是1.8以上
  • 安装Java Web容器(classfish或tomcat8.x以上版本)
  • 安装Universal ctags

Tomcat的安装

Tomcat8的下载
把下载的压缩包解压,并放到你喜欢的某个本地目录,如解压后的目录为

/Users/luogw/dev_tool/apache-tomcat-8.5.31
注:解压的文件默认没有执行权限的,需要对该目录的所有文件加上可执行权限

drwxr-xr-x@ 25 luogw  staff     850  4 27 21:25 ./
drwxr-xr-x@ 13 luogw  staff     442  4 27 21:26 ../
-rw-r--r--@  1 luogw  staff   34985  4 27 21:24 bootstrap.jar
-rw-r--r--@  1 luogw  staff    1703  4 27 21:24 catalina-tasks.xml
-rw-r--r--@  1 luogw  staff   15900  4 27 21:24 catalina.bat
-rw-r--r--@  1 luogw  staff   23463  4 27 21:25 catalina.sh
-rw-r--r--@  1 luogw  staff  207125  4 27 21:25 commons-daemon-native.tar.gz
-rw-r--r--@  1 luogw  staff   25145  4 27 21:24 commons-daemon.jar
-rw-r--r--@  1 luogw  staff    2040  4 27 21:24 configtest.bat
-rw-r--r--@  1 luogw  staff    1922  4 27 21:25 configtest.sh
-rw-r--r--@  1 luogw  staff    8509  4 27 21:25 daemon.sh
-rw-r--r--@  1 luogw  staff    2091  4 27 21:24 digest.bat
-rw-r--r--@  1 luogw  staff    1965  4 27 21:25 digest.sh
-rw-r--r--@  1 luogw  staff    3574  4 27 21:24 setclasspath.bat
-rw-r--r--@  1 luogw  staff    3680  4 27 21:25 setclasspath.sh
-rw-r--r--@  1 luogw  staff    2020  4 27 21:24 shutdown.bat
-rw-r--r--@  1 luogw  staff    1902  4 27 21:25 shutdown.sh
-rw-r--r--@  1 luogw  staff    2022  4 27 21:24 startup.bat
-rw-r--r--@  1 luogw  staff    1904  4 27 21:25 startup.sh
-rw-r--r--@  1 luogw  staff   49336  4 27 21:24 tomcat-juli.jar
-rw-r--r--@  1 luogw  staff  405109  4 27 21:25 tomcat-native.tar.gz
-rw-r--r--@  1 luogw  staff    4574  4 27 21:24 tool-wrapper.bat
-rw-r--r--@  1 luogw  staff    5483  4 27 21:25 tool-wrapper.sh
-rw-r--r--@  1 luogw  staff    2026  4 27 21:24 version.bat
-rw-r--r--@  1 luogw  staff    1908  4 27 21:25 version.sh

添加可执行权限

luogw@luogw-MacBook-Pro dev_tool$ chmod -R +x apache-tomcat-8.5.31
# 启动Tomcat
luogw@luogw-MacBook-Pro dev_tool$ ./apache-tomcat-8.5.31/bin/startup.sh
Using CATALINA_BASE:   /Users/luogw/dev_tool/apache-tomcat-8.5.31
Using CATALINA_HOME:   /Users/luogw/dev_tool/apache-tomcat-8.5.31
Using CATALINA_TMPDIR: /Users/luogw/dev_tool/apache-tomcat-8.5.31/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
Using CLASSPATH:       /Users/luogw/dev_tool/apache-tomcat-8.5.31/bin/bootstrap.jar:/Users/luogw/dev_tool/apache-tomcat-8.5.31/bin/tomcat-juli.jar
Tomcat started.

用浏览器打开 http://localhost:8080/ ,正常情况下看到所示页面,表明安装成功
这里写图片描述
在.bash_profile中添加如下启动与并闭的Tomcat的alias

# for tomcat
alias start_tomcat='${HOME}/dev_tool/apache-tomcat-8.5.31/bin/startup.sh'
alias close_tomcat='${HOME}/dev_tool/apache-tomcat-8.5.31/bin/shutdown.sh

Universal Ctags的安装

使用brew安装Ctags

brew install --HEAD universal-ctags/universal-ctags/universal-ctags

OpenGrok的安装

OpenGrok下载列表
下载对应的压缩包并解压,解压出来的目录放在你喜欢的某个目标即可,如我的解压目录位置是 /Users/luogw/dev_tool/opengrok-1.1-rc29

OpenGrok的使用实践

示例:搭建JDK源码的阅读环境

环境配置

在.bash_profile文件中添加如下环境变量的配置

# for tomcat
alias start_tomcat='${HOME}/dev_tool/apache-tomcat-8.5.31/bin/startup.sh'
alias close_tomcat='${HOME}/dev_tool/apache-tomcat-8.5.31/bin/shutdown.sh'

# for opengrok,实际目录位置视具体的情况更改
OPENGROK_INSTANCE_BASE=${HOME}/dev_tool/opengrok-1.1-rc29
export OPENGROK_INSTANCE_BASE
OPENGROK_TOMCAT_BASE=${HOME}/dev_tool/apache-tomcat-8.5.31
export OPENGROK_TOMCAT_BASE
OPENGROK_CTAGS=/usr/local/bin/ctags
export OPENGROK_CTAGS
OPENGROK_SRC_ROOT=${HOME}/personal/code
export OPENGROK_SRC_ROOT
OPENGROK_DATA_ROOT=${HOME}/personal/opengrok_index
export OPENGROK_DATA_ROOT
OPENGROK_VERBOSE=true
export OPENGROK_VERBOSE
alias opengrok='${HOME}/dev_tool/opengrok-1.1-rc29/bin/OpenGrok'

发布Web应用

luogw@luogw-MacBook-Pro opengrok_index$ opengrok deploy
Loading the default instance configuration ...
Installing /Users/luogw/dev_tool/opengrok-1.1-rc29/bin/../lib/source.war to /Users/luogw/dev_tool/apache-tomcat-8.5.31/webapps ...

Start your application server (Tomcat),  if it is not already
running, or wait until it loads the just installed web  application.

OpenGrok should be available on <HOST>:<PORT>/source
  where HOST and PORT are configured in Tomcat.

生成索引

luogw@luogw-MacBook-Pro notes$ source ~/.bash_profile
luogw@luogw-MacBook-Pro notes$ opengrok index
Loading the default instance configuration ...
WARNING: OpenGrok generated etc path /Users/luogw/dev_tool/opengrok-1.1-rc29/etc  doesn't exist Attempting to create generated etc directory ... Creating default /Users/luogw/dev_tool/opengrok-1.1-rc29/logging.properties ...

生成索引需要些时间…..

搜索代码

# 启动Tomcat
start_tomcat
# 浏览器打开链接 [http://localhost:8080/source/](http://localhost:8080/source/)

效果截图如下
这里写图片描述

这里写图片描述

参考资料

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141722.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月25日 上午9:40
下一篇 2022年5月25日 上午9:40


相关推荐

  • DeviceIoControl_deviceregist

    DeviceIoControl_deviceregistDeviceIoControl这个api我们用的不多,但是很重要,有时会帮助我们实现一些特别的需求,如获取硬件设备信息、与硬件设备通信(读写数据)等,对照msdn,下面我们详细解释一下这个api的用法(有什么错误再所难免,各位不吝指教啊)。DeviceIoControl是用来控

    2025年9月26日
    5
  • html5–项目实战-仿360囧图

    html5–项目实战-仿360囧图

    2022年3月12日
    33
  • 虚拟机连网(多台虚拟机互联、虚拟机与真机互联、虚拟机上网)

    虚拟机连网(多台虚拟机互联、虚拟机与真机互联、虚拟机上网)一)通常虚拟机中下载安装配置完系统之后自动选择的是NAT(用于共享主机IP)此时真机和虚拟机是可以ping通的,但是此时虚拟机是不能上网的(也就是尝试ping通www.baidu.com时无法ping通);

    2022年5月18日
    42
  • 【Java基础】– instanceof 用法详解

    【Java基础】– instanceof 用法详解1 instanceof 关键字如果你之前一直没有怎么仔细了解过 instanceof 关键字 现在就来了解一下 instanceof 其实是 java 的一个二元操作符 和 lt gt 这些是类似的 同时它也是被保留的关键字 主要的作用 是为了测试左边的对象 是不是右边的类的实例 返回的是 boolean 值 AinstanceofB 注意 A 是实例 而 B 则是 Class 类下面使用代码测试一下 classA interfaceInt classBextend

    2026年3月17日
    1
  • Vue开发环境搭建及在docs新建vue项目

    Vue开发环境搭建及在docs新建vue项目参考 https www cnblogs com winter92 p 7117057 html 写在开头的废话 相信很多人在学习 vue 这个框架时 最开始搭建开发环境 容易遇到一些大大小小的坑 我作为菜鸟本鸟身受其扰 一度觉得这篇博客可能写不到结尾了 还好顺利完结 就是多花了些时间 为了避免看到这篇博客的朋友和我之前一样伤脑筋 我就尽可能写详细了 现在竟然觉得写博客有点上头 今天连晚饭都不

    2026年3月26日
    1
  • JAX-RS 2.0如何验证查询参数

    JAX-RS 2.0如何验证查询参数

    2022年3月4日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号