问题
你如何在很多jar文件中找到特定的类名?
(寻找实际的类名,而不是引用它的类。)
#1 热门回答(325 赞)
#Unix
使用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
#Windows
打开acommand 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命令列出给定存档中的所有文件名,并将结果写入标准输出; @符号禁止打印命令的调用。
- 找到"ClassName"> NUL - 从jar命令的输出中搜索标准输入,用于给定的类名;如果匹配则将ERRORLEVEL设置为1(否则为0)。
- && echo%G - 如果ERRORLEVEL非零,则将Java归档文件名写入标准输出(控制台)。
#Web
使用asearch engine,扫描JAR files。
#2 热门回答(53 赞)
前段时间,我为此编写了一个程序:https://github.com/javalite/jar-explorer
#3 热门回答(52 赞)
Eclipse可以做到这一点,只需创建一个(临时)项目并将库放在项目类路径上。然后你可以很容易地找到这些课程。
我想到的另一个工具是Java Decompiler。它可以同时打开很多罐子,也有助于找到课程。