как найти файл jar, содержащий определение класса? [закрыто]

29
задан luiscolorado 23 March 2012 в 14:31
поделиться

6 ответов

@ Никита Рыбак: AstroGrep для Windows - наш друг: http://astrogrep.sourceforge.net/

0
ответ дан 28 November 2019 в 01:01
поделиться

Вы всегда можете добавить справочную библиотеку в свой проект в Eclipse, а затем в обозревателе пакетов, просто разворачивайте пакеты в файле JAR, пока не найдете нужный класс.

0
ответ дан 28 November 2019 в 01:01
поделиться

используйте это:

public class Main {

    private static final String SEARCH_PATH = "C:\\workspace\\RPLaunch";
    private static String CLASS_FILE_TO_FIND =
            "javax.ejb.SessionBean";
    private static List<String> foundIn = new LinkedList<String>();

    /**
     * @param args the first argument is the path of the file to search in. The second may be the
     *        class file to find.
     */
    public static void main(String[] args) {
        File start;
        new Scanner(args[0]);
        if (args.length > 0) {
            start = new File(args[0]);
            if (args.length > 1) {
                CLASS_FILE_TO_FIND = args[1];
            }
        } else {
            start = new File(SEARCH_PATH);
        }
        if (!CLASS_FILE_TO_FIND.endsWith(".class")) {
            CLASS_FILE_TO_FIND = CLASS_FILE_TO_FIND.replace('.', '/') + ".class";
        }
        search(start);
        System.out.println("------RESULTS------");
        for (String s : foundIn) {
            System.out.println(s);
        }
    }

    private static void search(File start) {
        try {
            final FileFilter filter = new FileFilter() {
                public boolean accept(File pathname) {
                    return pathname.getName().endsWith(".jar") || pathname.isDirectory();
                }
            };
            for (File f : start.listFiles(filter)) {
                if (f.isDirectory()) {
                    search(f);
                } else {
                    searchJar(f);
                }
            }
        } catch (Exception e) {
            System.err.println("Error at: " + start.getPath() + " " + e.getMessage());
        }
    }

    private static void searchJar(File f) {
        try {
            System.out.println("Searching: " + f.getPath());
            JarFile jar = new JarFile(f);
            ZipEntry e = jar.getEntry(CLASS_FILE_TO_FIND);
            if (e == null) {
                e = jar.getJarEntry(CLASS_FILE_TO_FIND);
            }
            if (e != null) {
                foundIn.add(f.getPath());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
1
ответ дан 28 November 2019 в 01:01
поделиться

Очень часто я наследую код, который жалуется на несуществующий класс, и это происходит потому, что jar-файл не включен в classpath.

Если его нет в classpath, то, скорее всего, у вас вообще нет самого JAR-файла. Поиск с помощью встроенной функции Eclipse Ctrl+Shift+T мало чем поможет. Обычно по имени пакета можно "догадаться", откуда в интернете можно взять JAR-файл. Например, класс org.apache.commons.lang.XXX доступен по адресу http://commons.apache.org/lang.

Для неочевидных я сам использую http://grepcode.com, поисковик исходного кода JAR.

2
ответ дан 28 November 2019 в 01:01
поделиться

Я обычно использую для этого bash: grep -lr "ClassName". Уловка в том, что имена никак не кодируются. Вы можете открыть файл jar в текстовом редакторе, и вы увидите их. (Вы даже можете включить имя пакета в поисковый запрос.)

Я подозреваю, что есть и эквивалент Windows.

5
ответ дан 28 November 2019 в 01:01
поделиться

В тех же строках, что и ответ BalusC (я еще не могу публиковать комментарии и ссылаться на 2 URL-адреса, без репутации :(), вы можете найти банку благодаря этим двум механизмам поиска банок: - http://www.jarfinder.com/ - findjar

11
ответ дан 28 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: