Java - Как узнать, из какого Jar-файла импортируется файл? - PullRequest
13 голосов
/ 31 августа 2010

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

import jpe.nar.crat.maker.ObjectMakerFactory;

Есть ли способ узнать, из какого Jar-файла он пришел?

(я использую Netbeans, если это имеет значение.)

Ответы [ 7 ]

14 голосов
/ 31 августа 2010

Для этого вы можете использовать CodeSource#getLocation(). CodeSource доступно для ProtectionDomain#getCodeSource(). ProtectionDomain в свою очередь доступен по Class#getProtectionDomain().

URL location = ObjectMakerFactory.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(location.getPath());
// ...
4 голосов
/ 31 августа 2010

Вы пытались сделать «Открытое объявление» на уроке? В Eclipse, когда вы делаете это, он открывает окно, которое показывает имя банки и сообщает вам, что у этой банки нет «Нет привязанности к источнику». Я надеюсь, что нечто подобное должно произойти для NetBeans.

Спасибо, R

2 голосов
/ 31 августа 2010

Мне очень нравится JFind очень:

http://jfind.sourceforge.net/

... он работает рекурсивно, просматривая банки, внутри войны, внутри ушей и т. Д. ...

Если вы включите Java-лаунчер в сценарий оболочки и поместите его в PATH, он станет очень мощным инструментом:

т.е. найти все EntityManager классы в каталоге jboss-6.0.0.20100429-M3:

$ jfind.sh EntityManager ./jboss-6.0.0.20100429-M3
Search String: EntityManager
Windows Search Location: jboss-6.0.0.20100429-M3

....jjj.jjjjjjjjjjj
ClassName = javax/persistence/EntityManager.class
JarName = jboss-6.0.0.20100429-M3\client\hibernate-jpa-2.0-api.jar
----------------


jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
ClassName = org/apache/xerces/impl/XMLEntityManager.class
JarName = jboss-6.0.0.20100429-M3\client\xercesImpl.jar
----------------

Небольшая оболочка оболочки для использования в Cygwin:

if [ $# -ne 2 ]
then
  echo "Usage: `basename $0` <classname> [<fromDir>]"
  exit 1
fi

echo Search String: $1
SEARCH_LOCATION=`cygpath -w $2`
echo Windows Search Location: $SEARCH_LOCATION

java -jar `cygpath -w $HOME/bin/JFind.jar` "$1" "$SEARCH_LOCATION"
echo
2 голосов
/ 31 августа 2010

Вы можете использовать Jar Class Search для netbeans.Я не уверен, что он все еще совместим, но стоит попробовать.

1 голос
/ 08 марта 2017

В среде IDE Netbeans: В вашем коде ctrl-выберите имя класса. После того, как соответствующий редактор Java появится в редакторе (если у вас нет исходного кода для класса, он может не показать много). Щелкните правой кнопкой мыши в любом месте исходного окна и выберите «Выбрать в проектах». Класс будет выделен в банке, откуда он пришел.

Это работало, по крайней мере, еще до Netbeans 8.0.

1 голос
/ 31 августа 2010

Программно или в интерактивном режиме?

Вы можете попробовать DocJar .В элементе управления Eclipse щелчок по элементу покажет вам (панель редактирования покажет источник (если он прикреплен) или методы, доступные, когда Package Explorer откроет дерево для класса), я был бы удивлен, если бы Netbeans не вел себя подобнымусадьба.

0 голосов
/ 10 сентября 2010

Бывший мой коллега Том написал JarSniffer (http://sourceforge.net/projects/jarsniffer/). Это небольшой удобный инструмент для поиска класса в наборе jar, zip и деревьев каталогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...