在同样的Ubuntu服务器上,OpenGrok的效率比LXR要高很多。扫描整个Android AOSP代码,LXR需要18个小时以上,而OpenGrok只需要4个小时。
搭建方法:
https://blog.messyidea.com/archives/44/
对比:
https://daimajiaoliu.com/daima/60f312f2e6e6803
tomcat修改:
catalina.sh
300 # add by guolongji
301 JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx20g"
非常神奇的替换JAVA中文件的方法!!!
unzip source.war WEB-INF/web.xml
edit web.xml and re-package the jar file.
zip -u source.war WEB-INF/web.xml
opengrok-deploy -c /opengrok/etc/configuration.xml
/opengrok/dist/lib/source.war /var/lib/tomcat10/webapps
java
-Djava.util.logging.config.file=/home/fb-3/guolongji/opengrok/etc/logging.properties
-jar /home/fb-3/guolongji/opengrok/dist/lib/opengrok.jar
-c /usr/local/bin/ctags
-s /home/fb-3/guolongji/opengrok/src/ -d /home/fb-3/guolongji/opengrok/data -H -P -S -G
-W /home/fb-3/guolongji/opengrok/etc/configuration.xml -U http://localhost:8080/source
opengrok-deploy -c /home/fb-3/guolongji/opengrok/etc/configuration.xml
/home/fb-3/guolongji/opengrok/dist/lib/source.war /home/fb-3/guolongji/tomcat/apache-tomcat-10.0.10/webapps
解决路径问题十分耗时,也不是很必要,所以:
重来一遍,按照别人网页上面的所有默认的,知道了吗?yes,sir!
opengrok太多的优化项了:
https://blog.csdn.net/wd229047557/article/details/94571186
别人的方法:
java -Xmx8g -jar ~/software/opengrok/opengrok-1.2.23/lib/opengrok.jar
-c /opt/software/universal-ctags/bin/ctags
-s ~/software/src
-d ~/software/opengrok/opengrok-1.2.23/data -H -P -S -G -v
-W ~/software/opengrok/opengrok-1.2.23/etc/configuration.xml
-U http://localhost:8080/source
-m 256
最终的解决方法!!!!!!:
java -Xmx8g
-Djava.util.logging.config.file=/opengrok/etc/logging.properties
-jar /opengrok/dist/lib/opengrok.jar
-c /usr/bin/ctags
-s /opengrok/src/ -d /opengrok/data -H -P -S -G
-W /opengrok/etc/configuration.xml -U http://localhost:8080/source
-m 512
opengrok-deploy -c /opengrok/etc/configuration.xml /opengrok/dist/lib/source.war /var/lib/tomcat10/webapps
极大提高opengrok的索引速度!!!
export JAVA_OPTS="-Xmx8192m -server"
export OPENGROK_FLUSH_RAM_BUFFER_SIZE="-m 256"
下面这两行可以极大加速index的速度
export OPENGROK_SCAN_REPOS=false
export OPENGROK_GENERATE_HISTORY=off
把索引历史去掉了,这个看起来还是很不错滴!
#######################################
(1)
opengrok-deploy -c /opengrok/etc/configuration.xml /opengrok/dist/lib/source.war /tomcat/webapps
java
-Djava.util.logging.config.file=/opengrok/etc/logging.properties
-jar /opengrok/dist/lib/opengrok.jar
-c /usr/bin/ctags
-s /opengrok/src/ -d /opengrok/data -H -P -S -G
-W /opengrok/etc/configuration.xml -U http://localhost:8080/source
不使用localhost的话需要验签!
opengrok-indexer
-J=-Djava.util.logging.config.file=/opengrok/etc/logging.properties
-a /opengrok/dist/lib/opengrok.jar --
-c /usr/bin/ctags
-s /opengrok/src -d /opengrok/data -H -P -S -G
-W /opengrok/etc/configuration.xml -U http://localhost:8080/source
-m 512
opengrok构建索引也太耗时了吧,需要4个小时,虽然说后续改动的话索引会快很多。
opengrok大功告成!
后续?用什么?感觉最简单的还是用vim cscope和grok啊。静态的看一下大项目也可以!
tinyhttp,转发,安装python管理器,之后按照文档一步一步做。其中不少步骤是文档中没有体现出来的!!!
又是dmesg:
70203 66731 65348 18011 60909 80605
vim最大化窗口:
https://lotabout.me/2015/Vim-%E6%9C%80%E5%A4%A7%E5%8C%96%E5%BD%93%E5%89%8D%E7%AA%97%E5%8F%A3/
太厉害了!
vim实用技巧:
https://zhuanlan.zhihu.com/p/128656618
"允许键删除自动缩进产生的空白字符、换行符和非本次输入的字符
set bs=indent,eol,start
"设置搜索字符串高亮
set hlsearch
"设置增量搜索
set incsearch
"设置viminfo
set viminfo='100,<50,s10,%
"设置行号
set number
"或者设置相对行号
" set relativenumber
"设置当请行有下划线
set cursorline
au ColorScheme * hi! Cursorline cterm=bold ctermbg=236 guibg=Grey90
au ColorScheme * hi! CursorLineNr cterm=bold ctermfg=159 ctermbg=236 guibg=Grey90
"设置光标列
set cursorcolumn
au ColorScheme * hi! CursorColumn cterm=bold ctermfg=250 ctermbg=232 guibg=Grey90
"设置背景为亮的
set background=light
"设置颜色组合为默认
colorscheme default
"触发ColorScheme事件时设置自定义配色方案,实现了4组
function! Get_Mode()
let mode_opts =
\ {
\ 'n': 'Normal',
\ 'no': 'Operator-pending',
\ 'v': 'visual',
\ 'V': 'VISUAL',
\ 'CTRL-V': 'VB',
\ 'i': 'Insert',
\ 'R': 'Replace',
\ 's': 'Select',
\ 'S': 'Select',
\ 'CTRL-S': 'Select'
\ }
let mode = mode()
if has_key(mode_opts, mode)
return mode_opts[mode]
else
echo "get mode error!!!"
endif
endfunc
" set status line
" colorscheme will run hi clear, which clear you own color settings so need
" autocmd to keep you color settings
autocmd ColorScheme *
\ hi User1 ctermbg=DarkBlue ctermfg=Red guibg=DarkBlue guifg=Red |
\ hi User2 ctermbg=DarkBlue ctermfg=Yellow guibg=DarkBlue guifg=Red |
\ hi User3 ctermbg=White ctermfg=Green guibg=White guifg=DarkBlue |
\ hi User4 ctermbg=White ctermfg=Blue guibg=DarkBlue guifg=Red |
\ hi User5 term=bold cterm=bold ctermfg=17 ctermbg=190 gui=bold guifg=#00005f guibg=#dfff00 |
\ hi User6 ctermfg=190 ctermbg=238
"hi! StatusLine ctermfg=White ctermbg=DarkGreen
set statusline =\ %5*%{Get_Mode()}%*
set statusline+=\ %6*[%-6.100F]%*
"设置状态栏,%4*表示选择第4组自定义颜色,%-表示文件名在左侧显示(相对于文件名的长度小于最短字符个数的情况),6.100表示文件名最少占6个字符最多占100个字符,F显示文件的绝对路径,%*是选择自定义颜色的结束标志
"%2*选择第2组自定义颜色,%r显示文件的只读属性”[RO]”,%*表示选择用户自定义颜色的结束
set statusline+=\ %2*%r%*
"当打开preview窗口时显示"[Preview]"
set statusline+=%w
"%1*选择第1组自定义颜色,%m显示文件被修改过的标记为”[+]”,%*表示选择用户自定义颜色的结束
set statusline+=\ %1*%m%*
"%=表示状态栏左栏和右栏的分界
set statusline+=%=
"%l显示行号,%c显示列号
set statusline+=%l,%c
"%p显示插入符所在位置在文件中的百分比,%%显示一个百分比字符
set statusline+=\ %p%%
"%3*选择第3组自定义颜色,%{&fileformat}表示读取’fileformat’选项的内容显示到状态栏上,%*表示选择用户自定义颜色的结束
set statusline+=\ [%3*%{&fileformat}%*]
"2表示总是显示状态栏
set laststatus=2
"设置命令行补全行为为列表模式
set wildmode=longest:list
"设置补全菜单的行为,menuone表示只有一条匹配时也显示菜单,noinsert表示弹出菜单时不插入选项
set completeopt=menuone,noinsert
"保存修改历史到文件中
set undofile
"设置修改历史文件的保存路径
set undodir=~/.vim/undodir
"打开文件类型检测功能,并在必要时自动加载用户定义的插件,’runtimepath’选项定义了Vim加载插件的路径
filetype plugin on
"打开语法高亮
syntax on
"设置每行的文本宽度为80个字符
set textwidth=80
"删除允许超过屏幕长度行的属性
set formatoptions-=l
"当字符数到达textwidth设置的值时,自动换行
set formatoptions+=t
" 使能所有的帮助文档,包括来自第三方的文档
silent! helptags ALL
"TagList插件参数设置
let Tlist_Ctags_Cmd ='/usr/bin/ctags'
let Tlist_Exit_OnlyWindow = 1
let Tlist_File_Fold_Auto_Close= 1
let Tlist_Inc_Winwidth = 0
"WinMananger插件参数设置
let g:winManagerWindowLayout = "FileExplorer,TagList|BufExplorer,Qucikfix"
let g:persistentBehaviour = 0
"配置cscope的输出到quickfix窗口中
set cscopequickfix=s-,c-,d-,i-,t-,e-,a-
"自动加载cscope产生的符号数据库
if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endif
"映射cscope的快捷键
nmap s :cs find s =expand(""):copen
nmap g :cs find g =expand("")
nmap c :cs find c =expand(""):copen
nmap t :cs find t =expand(""):copen
nmap e :cs find e =expand(""):copen
nmap d :cs find d =expand(""):copen
nmap f :cs find f =expand(""):copen
nmap i :cs find i =expand(""):copen
"F1打开quickfix窗口
nmap :copen
"F2关闭quickfix窗口
nmap :ccl
"F3控制TagList窗口
nmap :Tlist
"设置CTRL-C复制所选的内容到剪切板
nmap “+y
"关闭当前搜索高亮
nnoremap l :nohls
"选择要跳转的tag
function! GotoJump()
jumps
let j = input("Please select your jump: ")
if j != ''
let pattern = '\v\c^\+'
if j =~ pattern
let j = substitute(j, pattern, '', 'g')
execute "normal " . j . "\"
else
execute "normal " . j . "\"
endif
endif
endfunction
nmap jj :call GotoJump()
"自动更新ctags的符号数据库
function! DelTagOfFile(file)
let fullpath = a:file
let cwd = getcwd()
let tagfilename = cwd . "/tags"
let f = substitute(fullpath, cwd . "/", "", "")
let f = escape(f, './')
let cmd = 'sed -i "/' . f . '/d" "' . tagfilename . '"'
let resp = system(cmd)
endfunction
function! UpdateTags()
let f = expand("%:p")
let cwd = getcwd()
let tagfilename = cwd . "/tags"
let cmd = 'ctags -a -f ' . tagfilename . ' --c++-kinds=+p --fields=+iaS --extra=+q ' . '"' . f . '"'
call DelTagOfFile(f)
let resp = system(cmd)
endfunction
" autocmd BufWritePost *.cpp,*.h,*.c call UpdateTags()
"Vim退出时自动保存指定类型的文件
function! SaveFile()
if filewritable(bufname("%")) && getbufvar("%","&modified")
write
endif
endfunction
"设置默认的智能补全函数
if has("autocmd") && exists("+omnifunc")
autocmd Filetype *
\ if &omnifunc == "" |
\ setlocal omnifunc=syntaxcomplete#Complete |
\ endif
endif