Java: как узнать, какой файл jar использовать с учетом имени класса?

Для класса org.eclipse.ui.views.navigator.ResourceNavigator, например, как мне узнать, какой файл jar использовать? Я знаю, что это на org.eclipse.ui.ide, но как мне это узнать?

Редактировать: Спасибо всем, кто ответил. Как и многие другие вещи, есть несколько способов снять шкуру с этой кошки. Я бы хотел, чтобы javadoc содержал эту информацию. Пока что это разные методы:

  1. Без Интернета, Eclipse или NetBeans:

    for f in `find . -name '*.jar'`;  do echo $f && jar tvf $f | grep -i $1; done
    
  2. Если вы хотите узнать это локально с помощью Eclipse:

  3. Если вы хотите узнать из Интернета или у вас еще нет баночки:

фу! Такой уродливый способ найти. Я предпочитаю: для f в $ (find. -Name * .jar); сделать эхо $ f && jar tvf $ f | grep -i $ 1; Готово

Eldelshell 05.01.2009 13:11

Приятно, что вы составили резюме ответов. @ Уберсолдат, почему это так уродливо?

luiscolorado 17.08.2010 17:31

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

Eldelshell 17.08.2010 17:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
22
3
54 954
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

Обычно я делаю jar -vtf foo.jar, чтобы получить список всех файлов классов. Не самый практичный способ, но удобный. Конечно, вы можете комбинировать результат с помощью grep.

Это поможет вам перейти от JAR -> class, но не наоборот, как он и просил ...

Yuval Adam 08.11.2008 23:14

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

PhiLho 09.11.2008 00:06

Если у вас есть 1 файл класса, который нужно найти в 1000 JAR, у вас проблема ... (И это не редкость, на моем рабочем месте я работаю с тысячами JAR)

Yuval Adam 09.11.2008 11:25

Используйте локатор классов / JAR:

http://classlocator.sourceforge.net/

[РЕДАКТИРОВАТЬ] Это не очевидно даже из документации ClassLocator (!), Но похоже, что это плагин Eclipse.

Если у вас есть банка в пути к классу / пути проекта, нажмите CTRL-SHIFT-T и введите имя ... банка будет отображаться внизу.

Если у вас нет класса в пути сборки а) собрать фиктивный проект, содержащий все банки б) Я думаю, что есть плагин для поиска jar-файлов от IBM Alphaworks (но он может быть устаревшим)

Ctrl + Shift + T? В какой программе? Какая система?

PhiLho 09.11.2008 00:00

@PhiLho в затмении. Это то, чем был отмечен исходный вопрос.

Konstantin Tarashchanskiy 20.04.2012 22:34

@KonstantinNaryshkin Doh! за его отсутствие, -1 в исходном сообщении, поскольку он полагается только на теги, отсутствует, чтобы указать это в заголовке или в самом сообщении. Учитывая, что большинство ответов здесь находятся за пределами Eclipse, я не единственный, кто это пропустил. (Или мы думали, что это нужно только для того, чтобы найти классы Eclipse?) Общие ответы в любом случае полезны. Примечания: спасибо за ответ на мой вопрос (лучше поздно, чем никогда); и дать ответ с помощью сочетания клавиш немного хрупко, поскольку их можно изменить (я делаю, но не этот). Здесь это ярлык для функциональности открытого типа.

PhiLho 25.04.2012 12:33

Используйте это: плагин netbeans

Или услуга jarFinder

Ответ принят как подходящий

У вас также есть этот плагин eclipse: jarclassfinder

Пользователь вводит имя класса, который не найден (или имя класса, к которому проект Java должен получить доступ). Плагин будет искать в выбранном каталоге (и подкаталогах) файлы JAR, содержащие этот класс.

Все результаты отображаются в таблице в настраиваемом представлении. Затем пользователь может просмотреть эту таблицу и выбрать файл JAR для добавления в путь сборки своего проекта Java. Затем пользователь щелкает правой кнопкой мыши запись в таблице и в контекстном меню выбирает путь сборки, в который ее нужно добавить.


Обновление 2013, как я упоминал в «поиск в файлах .jar eclipse», больше не поддерживается, и альтернативы немногочисленны.

Как комментирует Sunleoниже:

с Eclipse, Ctfl + Shift + T остается самой простой альтернативой искать тип
(с именем банки, отображаемым в строке состояния).


user862268 комментарии ниже:

For mac, it is cmd+shift+T in Eclipse to find the class and associated jar.

