Hace un tiempo configuré opengrok en el servidor para leer el código, hay muchos proyectos y la configuración manual uno por uno es engorrosa.
Me llevó casi un día entero desde la creación de Tomcat y Opengrok hasta la configuración e indexación de 5 proyectos de Android.
Si tuviera que configurar manualmente algunos proyectos más, probablemente colapsaría.Al ver que muchas personas tienen la necesidad de configurar multiproyectos de opengrok, escribí este script para configurar automáticamente multiproyectos.
1. Código fuente del script
/public/opengrok$ cat setup-opengrok-projects.sh
#!/bin/bash
#
# Copyright (C) 2023, guyongqiangx All Rights Reserved.
#
# File Name: setup-opengrok-projects.sh
# Author: guyongqiangx
# Blog: https://blog.csdn.net/guyongqiangx
# Date: 2023-02-11
# Info: 批量配置 opengrok 项目
#
# opengrok 安装目录
OPENGROK_APP_DIR=/opt/opengrok/dist/opengrok-1.7.42
# tomcat 安装目录
TOMCAT_APP_DIR=/opt/tomcat/apache-tomcat-10.0.27
# 代码项目根目录
PROJECT_ROOT_DIR=/public/opengrok
# 服务器访问地址
SERVER_URL=http://localhost:8000
# sudo 方式下用普通用户执行命令: "sudo -u username command"
USER="sudo -u guyongqiangx"
# 带一个参数,当前项目
setup_opengrok_project() {
PROJECT=$1
DATA_DIR=${PROJECT_ROOT_DIR}/data/${PROJECT}
ETC_DIR=${PROJECT_ROOT_DIR}/etc/${PROJECT}
SRC_DIR=${PROJECT_ROOT_DIR}/src/${PROJECT}
LOG_DIR=${PROJECT_ROOT_DIR}/log/${PROJECT}
# 1. 准备项目的 data, etc 和 log 目录
${
USER} mkdir -p ${DATA_DIR} ${ETC_DIR} ${LOG_DIR}
# 2. 准备项目的 logging.properties 文件
${
USER} cp ${OPENGROK_APP_DIR}/doc/logging.properties ${ETC_DIR}
# 3. 更新项目的 logging.properties 文件
PATTERN="java.util.logging.FileHandler.pattern =.*"
REPLACE="java.util.logging.FileHandler.pattern = ${LOG_DIR}/opengrok%g.%u.log"
# TODAY=$(date +%F)
# AUTHOR=guyongqiangx
# COMMENTS="$TODAY $AUTHOR - Set logging file location to ${PROJECT} etc dir"
# sed -i "s!^${PATTERN}!# &\n# ${COMMENTS}\n${REPLACE}!" ${ETC_DIR}/logging.properties
${
USER} sed -i "s!^${PATTERN}!# &\n${REPLACE}!" ${ETC_DIR}/logging.properties
# 4. 复制模板 source.war 到 tomcat 的 webapps 目录
sudo cp ${OPENGROK_APP_DIR}/lib/source.war ${TOMCAT_APP_DIR}/webapps/${PROJECT}.war
# 5. 更新项目的 tomcat 配置文件 web.xml
sudo opengrok-deploy -c ${ETC_DIR}/configuration.xml ${OPENGROK_APP_DIR}/lib/source.war ${TOMCAT_APP_DIR}/webapps/${PROJECT}.war
# 6. 索引项目数据
${
USER} java \
-Djava.util.logging.config.file=${ETC_DIR}/logging.properties \
-jar ${OPENGROK_APP_DIR}/lib/opengrok.jar \
-c /usr/local/bin/ctags \
-s ${SRC_DIR} \
-d ${DATA_DIR} \
-P -S -G -W ${ETC_DIR}/configuration.xml \
-U ${SERVER_URL}/${PROJECT} &> ${LOG_DIR}/index.log &
${
USER} echo "index project ${PROJECT} in background..."
}
# for project in uboot-v2009.01 uboot-v2013.01 uboot-v2014.01 uboot-v2015.01
for project in $(ls ${
PROJECT_ROOT_DIR}/src)
do
echo "setup project ${project}..."
setup_opengrok_project ${project}
done
while [ $(ps -ef | grep -c opengrok.jar) -ne 1 ]
do
${
USER} echo -n .
sleep 2
done
# sudo service tomcat restart
sudo systemctl restart tomcat.service
echo "done!"
2. ¿Cómo usarlo?
2.1 Guión de implementación
Debe instalar Tomcat y Opengrok antes de usarlo. Busque cómo instalarlo usted mismo.
Luego haga la siguiente configuración en el archivo de script:
# opengrok 安装目录
OPENGROK_APP_DIR=/opt/opengrok/dist/opengrok-1.7.42
# tomcat 安装目录
TOMCAT_APP_DIR=/opt/tomcat/apache-tomcat-10.0.27
# 项目根目录
PROJECT_ROOT_DIR=/public/opengrok
# 服务器访问地址
SERVER_URL=http://localhost:8000
# 使用普通用户执行 sudo 命令: "sudo -u username command"
USER="sudo -u guyongqiangx"
El último elemento es usar sudo para realizar operaciones de usuario normales, por lo que debe proporcionar el nombre de usuario del usuario normal.
2.2 Preparar el código del proyecto
Luego coloque todos los códigos relacionados con el proyecto en el subdirectorioPROJECT_ROOT_DIR
del directorio raíz del proyecto ( ) , similar a lo siguiente:src
/public/opengrok$ tree . -L 2
.
├── setup-opengrok-projects.sh
└── src
├── uboot-v2009.01
├── uboot-v2013.01
├── uboot-v2014.01
├── uboot-v2015.01
├── uboot-v2016.01
├── uboot-v2017.01
├── uboot-v2018.01
├── uboot-v2019.01
├── uboot-v2020.01
├── uboot-v2021.01
├── uboot-v2022.01
└── uboot-v2023.01
13 directories, 1 file
De forma predeterminada, el script analiza todas las carpetas en los src
subdirectorios y crea un elemento con el nombre de esa carpeta.
Si solo desea operar en ciertas carpetas específicas, puede modificar la lista de elementos de configuración del script, similar a la siguiente:
for project in uboot-v2009.01 uboot-v2013.01 uboot-v2014.01 uboot-v2015.01
# for project in $(ls ${PROJECT_ROOT_DIR}/src)
do
echo "setup project ${project}..."
setup_opengrok_project ${project}
done
2.3 Ejecute el script para configurar todos los elementos
Una vez que el código esté listo, ejecute el script con permiso sudo en el directorio raíz del proyecto, de la siguiente manera:
/public/opengrok$ sudo bash setup-opengrok-projects.sh
[sudo] password for guyongqiangx:
setup project uboot-v2009.01...
index project uboot-v2009.01 in background...
setup project uboot-v2013.01...
index project uboot-v2013.01 in background...
...
setup project uboot-v2022.01...
index project uboot-v2022.01 in background...
setup project uboot-v2023.01...
index project uboot-v2023.01 in background...
..............done!
Después de ejecutar el script hay una larga espera hasta que la salida del script muestra "¡Listo!"
El script debe ejecutarse en modo sudo, ya que algunas operaciones requieren autorización sudo para modificar archivos en el directorio de instalación de tomcat.
Entre ellos, el registro de los datos del proyecto de índice se redirige al index.log
archivo , por ejemplo:
/public/opengrok$ ls -lh log/uboot-v2009.01/
total 16M
-rw-r--r-- 1 root root 138K Feb 11 23:55 index.log
-rw-r--r-- 1 guyongqiangx users 16M Feb 11 23:55 opengrok0.0.log
2.4 Estructura de directorios del proyecto
Una vez configurado el proyecto, la estructura de directorios es la siguiente:
/public/opengrok$ tree . -L 2
.
├── data
│ ├── uboot-v2009.01
│ ...
│ └── uboot-v2023.01
├── etc
│ ├── uboot-v2009.01
│ ...
│ └── uboot-v2023.01
├── log
│ ├── uboot-v2009.01
│ ...
│ └── uboot-v2023.01
├── setup-opengrok-projects.sh
└── src
├── uboot-v2009.01
├── ...
└── uboot-v2023.01
52 directories, 1 file
en,
- src es el código de cada proyecto
- data son los datos indexados por cada proyecto
- etc es el archivo de configuración correspondiente para cada proyecto
- log es el registro de cada operación de índice del proyecto y análisis
3. Preguntas
Actualmente, los proyectos múltiples creados de esta manera funcionan, pero cambiar entre proyectos mientras se navega es engorroso.
Quiero poder cambiar entre el mismo archivo en diferentes proyectos de una manera relativamente simple, como la lista desplegable a continuación:
Haga clic en el elemento de la lista desplegable para ver el mismo archivo en el proyecto correspondiente /build/envsetup.sh
. Es muy conveniente cuando se ven varias versiones del mismo archivo. Si sabe cómo configurarlo, hágamelo saber. Muchas gracias ~