Найти файл банки, учитывая имя класса?

Методы, обрисованные в общих чертах выше, описывают Ваши опции вполне прилично. Но что видят пользователи? Я не могу вообразить, как основной конфликт как это между Вами и кто бы ни ответственен за программное обеспечение, не может закончиться в беспорядке и антагонизме с пользователями.

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

РЕДАКТИРОВАНИЕ:

я выиграю, мои первые "восстанавливают после удаления" и признаются, что отправили вышеупомянутое, когда этот вопрос сначала появился. Я, конечно, пошел на попятный, когда я видел, что это было от JOEL SPOLSKY. Но похоже, что это приземлилось где-нибудь рядом. Не нужны голоса, но я помещу его на запись.

IME, триггеры так редко правильный ответ для чего-либо кроме мелкомодульных ограничений целостности вне области бизнес-правил.

62
задан aperkins 30 September 2009 в 20:07
поделиться

10 ответов

Сохраните это как findclass.sh (или как-то еще), поместите его на свой путь и сделайте исполняемым:

#!/bin/sh
find "$1" -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} '$2'' \;

Первый параметр - это каталог для рекурсивного поиска, а второй параметр - обычный выражение (обычно это простое имя класса) для поиска.

$ findclass.sh . WSSubject

Сценарий полагается на параметр -t команды jar (которая перечисляет содержимое) и выполняет поиск каждой таблицы содержимого, помечая любые совпадения с путем к JAR файл, в котором он был найден.

81
ответ дан 24 November 2019 в 16:42
поделиться

I recommend using Maven, Eclipse and m2eclipse.

Step 1 - add specific import

alt text

Step 2 - find and download (automatically) desired jar

alt text

0
ответ дан 24 November 2019 в 16:42
поделиться

locate .jar | xargs grep com.ibm.websphere.security.auth.WSSubject

0
ответ дан 24 November 2019 в 16:42
поделиться

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

1
ответ дан 24 November 2019 в 16:42
поделиться

В Windows запустите cmd.exe и введите:

  for %i in (*.jar) do @jar tvf %i | find "/com/company/MyClass.class"

Банки должны находиться в текущем каталоге. For также имеет параметр / R, который принимает каталог и позволяет выполнять рекурсивный поиск.

Если Jar.exe отсутствует на вашем пути, вы можете сделать что-то вроде @C: \ jdk \ bin \ jar.exe.

]
3
ответ дан 24 November 2019 в 16:42
поделиться

You could try services like:

Or

Or

  • A maven enterprise repository with a search feature e.g. Nexus (OFC, this would only work if the jars you're looking for are indexed i.e. installed in the repository)

PS: Jarhoo has teamed up with Javacio.us to provide 100,000 Java developers with free access to Jarhoo via links integrated with their Google search results. Subscription to Javacio.us is free and open to anyone with a Google account. For more information, please visit the Jarhoo offer page at Javacio.us.

4
ответ дан 24 November 2019 в 16:42
поделиться

Не существует "официального" Java-способа сделать это AFAIK.

Я обычно ищу это с помощью find и jar ], чтобы просмотреть все файлы jar в данном дереве.

> find . -name \*.jar -print -exec jar tf {} oracle/sql/BLOB.class \;
./v2.6.1/lib/csw_library.jar
./v2.6.1/lib/oracle_drivers_12_01.jar
oracle/sql/BLOB.class

Если вы работаете в Windows и не хотите устанавливать Cygwin, то я полагаю, вам придется написать пакетный скрипт для поиска файлов jar.

13
ответ дан 24 November 2019 в 16:42
поделиться

Распечатываю список по ходу, чтобы я мог видеть, что проверяю. В основном я ищу в каталоге lib / app, но вы можете заменить его на местоположение.

например,

for jar in $(find some_dir/lib -name "*.jar" ); 
do
echo -------------$jar-------------------
jar -tf $jar | grep TheNameOfTheClassImLookingFor
done
2
ответ дан 24 November 2019 в 16:42
поделиться

Если grep в вашей системе (например, Solaris) не имеет -H и --label, как в примере Дэна Дайера, вы можете использовать:

find . -name '*.jar' -type f | xargs -i bash -c "jar -tvf {}| tr / . | grep WSSubject && echo {}"
5
ответ дан 24 November 2019 в 16:42
поделиться

Попробуйте найти findjar.com. Если он находится в общественном достоянии, вы должны его получить. Есть еще mavenjava.com (но этот сайт, похоже, не работает)

3
ответ дан 24 November 2019 в 16:42
поделиться
Другие вопросы по тегам:

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