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

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

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

Ответы [ 34 ]

0 голосов
/ 30 апреля 2019

Чтобы найти класс в папке (и подпапках) группы 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
0 голосов
/ 17 апреля 2015

В среде Linux вы можете сделать следующее:

$ find <base_dir> -name *.jar -print0 | xargs -0 -l jar tf | grep <name>

Где name - это имя файла класса, который вы просматриваете внутри jar-файлов, распределенных по иерархии каталогов с корнем в base_dir .

0 голосов
/ 29 мая 2019

Имя файла: searchForFiles.py

import os, zipfile, glob, sys

def main():
    searchFile = sys.argv[1] #class file to search for, sent from batch file below (optional, see second block of code below)
    listOfFilesInJar = []
    for file in glob.glob("*.jar"):
        archive = zipfile.ZipFile(file, 'r')
        for x in archive.namelist():
            if str(searchFile) in str(x):
                listOfFilesInJar.append(file)

    for something in listOfFilesInJar:
        print("location of "+str(searchFile)+": ",something)

if __name__ == "__main__":
    sys.exit(main())

Вы можете легко запустить это, создав файл .bat со следующим текстом (замените «AddWorkflows.class» на файл, который вы ищете):

(Файл: CallSearchForFiles.bat)

@echo off
python -B -c "import searchForFiles;x=searchForFiles.main();" AddWorkflows.class
pause

Вы можете дважды щелкнуть CallSearchForFiles.bat для его запуска или вызвать его из командной строки «CallSearchForFiles.bat SearchFile.class»

Нажмите, чтобы увидеть пример выходных данных

0 голосов
/ 08 мая 2013

Следующий скрипт поможет вам

for file in *.jar
do
  # do something on "$file"
  echo "$file"
  /usr/local/jdk/bin/jar -tvf "$file" | grep '$CLASSNAME'
done
...