¿Hay alguna forma de obtener, en tiempo de ejecución, la versión de Guava en uso?

Hice un breve análisis de la fuente y la documentación de Guava, y ninguno de los dos parece mencionar las versiones. Me preguntaba si había una forma de obtener la información de la versión de Guava en tiempo de ejecución.

La información de esta versión no tiene que ser accesible a través de ningún getter, si no existe tal cosa; si está escondido en un campo en algún lugar que no recibe GC mientras Guava está cargado, eso sería suficiente.

Esta información de versión está disponible en algún lugar durante el tiempo de ejecución?

Tengo un uso muy específico para esto. Una gran parte de mi trabajo es analizar los volcados de almacenamiento dinámico de Java para identificar y corregir lugares en el código que causan un uso exorbitante de memoria. Para esta tarea, uso fasthat, una versión muy modificada de jhat con características especiales útiles para mi trabajo.

Una de esas características es mostrar el contenido de los contenedores. Ya he implementado esto para los gustos deArrayList, HashMap, ConcurrentHashMap, etc. (Implemento impresoras tipo bajo demanda, en base a lo que encuentro en nuestros vertederos de almacenamiento dinámico). Actualmente, estoy implementando una impresora tipográfica para Guava'sCustomConcurrentHashMap.

Dado que el diseño de las estructuras puede cambiar entre versiones, mi código modifica su comportamiento de desempaquetado en función de la versión que esté en uso. Por ejemplo, en el trabajo, solíamos usar JRuby 1.2, pero recientemente cambié a JRuby 1.6, por lo que tengo impresoras de tipo para ambas versiones, y selecciona la versión en función de la información de la versión que encuentra en el volcado del montón.

Entonces, ese es el punto del segundo párrafo de la pregunta: si la información de la versión está en algún lugar del volcado de almacenamiento dinámico, eso es todo lo que necesito.

Y antes de que alguien pregunte: los datos de volcado de almacenamiento dinámico no están "activos", por lo que no puede simplemente llamar atoString o similar. Realmente tiene que recorrer las estructuras de datos para extraer los bits, y realmente tiene que usar los detalles de implementación en el enésimo grado.; -)

Respuestas a la pregunta(3)

Su respuesta a la pregunta