我试图找到一种方法来收集从jar文件加载的所有java.lang.Class,但忽略源代码本身的那些。
我找到了java.lang.instrument.Instrumentation接口并认为它可能起到了作用,但事实证明并不完全....其中一个可用的函数“getAllLoadedClasses”将所有java.lang.Class转储出去(其中很好),但它不仅从jar文件加载转储onces并从源文件加载。
是否存在允许我们自定义设置的配置,因此只会转储源自jar文件的java.lang.Class,或者是否有更好的解决方案?
我想在代码表示中实现的目标如下所示。
java.lang.Class[]
classesLoadedFromJars = getClassesLoadedFromJars();
for (java.lang.Class class : classesLoadedFromJars) {
// ..............
}
建议中的一两句话会有所帮助!
提前致谢。
答案 0 :(得分:1)
该类的类加载器应该能够为您提供有关从何处加载某个类的线索。
ClassLoader loader = myClass.getClassLoader()
if (loader instanceof URLClassLoader) {
URLClassLoader uLoader = (URLClassLoader)loader;
URL cURL = uLoader.getResource(myClass.getName().replace('.', '/')+".class");
}
如果cURL
以jar://
开头,则该类来自jar文件