在数十个JAR文件中的某个地方找到一个类?Unix窗户蹼
2022-08-31 05:16:54
如何在许多jar文件中找到特定的类名?
(查找实际的类名,而不是引用它的类。
如何在许多jar文件中找到特定的类名?
(查找实际的类名,而不是引用它的类。
在 Linux 上,其他 Unix 变体,Windows 上的 Git Bash 或 Cygwin,都使用 (or )、和命令。jar
unzip -v
grep
find
下面列出了与给定名称匹配的所有类文件:
for i in *.jar; do jar -tvf "$i" | grep -Hsi ClassName && echo "$i"; done
如果您知道要搜索的整个 Java 归档文件列表,则可以使用(符号)链接将它们全部放在同一目录中。
或者使用(区分大小写)查找包含给定类名的 JAR 文件:find
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
打开命令提示符,切换到包含 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归档命令列出给定归档中的所有文件名,并将结果写入标准输出;该符号禁止打印命令的调用。@
find "ClassName" > NUL
- 搜索标准输入,从jar命令的输出管道,用于给定的类名;这将设置为 1 如果存在匹配项(否则为 0)。ERRORLEVEL
&& echo %G
- iff 为非零,将 Java 归档文件名称写入标准输出(控制台)。ERRORLEVEL
使用扫描 JAR 文件的搜索引擎。
Eclipse可以做到这一点,只需创建一个(临时)项目并将你的库放在项目类路径上。然后,您可以轻松找到这些类。
我想到的另一个工具是Java Decompiler。它可以一次打开很多罐子,也有助于找到类。