在几十个 JAR 文件中的某个地方找到一个类?

新手上路,请多包涵

如何在大量 jar 文件中找到特定的类名?

(寻找实际的类名,而不是引用它的类。)

原文由 Kapsh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 996
2 个回答

Eclipse 可以做到这一点,只需创建一个(临时)项目并将您的库放在项目类路径中。然后你可以很容易地找到课程。

我想到的另一个工具是 Java Decompiler。它可以一次打开很多罐子,也有助于查找类。

原文由 Andreas Dolk 发布,翻译遵循 CC BY-SA 2.5 许可协议

Unix

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

它是这样工作的:

  1. for /R %G in (*.jar) do - 遍历所有JAR文件,递归遍历目录;将文件名存储在 %G 中。
  2. @jar -tvf "%G" | - 运行 Java Archive 命令以列出给定存档中的所有文件名,并将结果写入标准输出; @ 符号禁止打印命令的调用。
  3. find "ClassName" > NUL - 搜索标准输入,从 jar 命令的输出管道,为给定的类名;这会将 ERRORLEVEL 设置为 1,前提是存在匹配项(否则为 0)。
  4. && echo %G - iff ERRORLEVEL 非零,将 Java 存档文件名写入标准输出(控制台)。

网络

使用扫描 JAR 文件的 搜索引擎

原文由 Dave Jarvis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题