如何在大量 jar 文件中找到特定的类名?
(寻找实际的类名,而不是引用它的类。)
Unix
在 Linux、其他 Unix 变体、Windows 上的 Git Bash 或 Cygwin 上,使用 jar
(或 unzip -v
)、grep
, 和 find
命令。
以下列出了与给定名称匹配的所有类文件:
for i in *.jar; do jar -tvf "$i" | grep -Hsi ClassName && echo "$i"; done
如果您知道要搜索的 Java 文件的整个列表,您可以使用(符号)链接将它们全部放在同一个目录中。
或者使用find
(区分大小写)查找包含给定类名的JAR文件:
find path/to/libs -name '*.jar' -exec grep -Hls ClassName {} \;
例如,要查找包含 IdentityHashingStrategy
的文件名称:
$ find . -name '*.jar' -exec grep -Hsli IdentityHashingStrategy {} \;
./trove-3.0.3.jar
如果 JAR 可以在系统中任何地方 并且 locate
命令可用:
for i in $(locate "*.jar");
do echo "$i"; jar -tvf "$i" | grep -Hsi ClassName;
done
语法变体:
find path/to/libs -name '*.jar' -print | \
while read i; do jar -tvf "$i" | grep -Hsi ClassName && echo "$i"; done
窗口
打开 command prompt ,切换到包含 JAR 文件的目录(或祖先目录),然后:
for /R %G in (*.jar) do @jar -tvf "%G" | find "ClassName" > NUL && echo %G
它是这样工作的:
for/R %G in (*.jar) do
- 循环遍历所有 JAR 文件,递归遍历目录;将文件名存储在 %G
中。
@jar -tvf "%G"|
- 运行 Java Archive 命令列出给定存档中的所有文件名,并将结果写入标准输出; @
符号禁止打印命令的调用。
find "ClassName"> NUL
- 搜索标准输入,从 jar 命令的输出通过管道获取给定的类名;如果有匹配项,这会将 ERRORLEVEL
设置为 1(否则为 0)。
&& echo %G
- 如果 ERRORLEVEL
不为零,则将 Java 归档文件名写入标准输出(控制台)。
网络
使用 search engine扫描 JAR 文件。
我是一名优秀的程序员,十分优秀!