java - 有没有办法在运行时获取正在使用的 Guava 版本?

标签 java guava

我快速浏览了 Guava 源代码和文档,似乎都没有提到版本。想知道有没有办法在运行时获取Guava的版本信息。

如果实际上不存在这样的东西,则不必通过任何 getter 访问此版本信息;如果它藏在一个字段中,在加载 Guava 时不会进行 GC,那就足够了。

这个版本信息在运行时的任何地方都可用吗?


我对此有一个非常具体的用途。我工作的很大一部分是分析 Java 堆转储,以识别和修复代码中导致过多内存使用的位置。对于此任务,我使用 fasthatjhat 的大量修改版本具有对我的工作有用的特殊功能。

这些功能之一是显示容器的内容。我已经为 ArrayListHashMapConcurrentHashMap 等实现了这一点(我根据需要实现类型打印机,基于什么我在我们的堆转储中遇到过。)目前,我正在为 Guava 的 CustomConcurrentHashMap 实现一个类型打印机。

由于结构的布局在版本之间可能会发生变化,因此我的代码会根据所使用的版本调整其解包行为。例如,在工作中,我们以前使用 JRuby 1.2,但最近切换到 JRuby 1.6,所以我有这两个版本的类型打印机,它根据在堆转储中找到的版本信息来选择版本。

所以,这就是问题第二段的重点:如果版本信息在堆转储中的任何位置,这就是我所需要的。

在有人问之前:堆转储数据不是“实时的”,因此您不能简单地调用 toString 或类似的方法。您确实必须遍历数据结构以提取位,并且您确实必须在第 n 度使用实现细节。 ;-)

最佳答案

如果想获取maven构建的类的版本,可以从类入手,找到它来自的jar,读取maven添加的元信息(比如版本)

如果版本在路径中,则更简单的方法是查看您的类路径,从文件名中找到 guava 和您正在使用的版本。

对于堆转储,类路径位于系统属性中。

关于java - 有没有办法在运行时获取正在使用的 Guava 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7694468/

相关文章:

java - 为什么 Guava 中的 max 和 min 对于空数组会抛出 IllegalArgumentException?

java - 如何制作一个循环来使字符串居中?

java - 最终打印语句返回 null (java)

java - 为 JVM 编译 C++

java - 使用\n 作为分隔符打印一个额外的空行

java - 基于相同键对来自两个映射的值进行配对

java - 如何将资源复制到 Java 中另一个位置的文件

java - 使用 Spring IoC 在 Guava EventBus 中自动注册 beans

java - guava 可以用于反射按名称加载的类吗?

java - 使用相同代码写入写字板与写入记事本时的结果不同