我正在尝试找到一种方法来收集所有从 jar 文件加载的 java.lang.Class,但忽略源代码本身的那些。
我找到了 java.lang.instrument.Instrumentation 接口(interface)并认为它可能会达到目的,但结果并不完全......可用函数之一“getAllLoadedClasses”将所有 java.lang.Class 转储出来(这很好),但它不仅从 jar 文件中加载一次转储,而且还从源文件中加载一次。
是否有允许我们自定义设置的配置,以便仅转储源自 jar 文件的 java.lang.Class,或者有更好的解决方案?
我想在代码表示中实现如下所示。
java.lang.Class[]
classesLoadedFromJars = getClassesLoadedFromJars();
for (java.lang.Class class : classesLoadedFromJars) {
// ..............
}
建议中的一两句话会很有帮助!
提前致谢。
最佳答案
该类的类加载器应该能够为您提供有关从何处加载某个类的线索。
ClassLoader loader = myClass.getClassLoader()
if (loader instanceof URLClassLoader) {
URLClassLoader uLoader = (URLClassLoader)loader;
URL cURL = uLoader.getResource(myClass.getName().replace('.', '/')+".class");
}
如果 cURL
以 jar://
开头,类源自一个 jar 文件
关于java - 转储源自 jar 文件的 java.lang.Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442491/