Найти класс где-то внутри десятков JAR-файлов? - PullRequest
227 голосов
/ 27 августа 2009

Как бы вы нашли конкретное имя класса во множестве jar-файлов?

(ищет фактическое имя класса, а не классы, которые ссылаются на него.)

Ответы [ 34 ]

0 голосов
/ 22 августа 2016

В Eclipse вы можете использовать старый, но все еще работающий плагин jarsearch

0 голосов
/ 27 августа 2009

В основном, позвольте мне взглянуть на корень возникшей проблемы. Если вы находитесь в новом проекте - почему бы не прийти к руководителю или техническому руководителю и не спросить его - как он отслеживает зависимости?

0 голосов
/ 28 апреля 2016

Используйте это .. вы можете найти любой файл в classpath .. гарантировано ..

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);
            }
          }
    }

}
0 голосов
/ 11 апреля 2016

Вы можете использовать locate и grep:

locate jar | xargs grep 'my.class'

Убедитесь, что вы запускаете updatedb перед использованием locate.

0 голосов
/ 15 февраля 2013

Немного опоздал на вечеринку, но тем не менее ...

Я использовал JarBrowser , чтобы найти, в каком jar присутствует определенный класс. Он имеет простой в использовании графический интерфейс, который позволяет просматривать содержимое всех банок по выбранному пути.

0 голосов
/ 06 июня 2014

Проверьте этот плагин на наличие затмения, которое может выполнить работу, которую вы ищете.

https://marketplace.eclipse.org/content/jarchiveexplorer

0 голосов
/ 19 августа 2013

Grepj - утилита командной строки для поиска классов в файлах jar. Я автор утилиты.

Вы можете запустить утилиту как grepj package.Class my1.jar my2.war my3.ear

Может быть предоставлено несколько файлов jar, ear, war. Для расширенного использования используйте find, чтобы предоставить список файлов для поиска.

0 голосов
/ 08 августа 2013

Это хорошо работает в MinGW (среда windows bash) ~ gitbash

Поместите эту функцию в ваш файл .bashrc в вашем домашнем каталоге:

# this function helps you to find a jar file for the class
function find_jar_of_class() {
  OLD_IFS=$IFS
  IFS=$'\n'
  jars=( $( find -type f -name "*.jar" ) )
  for i in ${jars[*]} ; do 
    if [ ! -z "$(jar -tvf "$i" | grep -Hsi $1)" ] ; then
      echo "$i"
    fi
   done 
  IFS=$OLD_IFS
}
0 голосов
/ 14 сентября 2009

Одна вещь, которую нужно добавить ко всему вышесказанному: если у вас нет доступного исполняемого файла jar (он поставляется с JDK, но не с JRE), вы можете использовать unzip (или WinZip, или что угодно) для выполнения то же самое.

0 голосов
/ 23 мая 2012

бесстыдная самореклама, но вы можете попробовать утилиту, которую я написал: http://sourceforge.net/projects/zfind

Он поддерживает наиболее распространенные архивные / сжатые файлы (jar, zip, tar, tar.gz и т. Д.) И в отличие от многих других jar / zip-искателей, поддерживает вложенные zip-файлы (zip в zip, jar в jar и т. Д.) До неограниченной глубины.

...