如果在应用程序中有多个版本的jar,那么如何找到Jvm正在使用哪一个

时间:2010-06-04 15:19:39

标签: java

如果应用程序中有多个版本的jar,那么如何找到JVM正在使用哪一个?

4 个答案:

答案 0 :(得分:2)

JVM按照jar和目录在类路径上的顺序查找类。

小心应用程序服务器等,因为它们往往会取代类加载器,在这种情况下它可能会有所不同。

答案 1 :(得分:2)

如果可以,请将-verbose标志添加到java启动命令行,这将打印到stdout加载哪些类以及从哪个源加载。输出如下:

[Loaded javax.xml.transform.stream.StreamResult from C:\Program Files\Java\jre6\lib\rt.jar]

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

答案 2 :(得分:0)

这是不可预测的。

避免在类路径上有一个jar的多个版本。如果您被应用程序服务器强行使用,它通常会提供一个配置来优先使用捆绑的特定于应用程序的库。

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

答案 3 :(得分:0)

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

PathMatchingResourcePatternResolver以各种方式查找资源(文件) - 相对于classpath / web app root / file system /等。 如果您要求它查找找到您要查找的类的文件,它将在所有类路径条目中找到它。我像这样使用它(通常在一些调试器的eval / watch中):

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

**这不会告诉您代码使用了哪些类,但如果您不确定类的来源,它可能会帮助您找出问题所在。