Найти файл JAR с именем класса? - PullRequest
62 голосов
/ 30 сентября 2009

Это, должно быть, очень простой вопрос для разработчиков Java, но как лучше всего найти подходящий файл jar с именем класса ?

Например, учитывая " com.ibm.websphere.security.auth.WSSubject ", как вы отследите соответствующий файл jar? ("Google" не тот ответ, который я ищу!)

Документы java не дают никаких намеков на файл jar, и, очевидно, имена файлов jar сами по себе не дают подсказки.

Должен быть «поиск локальных jar» или что-то вроде «автоматического разрешения зависимостей», трюк в мире java. В идеале, я ищу «официальный» способ сделать это. Я оказался на машине с Windows без Cygwin.

Ответы [ 17 ]

1 голос
/ 02 октября 2013

В Windows PowerShell вы можете использовать эту команду. В нем перечислены все JAR-файлы, с которыми он сталкивается, но есть дополнительная строка, которую очень легко определить, где он также находит ваш класс.

Get-ChildItem -recurse -Filter *.jar | Foreach {echo $_.fullname; c:\somepath\JDK\BIN\jar tvf $_.fullname | Select-String -pattern "Cabbages.class"}
1 голос
/ 10 мая 2012

Я использую jarscan . Это исполняемый файл JAR, который может рекурсивно искать всю структуру папок для JAR-файлов, которые содержат искомый класс. Он ищет по имени класса, имени пакета или регулярному выражению.

1 голос
/ 01 октября 2009

Учитывая ваш комментарий о попытке обработки зависимостей, я бы сосредоточился на том, какие библиотеки вы используете. Зная это, вы будете знать, какие банки должны быть на пути к классам, и вы можете обратить на это внимание. Существуют также компоновщики управления зависимостями (Maven и Ant являются двумя популярными), которые могут упаковывать проекты с их зависимостями внутри. Однако, в конце концов, разработчик должен знать, какие у него зависимости, и обратить внимание на требования к этим зависимостям. Это одна из причин, по которой использование среды IDE, такой как Eclipse, и инструментов сборки, таких как Maven или Ant, настолько хороши в больших проектах, например, когда у вас есть 20 зависимостей для проекта, это может стать довольно неуправляемым.

0 голосов
/ 22 ноября 2017

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

#!/usr/bin/env bash

if [[ ($# -ne 1) && ($# -ne 2) ]]
then
    echo "usage is $0 <grep RegEx to look for in contents of jar> [<top-of-folder-hierarchy> or, if missing, current dir]"
else
    REG_EXP=$1
    DIR=${2:-.}
    if [ ! -d $DIR ]; then
        echo "directory [$DIR] does not exist";
        exit 1;
    fi
    find "$DIR" -name "*.jar" -exec sh -c '
    (test -e {})
    exitStatus=$?
    if [ "$exitStatus" -eq 0 ]; then # this is done to avoid broken symlinks
        jar -tf {}|grep -i -H --label {} '$REG_EXP'
    fi
' \;
fi
0 голосов
/ 12 июля 2013

если вы все еще ищете WSSubject, тогда jar - это wssec.jar. Класс WSSecurityException внутри sas.jar

0 голосов
/ 30 сентября 2009

найти .jar | xargs grep com.ibm.websphere.security.auth.WSSubject

0 голосов
/ 01 октября 2009

Я рекомендую использовать Maven, Eclipse и m2eclipse.

Шаг 1 - добавить определенный импорт

alt text

Шаг 2 - найти и загрузить (автоматически) желаемую банку

alt text

...