转储java.lang.Class源自jar文件

时间:2010-08-09 17:21:22

标签: java reflection

我试图找到一种方法来收集从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) {
     // .............. 
}

建议中的一两句话会有所帮助!

提前致谢。

1 个答案:

答案 0 :(得分:1)

该类的类加载器应该能够为您提供有关从何处加载某个类的线索。

ClassLoader loader = myClass.getClassLoader()
if (loader instanceof URLClassLoader) {
    URLClassLoader uLoader = (URLClassLoader)loader;
    URL cURL = uLoader.getResource(myClass.getName().replace('.', '/')+".class");
}

如果cURLjar://开头,则该类来自jar文件