find一个给定类名的jar文件?

这对于Java开发人员来说肯定是一个非常基本的问题,但是给出一个类名称来find合适的jar文件的最好方法是什么呢?

例如,给定“ com.ibm.websphere.security.auth.WSSubject ”,你如何find合适的jar文件? (“谷歌”不是我要找的答案!)

java文档不提供任何jar文件的提示,显然jar文件本身的名字本身并不提供任何线索。

在Java世界中必须有一个“search本地jar子”,或者某种“自动解决的依赖关系”。 理想情况下,我正在寻找“官方”的方式来做到这一点。 我碰巧在没有cygwin的Windows机器上。

保存为findclass.sh(或其他),把它放在你的path,并使其可执行:

#!/bin/sh find "$1" -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} '$2'' \; 

第一个参数是要recursionsearch的目录,第二个参数是正则expression式(通常只是一个简单的类名)来search。

 $ findclass.sh . WSSubject 

该脚本依赖jar命令(列出内容)的-t选项,并对每个内容表进行刷新,并标记与find该JAR文件的path相匹配的任何匹配项。

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

没有“官方”的Java方式来做这个AFAIK。

我通常search的方式是使用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 

如果你在Windows上,不想安装Cygwin,那么我想你将不得不写一个批处理脚本来查找jar文件。

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

 find . -name '*.jar' -type f | xargs -i bash -c "jar -tvf {}| tr / . | grep WSSubject && echo {}" 

要search当前目录下的所有jar,并返回包含class abcD的那个(或多个),请执行以下操作:

 find . -iname *.jar | while read JARF; do jar tvf $JARF | grep a/b/c/D.class && echo $JARF ; done 

它将报告类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 

你可以尝试像这样的服务:

要么

  • 带有Airbear软件的IndexZip插件的 Google桌面

要么

  • 具有searchfunction的Maven企业存储库(例如Nexus(OFC),这只有在您正在查找的jar子被索引时才会起作用,即安装在存储库中)

PS: Jarhoo与Javacio.us合作,通过与Googlesearch结果集成的链接为100,000个Java开发人员提供免费访问Jarhoo的权限。 订阅Javacio.us是免费的,并向所有使用Google帐户的人开放。 欲了解更多信息,请访问Javacio.us的Jarhoo产品页面 。

在Windows中,运行cmd.exe并input:

  for %i in (*.jar) do @jar tvf %i | find "/com/company/MyClass.class" 

jar子必须在当前目录中。 对于还有一个/ R选项需要一个目录,并让你recursionsearch。

如果Jar.exe不在您的path中,则可以执行类似于@C:\ jdk \ bin \ jar.exe的操作。

试试findjar.com。 如果它在公共领域,你应该得到它。 有alos mavenjava.com(但该网站似乎是下来)

打印清单,所以我可以看到我正在检查。 大多数情况下我正在寻找一个lib / app目录,但是你可以用一个locate来代替find。

例如

 for jar in $(find some_dir/lib -name "*.jar" ); do echo -------------$jar------------------- jar -tf $jar | grep TheNameOfTheClassImLookingFor done 

鉴于您对试图处理依赖性的评论,我要做的就是关注您正在使用的库。 知道这一点,你会知道什么jar子必须在类path上,你可以注意到这一点。 还有依赖pipe理构build器(Maven和Ant是两个受欢迎的构build器),可以将项目与它们的依赖包打包在一起。 然而,最终,开发人员需要知道他们拥有哪些依赖关系,并关注这些依赖关系的需求。 这就是为什么像使用Eclipse这样的IDE,以及像Maven或Ant这样的构build工具在大型项目中如此之好的原因,因为当你有一个项目的20个依赖关系时,这可能变得非常难以pipe理。

我用jarscan 。 这是一个可执行的jar文件,可以recursionsearch包含您正在查找的类的jar的整个文件夹结构。 它按类名,包名或正则expression式进行search。

在Windows PowerShell中,你可以使用这个命令。 它列出了它遇到的所有JAR文件,但它有一个额外的线,很容易find它也可以find你的类。

 Get-ChildItem -recurse -Filter *.jar | Foreach {echo $_.fullname; c:\somepath\JDK\BIN\jar tvf $_.fullname | Select-String -pattern "Cabbages.class"} 

也有这个网站似乎是有用的。 http://www.findjar.com/

find.jar | xargs grep com.ibm.websphere.security.auth.WSSubject

如果你还在searchWSSubject,那么jar是wssec.jar。 sas.jar中的WSSecurityException类

我build议使用Maven,Eclipse和m2eclipse。

第1步 – 添加特定的导入

替代文字

第2步 – find并下载(自动)所需的jar子

替代文字