如何找到包含类定义的jar文件?[已关闭]

2022-09-01 07:14:00

有没有一个工具,插件或脚本可以用来在一堆jar文件中找到java类?

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

我显然更喜欢eclipse插件,但我对任何与Windows兼容的软件都持开放态度。

我知道。。。Windows不是我的选择,但这就是我必须使用的东西。

谢谢!

路易斯

附言:感谢您的回答。在查看了一些回复后,我意识到我应该更好地解释我的方案。我们有一个下载或创建的JAR文件库,但有时该类会在某个地方在线。


答案 1

(这是对我在以前版本的答案中的脚本的改进,因为它以些特殊/丑陋的引用为代价产生了更清晰的输出。

我构建了一个脚本()来做到这一点。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

然后,您可以使用以下命令调用它:

$findinjars a.b.c.d.Class [directoryTreeRoot or, if missing, current dir]

或者只是

$findinjars partOfClassName [directoryTreeRoot or, if missing, current dir]

完全限定类名中的点字符将以“任何字符”的正则表达式意义上解释,但这没什么大不了的,因为这是一个启发式实用程序(这就是为什么它太不区分大小写的原因)。通常我不会打扰完整的类名,只需键入其中的一部分。


答案 2

在与BalusC的答案相同的行中(我还不能发表评论,也不能链接2个url,没有声誉:(),你可以找到一个罐子,这要归功于这2个jar finder引擎: - http://www.jarfinder.com/ - findjar