找到给出类名的jar文件?

Jef*_*ght 62 java dependencies jar

对于Java开发人员来说,这必须是一个非常基本的问题,但是在给定类名的情况下找到合适的jar文件的最佳方法是什么?

例如,给定" com.ibm.websphere.security.auth.WSSubject ",如何跟踪相应的jar文件?("谷歌"不是我正在寻找的答案!)

Java文档不给jar文件的任何暗示,明显的jar的名称文件本身不提供线索.

在java世界中必须有一个"搜索本地jar"或某种"自动解析依赖"技巧.理想情况下,我正在寻找"官方"的方式来做到这一点.我碰巧在没有cygwin的Windows机器上.

Dan*_*yer 81

将其保存为findclass.sh(或其他),将其放在路径上并使其可执行:

#!/bin/sh
find "$1" -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} '$2'' \;
Run Code Online (Sandbox Code Playgroud)

第一个参数是递归搜索的目录,第二个参数是要搜索的正则表达式(通常只是一个简单的类名).

$ findclass.sh . WSSubject
Run Code Online (Sandbox Code Playgroud)

该脚本依赖于jar命令的-t选项(列出内容)并greps每个目录,并将所有匹配项标记为找到它的JAR文件的路径.


ipo*_*voy 14

我已经为此编写了一个程序:https: //github.com/javalite/jar-explorer 它还将反编译现有的字节代码以显示接口,方法,超类,将显示其他资源的内容 - 文本,图像,html等


Dav*_*sta 13

没有"官方"Java方法来做这个AFAIK.

我通常寻找它的方法是使用findjar来查看给定树中的所有jar文件.

> find . -name \*.jar -print -exec jar tf {} oracle/sql/BLOB.class \;
./v2.6.1/lib/csw_library.jar
./v2.6.1/lib/oracle_drivers_12_01.jar
oracle/sql/BLOB.class
Run Code Online (Sandbox Code Playgroud)

如果你在Windows上并且不想安装Cygwin,那么我想你必须编写一个批处理脚本来找到jar文件.


Pas*_*ent 5

您可以尝试以下服务:

或者

或者

  • 具有搜索功能的 Maven 企业存储库,例如 Nexus(OFC,只有当您要查找的 jar 被索引(即安装在存储库中)时,这才有效)

PS:Jarhoo 与 Javacio.us 合作,为 100,000 名 Java 开发人员提供通过与 Google 搜索结果集成的链接免费访问 Jarhoo 的服务。Javacio.us 的订阅是免费的,并向任何拥有 Google 帐户的人开放。欲了解更多信息,请访问Javacio.us 上的 Jarhoo 优惠页面


小智 5

如果您的系统上的grep(例如Solaris)没有Dan Dyer的示例中使用的-H和--label,则可以使用:

find . -name '*.jar' -type f | xargs -i bash -c "jar -tvf {}| tr / . | grep WSSubject && echo {}"
Run Code Online (Sandbox Code Playgroud)


Mar*_*tus 5

要搜索当前目录下的所有jar并返回包含类abcD的jar,请执行以下操作:

find . -iname *.jar | while read JARF; do jar tvf $JARF | grep a/b/c/D.class && echo $JARF ; done
Run Code Online (Sandbox Code Playgroud)

它将报告类abcD的所有实例(或具有类似后缀的类),并仅打印包含它的jar.

典型输出:

$ find . -iname *.jar | while read JARF; do jar tvf $JARF | grep Log.class && echo $JARF ; done
479 Fri Oct 10 18:19:40 PDT 2003 org/apache/commons/logging/Log.class
3714 Fri Oct 10 18:19:40 PDT 2003 org/apache/commons/logging/impl/Log4JCategoryLog.class
1963 Fri Oct 10 18:19:40 PDT 2003 org/apache/commons/logging/impl/NoOpLog.class
9065 Fri Oct 10 18:19:40 PDT 2003 org/apache/commons/logging/impl/SimpleLog.class
./WebContent/WEB-INF/lib/commons-logging.jar
Run Code Online (Sandbox Code Playgroud)