这里以Nacos为例。
Nacos 启动是通过sh startup.sh -m standalone
指令,这里主要是 startup.sh 脚本。
通过查看 startup.sh 脚本可以看到 Nacos 启动是通过java -jar
启动了 nacos-server.jar 包
export BASE_DIR=`cd $(dirname $0)/..; pwd`
export SERVER="nacos-server"
JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/${SERVER}.jar"
if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; then
nohup "$JAVA" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
else
nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
fi
找到 nacos-server.jar 包后解压,从MANIFEST.MF文件中找到启动类(Start-Class),再从源码中找到这个包就可以找到启动类了。
不要试图一次性阅读整个项目的代码。选择一个合适的入口点,通常是一个主要的类或方法,然后从那里开始深入研究。逐步扩展你的理解。
比如在看源码时,如果方法中存在if
语句块,且语句块后面还有语句时,第一次阅读时可以略过if
语句块,直接看后面的逻辑。
if
语句块表示存在其他的情况需要考虑,而在第一次阅读时不需要过多的发散学习。
先把主线逻辑弄明白,第二遍、第三遍阅读源码时再去细看if
语句块逻辑。
使用IDE来浏览源码,这类工具通常提供了代码导航、搜索、跳转到定义等功能,在阅读源码的时候更容易找到方法引用。
并且可以通过Debug方式,在debugger视图中追踪方法的调用栈,更快的定位代码的执行流程,方便理解源码逻辑。
在阅读源码时,编写自己的注释和笔记,这有助于加深对源码的理解,并可以在以后查阅使用,节省之后的检索时间。
此外,在看懂源码后,还可以尝试将理解的源码逻辑可视化,通过绘制流程图和类图的方式,加深理解源码项目的结构和工作原理。