如何在大量 jar 文件中找到特定的类名?
(寻找实际的类名,而不是引用它的类。)
原文由 Kapsh 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在大量 jar 文件中找到特定的类名?
(寻找实际的类名,而不是引用它的类。)
原文由 Kapsh 发布,翻译遵循 CC BY-SA 4.0 许可协议
On Linux, other Unix variants, Git Bash on Windows, or Cygwin, use the jar
(or unzip -v
), grep
, and 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
打开 命令提示符,切换到包含 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
- iff ERRORLEVEL
非零,将 Java 存档文件名写入标准输出(控制台)。使用扫描 JAR 文件的 搜索引擎。
原文由 Dave Jarvis 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
Eclipse 可以做到这一点,只需创建一个(临时)项目并将您的库放在项目类路径中。然后你可以很容易地找到课程。
我想到的另一个工具是 Java Decompiler。它可以一次打开很多罐子,也有助于查找类。