如果应用程序中有多个版本的JAR文件,如何查找JVM正在使用哪个版本

4

如果应用程序中存在多个jar版本,如何确定JVM正在使用哪一个?

4个回答

2
如果可以的话,在java启动命令行中添加-verbose标志,这将打印加载的类以及来源到标准输出。输出结果如下:
[Loaded javax.xml.transform.stream.StreamResult from C:\Program Files\Java\jre6\lib\rt.jar]

如果你将输出重定向到文件中,你可以更轻松地解析或搜索所需的信息。


2

JVM会按照类路径中JAR包和目录的顺序查找类。

注意应用服务器等,它们往往会替换类加载器,在这种情况下可能会有所不同。


0

有点高级,我不确定你是否在使用Spring,但如果是的话 - 它有一个非常有用的实用程序类,在这种情况下为我服务:

PathMatchingResourcePatternResolver以各种方式查找资源(文件)- 相对于类路径/ Web应用程序根目录/文件系统/等等。如果您要求它查找包含您正在查找的类的文件,则它将在所有类路径条目中找到它。我通常像这样使用它(通常在某些调试器的eval/watch中):

Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:your/package/YourClassName.class");

** 这并不会告诉你代码使用了哪个类,但如果你不确定类来自哪里,它可能会帮助你准确定位问题。


0

这是不可预测的。

避免在类路径上有多个版本的一个jar文件。如果你被迫这样做,由于应用服务器,它通常提供了一种配置来优先使用捆绑的库而不是应用程序特定的库。

如果你需要更复杂的东西,请看看OSGi - 它允许你在同一个运行时中使用多个版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接