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

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

import jpe.nar.crat.maker.ObjectMakerFactory;

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

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

14
задан Greg 31 August 2010 в 13:51
поделиться

3 ответа

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

URL location = ObjectMakerFactory.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(location.getPath());
// ...
14
ответ дан 1 December 2019 в 12:11
поделиться

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

2
ответ дан 1 December 2019 в 12:11
поделиться

Мне очень нравится 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
ответ дан 1 December 2019 в 12:11
поделиться
Другие вопросы по тегам:

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