如果应用程序中有多个版本的jar,那么如何找到JVM正在使用哪一个?
答案 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");
**这不会告诉您代码使用了哪些类,但如果您不确定类的来源,它可能会帮助您找出问题所在。