Java - Как узнать, из какого файла Jar импортируется импорт?
Проект, над которым я работаю, содержит около 10 файлов jar в виде библиотек. В верхней части одного из файлов есть оператор импорта, например:
import jpe.nar.crat.maker.ObjectMakerFactory;
Есть ли способ узнать, из какого файла Jar он появился?
(Я использую Netbeans, если это имеет значение.)
Ответы
Ответ 1
Вы можете использовать CodeSource#getLocation()
. CodeSource
доступен ProtectionDomain#getCodeSource()
. ProtectionDomain
в свою очередь доступен Class#getProtectionDomain()
.
URL location = ObjectMakerFactory.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(location.getPath());
// ...
Ответ 2
Вы пытались сделать "Open Declaration" в классе? В Eclipse, когда вы это сделаете, он открывает окно, в котором отображается имя фляги, и сообщает вам, что в этой банке есть "No Source Attachment". Я надеюсь, что что-то подобное произойдет для NetBeans.
Спасибо,
R
Ответ 3
Вы можете использовать Jar Class Search для netbeans. Я не уверен, что он все еще совместим, но стоит попробовать.
Ответ 4
Мне нравится JFind:
http://jfind.sourceforge.net/
... он работает рекурсивно, глядя на банку, внутри войны, внутри уха и т.д.
Если вы закроете java-пусковую установку в оболочке script и поместите ее на свой 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
Ответ 5
Программно или интерактивно?
Вы можете попробовать DocJar. В элементе управления Eclipse нажмите на элемент, который покажет вам (панель редактирования покажет источник (если он прикреплен) или доступные методы, когда Package Explorer откроет дерево классу), я был бы удивлен, если Netbeans не поведет себя в аналогичном усадьба.
Ответ 6
В среде Netbeans IDE:
В вашем коде ctrl-select имя класса. После того, как соответствующий редактор java появится в редакторе (если у вас нет источника для этого класса, это может показаться мало). Щелкните правой кнопкой мыши в любом месте исходного окна и выберите "Выбрать в проектах". Класс отобразится в банке, где он появился.
Это работает по крайней мере еще как Netbeans 8.0.
Ответ 7
Бывший мой коллега, Том, написал JarSniffer (http://sourceforge.net/projects/jarsniffer/). Это удобный инструмент для поиска класса в наборе jars, zips и дерева каталогов.