Найти путь к банке от класса внутри него? - PullRequest
1 голос
/ 14 декабря 2011

Плагин x.y.z должен работать поверх Java-проекта и генерировать некоторый Java-код. Этот код будет нуждаться в классах, доступных в банке плагина во время сборки и запуска. Следовательно, jar (или установочный каталог) плагина должен появиться в пути к классу сборки.

Как плагин может узнать точный путь к своей собственной директории jar / Installation или, если на то пошло, путь к jar некоторого связанного плагина в переносном виде?

Справочная информация: я хочу создать мастер, который пользователь сможет запустить, чтобы включить x.y.z. природа на проекте. Пользователю должно быть предоставлено значимое значение по умолчанию для того, где найти требуемые функциональные возможности времени выполнения, и данная библиотека будет добавлена ​​в путь сборки.

Ответы [ 2 ]

6 голосов
/ 14 декабря 2011

Мы используем это, чтобы найти местоположение класса:

public static URL getLocation(final Class cls) {
  final ProtectionDomain pd = cls.getProtectionDomain();
  final CodeSource cs = pd.getCodeSource();
  return cs.getLocation();
}

Не уверен, откуда он.

3 голосов
/ 14 декабря 2011

Самый надежный способ предоставления плагина - использовать org.osgi.framework.Bundle.getEntry(String) для получения URL-адреса файла JAR и org.eclipse.core.runtime.FileLocator.toFileURL(URL) для возврата абсолютного пути к JAR в файловой системе.

Тогда у вас есть выбор: либо использовать это местоположение для пути к классам проекта java, либо скопировать jar в рабочую область проекта java.

См. https://stackoverflow.com/a/8337766/713646 для другого примера.

PW

...