Есть ли способ получить во время выполнения используемую версию Guava?

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

Эта информация о версии не обязательно должна быть доступна через какой-либо геттер, если такой вещи на самом деле не существует; если он спрятан где-нибудь в поле, которое не получает GC при загрузке Guava, этого будет достаточно.

Доступна ли эта информация о версии где-нибудь во время выполнения?


У меня есть очень конкретное применение для этого. Большая часть моей работы - это анализ дампов кучи Java для выявления и исправления мест в коде, которые вызывают чрезмерное использование памяти. Для этой задачи я использую fasthat , сильно модифицированную версию jhat со специальными функциями, полезными для моей работы.

Одной из этих функций является отображение содержимого контейнеров. Я уже реализовал это для подобных ArrayList , HashMap , ConcurrentHashMap и т.д. наши дампы кучи.) В настоящее время я реализую типовой принтер для Guava CustomConcurrentHashMap .

Поскольку расположение структур может меняться от версии к версии, мой код настраивает свое поведение при распаковке в зависимости от того, какая версия используется.Например, на работе мы использовали JRuby 1.2, но недавно перешли на JRuby 1.6, поэтому у меня есть принтеры типов для обеих этих версий, и он выбирает версию на основе информации о версии, которую он находит в дампе кучи.

Итак, в этом суть второго абзаца вопроса: если информация о версии находится где-нибудь в дампе кучи, это все, что мне нужно.

И прежде чем кто-либо спросит: данные дампа кучи не являются «живыми», поэтому вы не можете просто вызвать toString или что-то подобное. Вам действительно нужно пройтись по структурам данных, чтобы извлечь биты, и вам действительно нужно использовать детали реализации в энной степени. ; -)

11
задан Chris Jester-Young 8 October 2011 в 02:49
поделиться