有没有人知道如何以编程方式找出Java类加载器实际从哪里加载类?
我经常在大型项目上工作,其中类路径变得非常长,手动搜索不是一个真正的选项。 最近,我遇到了一个问题,因为同一类在类路径中存在两个不同的位置,导致类加载器加载了一个错误版本的类。
那么,我怎样才能让类加载器告诉我实际的类文件在磁盘上来自哪里呢?
编辑:如果类加载器由于版本不匹配(或其他原因)而无法加载类,我们是否有办法在读取文件之前找出它尝试读取的文件名?
有没有人知道如何以编程方式找出Java类加载器实际从哪里加载类?
我经常在大型项目上工作,其中类路径变得非常长,手动搜索不是一个真正的选项。 最近,我遇到了一个问题,因为同一类在类路径中存在两个不同的位置,导致类加载器加载了一个错误版本的类。
那么,我怎样才能让类加载器告诉我实际的类文件在磁盘上来自哪里呢?
编辑:如果类加载器由于版本不匹配(或其他原因)而无法加载类,我们是否有办法在读取文件之前找出它尝试读取的文件名?
Class clazz = Class.forName(nameOfClassYouWant);
URL resourceUrl = clazz.getResource("/" + clazz.getCanonicalName().replace(".", "/") + ".class");
InputStream classStream = resourceUrl.openStream(); // load the bytecode, if you wish
MyClass
的类,下面的代码应该可以运行:MyClass.class.getClassLoader();