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

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


当前回答

你可以使用locate和grep:

locate jar | xargs grep 'my.class'

确保在使用locate之前运行updatedb。

其他回答

要在一个jar文件夹(及其子文件夹)中找到一个类: https://jarscan.com/

Usage: java -jar jarscan.jar [-help | /?]
                    [-dir directory name]
                    [-zip]
                    [-showProgress]
                    <-files | -class | -package>
                    <search string 1> [search string 2]
                    [search string n]

Help:
  -help or /?           Displays this message.

  -dir                  The directory to start searching
                        from default is "."

  -zip                  Also search Zip files

  -showProgress         Show a running count of files read in

  -files or -class      Search for a file or Java class
                        contained in some library.
                        i.e. HttpServlet

  -package              Search for a Java package
                        contained in some library.
                        i.e. javax.servlet.http

  search string         The file or package to
                        search for.
                        i.e. see examples above

例子:

java -jar jarscan.jar -dir C:\Folder\To\Search -showProgress -class GenericServlet

我一直在Windows上使用它,效果非常好。

findstr /s /m /c:"package/classname" *.jar, where

findstr.exe是Windows和参数的标准配置:

/s =递归 /m =如果有匹配,只打印文件名 /c =字面字符串(在这种情况下,你的包名+类名 以“/”分隔)

希望这能帮助到一些人。

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

我想到的另一个工具是Java反编译器。它可以一次打开很多罐子,还可以帮助查找类。

Grepj是一个命令行实用程序,用于在jar文件中搜索类。我是这个实用程序的作者。

你可以运行grepj package.Class my1.jar my2这样的实用程序。战争my3.ear

可以提供多个jar, ear, war文件。对于高级用法,使用find提供要搜索的jar列表。

查找jar文件的脚本:find_jar.sh

IFS=$(echo -en "\n\b") # Set the field separator newline

for f in `find ${1} -iname *.jar`; do
  jar -tf ${f}| grep --color $2
  if [ $? == 0 ]; then
    echo -n "Match found: "
    echo -e "${f}\n"
  fi
done
unset IFS

使用方法:./find_jar.sh <包含jar文件的顶级目录> <查找>的类名

这与这里给出的大多数答案相似。但是如果grep找到了什么,它只输出文件名。如果你想抑制grep输出,你可以重定向到/dev/null,但我更喜欢看到grep的输出,这样我就可以使用部分类名,并从显示的输出列表中找出正确的类名。

类名可以是简单类名如"String"也可以是完全限定名如"java.lang.String"