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

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


当前回答

使用这个. .你可以在类路径..中找到任何文件。保证. .

import java.net.URL;
import java.net.URLClassLoader;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class FileFinder {

    public static void main(String[] args) throws Exception {

        String file = <your file name>;

        ClassLoader cl = ClassLoader.getSystemClassLoader();

        URL[] urls = ((URLClassLoader)cl).getURLs();

        for(URL url: urls){
            listFiles(file, url);
        }
    }

    private static void listFiles(String file, URL url) throws Exception{
        ZipInputStream zip = new ZipInputStream(url.openStream());
          while(true) {
            ZipEntry e = zip.getNextEntry();
            if (e == null)
              break;
            String name = e.getName();
            if (name.endsWith(file)) {
                System.out.println(url.toString() + " -> " + name);
            }
          }
    }

}

其他回答

你可以使用locate和grep:

locate jar | xargs grep 'my.class'

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

只需使用FindClassInJars util,这是一个简单的swing程序,但很有用。您可以在http://code.google.com/p/find-class-in-jars/上查看源代码或下载jar文件

再加上一个工具……这是一个非常简单和有用的窗口工具。你点击一个简单的exe文件,给它一个目录来搜索,一个类名,它会找到包含该类的jar文件。是的,它是递归的。

http://sourceforge.net/projects/jarfinder/

grep -l "classname" *.jar

告诉你罐子的名字

find . -name "*.jar" -exec jar -t -f {} \; | grep  "classname"

给你类的包

有点晚了,但无论如何……

我一直在使用JarBrowser查找在哪个jar中存在一个特定的类。它有一个易于使用的图形用户界面,允许您浏览所选路径中所有罐子的内容。