侧边栏壁纸
  • 累计撰写 101 篇文章
  • 累计创建 41 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

shell-类搜索、jar比对

天明
2026-07-08 / 0 评论 / 0 点赞 / 0 阅读 / 0 字 / 正在检测是否收录...
# 搜索源码中 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

0

评论区