@Kevin: правда, похоже, я больше не могу его найти.

VonC 09.02.2012 02:14

Лучше проверьте ответ, указанный ниже, как «нажмите Ctrl + Shift + T» в Eclipse, чтобы найти.

sunleo 19.05.2014 11:08

@sunleo Верно. Я включил его в ответ для большей наглядности.

VonC 19.05.2014 11:27

Для Mac это cmd + shift + T в Eclipse, чтобы найти класс и связанный jar.

user862268 09.04.2016 00:21

@ user862268 Спасибо. Я включил ваш комментарий для большей наглядности.

VonC 09.04.2016 00:24

Чтобы ответить на вопрос, нет реального способа узнать, какую банку использовать. Различные версии будут иметь потенциально разное поведение.

Когда нужно найти банку, содержащую данный класс, я использую:

for f in `find . -name '*.jar'`;  do echo $f && jar tvf $f | grep -i $1; done

Это выделит любую банку, содержащую имя класса, переданное в качестве параметра в любой подпапке.

Еще один хороший способ найти класс - использовать поиск репозиториев maven.

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

Файлы JAR (Java ARchive) - это не что иное, как файлы ZIP. Все, что вам нужно сделать, это распаковать банку или даже просмотреть ее с помощью приложения для чтения ZIP-файлов. Например, в Windows XP это встроено в операционную систему. Как удобно.

Надеюсь, это помогло ...

Юваль = 8-)

Иногда не очевидно, какой файл jar содержит интересующий вас класс.

Eugene Yokota 09.11.2008 00:49

Я использую FindJar.com. В нем перечислены все известные пакеты, содержащие любой заданный класс! Это невероятно полезно.

Не удалось найти org.eclipse.ui.views.navigator.ResourceNavigator. jarfinder.com сработало.

Eugene Yokota 09.11.2008 00:51

oracle.jdbc.driver.OracleDriver jarfinder не нашел его, а findjar нашел.

Kieveli 03.12.2008 17:50

В Intellij IDEA вы просто щелкните имя класса, удерживая Ctrl, и вы перейдете к псевдо-исходному коду этого класса, а заголовок окна будет иметь вид c: \ path \ to \ lib.jar! \ Com \ something \ ClassName. класс

Также проверьте http://javacio.us/.

Я не вижу jar-файла в результатах поиска.

Eugene Yokota 10.11.2008 07:26

Вы также можете попробовать Джарвана, чтобы найти файлы jar для определенного класса.

**shell> find . -name "*.jar" | xargs -i -t \jar tvf {} | grep [TheClassNameYouAreLookingFor]**

Например, если вы ищете класс LogFactory.class в списке общих jar-файлов apache, команда ниже будет работать

shell> find apache-commons/ -name "*.jar" | xargs -i -t \jar tvf {} | grep LogFactory.class

jar tvf apache-commons/commons-beanutils-1.7.0.jar

jar tvf apache-commons/commons-fileupload-1.2.1.jar

jar tvf apache-commons/commons-lang-2.3.jar

**jar tvf apache-commons/commons-logging-1.1.jar**

**21140 Tue May 09 23:08:12 EDT 2006 org/apache/commons/logging/LogFactory.class**

jar tvf apache-commons/commons-net-1.3.0.jar

Приведенный выше результат указывает на то, что совпадение равно commons-logging-1.1.jar.

перейти к Ctrl + Shift + T в Eclipse IDE

Появится диалоговое окно Open Type, в котором вы вводите имя класса. после этого отобразятся идентификатор пакета и место назначения jar.

Я голосую за CTRL-SHIFT-T, потому что он уже включен в Eclipse. На самом деле я сбросил jarclassfinder.jar в каталог плагинов в установке eclipse, но все еще не смог найти плагин в графическом интерфейсе Eclipse.

Для меня это отлично работает:

find * -type f -name '*.jar' -exec grep -l 'TestClass.class' '{}' \;

С уважением

если вы скажете eclipse открыть объявление (F3) или реализацию (Navigate-> Open Implementation), и вы попадете в нередактируемое окно редактирования, вы можете увидеть путь к файлу jar, щелкнув правой кнопкой мыши окно редактора и выбрав "показать в панировочных сухарях"

моя находка на основе unix:

find . -name "*.jar" -print -exec jar -tf {} \; >outputfile

отредактируйте выходной файл, чтобы найти то, что вы хотите (вместо grep)

Другие вопросы по теме