如何找到包含类定义的jar文件?

lui*_*ado 30 java windows search jar class

你最喜欢的工具,插件,脚本是什么,在一堆jar文件中找到一个java类?

我经常继承代码,抱怨一个不存在的类,这只是因为jar文件没有包含在类路径中.但是,什么jar文件是类?我可能没有JAR(所以我必须在线搜索),或者在类路径中添加JAR可能会产生重复的类定义问题.

我显然更喜欢eclipse插件,但我对任何适用于Windows的软件都是开放的.

我知道...... Windows不是我的选择,但这就是我的工作.

谢谢!

路易斯

PS谢谢你的回答.在回顾了一些回复之后,我意识到我应该更好地解释我的情景.我们有一个下载或创建的JAR文件库,但有时候这个类会在某个地方上线.

Mar*_*tus 38

(这是对我之前版本的答案中的脚本的改进,因为它以一些awk特殊/难看的引用的价格产生更清晰的输出.)

我已经构建了一个脚本(findinjars)来做到这一点.

#!/usr/bin/env bash
if [[ ($# -ne 1) && ($# -ne 2) ]]
then
    echo "usage is $0 <grep pattern to look for in 'jar tvf' output> [<top-of-dir-tree> or, if missing, current dir]"
else
    THING_TO_LOOKFOR="$1"
    DIR=${2:-.}
    if [ ! -d $DIR ]; then
        echo "directory [$DIR] does not exist";
        exit 1;
    fi
    find "$DIR" -iname \*.jar | while read f ; do (jar tf $f | awk '{print "'"$f"'" "  " $0}' | grep -i "$THING_TO_LOOKFOR") ; done
fi
Run Code Online (Sandbox Code Playgroud)

然后你可以调用它:

$findinjars a.b.c.d.Class [directoryTreeRoot or, if missing, current dir]
Run Code Online (Sandbox Code Playgroud)

要不就

$findinjars partOfClassName [directoryTreeRoot or, if missing, current dir]
Run Code Online (Sandbox Code Playgroud)

完全限定类名中的点字符将以"任何字符"的正则表达式进行解释,但这并不是什么大问题,因为这是一个启发式实用程序(这就是为什么它不区分大小写的BTW).通常我不打扰完整的类名,只需输入部分名称即可.


Fan*_* H. 12

与BalusC的答案相同(我无法发表评论,也没有链接2个网址,没有声誉:()),你可以通过这两个jar查找引擎找到一个罐子: - http://www.jarfinder.com/ - findjar


小智 6

我无数次遇到同样的问题,所以我写了一个小工具来找到它们.

一个简单的命令行:findclass MyClass -classpath ...

它为您的班级搜索目录,jar,zip,war和ear文件.几年前我写了它,并一直使用它.我认为其他人也可能觉得它很有用所以我上传到github.

它可以免费下载:https: //github.com/eurozulu/Findclass/tree/master/dist

如果你想查看源代码,它位于同一个站点:https: //github.com/eurozulu/Findclass/tree/master

如果你喜欢它,请让我知道给我那种温暖舒适的感觉:)


Wen*_* Li 6

一个更简单的命令.您不必使用'while-do',如果'grep'找到该类,请使用'&&'打印文件名.

find . -name '*.jar' -print0 |  xargs -0 -I '{}' sh -c 'jar tf {} | grep Hello.class &&  echo {}'
Run Code Online (Sandbox Code Playgroud)


Nik*_*bak 5

我通常使用bash:grep -lr "ClassName" . 诀窍是名称不以任何方式编码.你可以在文本编辑器中打开jar文件,你会看到它们.(您甚至可以在搜索查询中包含包名称.)

我怀疑,也有一些窗户相同.