# 搜索源码中 import 了某个类的地方
grep -rn "import.*com\.example\.MyClass" src/
grep -roh "import cn\.hutool\.[a-zA-Z0-9_.]*" --include="*.java" | sort -u
grep -roEh "import (static )?cn\.hutool\.[a-zA-Z0-9_.]*" --include="*.java" | sort -u
# 搜索整个项目(含子模块)中引用某个类名
grep -rn "MyClass" --include="*.java" .
# 搜索是否引用了某个 JAR 的包前缀
grep -rn "import.*com\.fasterxml\.jackson" --include="*.java" .
## jdeps(JDK 自带,分析 class 文件依赖)
# 分析某个 JAR 依赖了哪些其他 JAR 的类
jdeps -verbose:class mylib.jar
# 反向:查找哪些 class 引用了 MyClass
jdeps -verbose:class -filter:none *.jar 2>/dev/null | grep "MyClass"
# 分析整个项目所有 JAR,找谁引用了某个类
find . -name "*.jar" | xargs -I{} jdeps -verbose:class {} 2>/dev/null | grep "com.example.MyClass"
# 1. 列出所有类名差异
diff <(jar tf a.jar | grep '\.class$' | sort) \
<(jar tf b.jar | grep '\.class$' | sort)
# 2. 导出所有类的方法+字段签名,再做 diff
javap_dump() {
local jar=$1 out=$2
tmpdir=$(mktemp -d)
unzip -q "$jar" -d "$tmpdir"
find "$tmpdir" -name '*.class' | sort | while read f; do
javap -p -s "$f" 2>/dev/null
done > "$out"
rm -rf "$tmpdir"
}
javap_dump a.jar /tmp/a.txt
javap_dump b.jar /tmp/b.txt
diff /tmp/a.txt /tmp/b.txt | less
版权归属:
天明
许可协议:
本文使用《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》协议授权
评论区