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

标签 java reflection

我正在尝试找到一种方法来收集所有从 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");
}

如果 cURLjar:// 开头,类源自一个 jar 文件

关于java - 转储源自 jar 文件的 java.lang.Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442491/

相关文章:

scala - 如何隐式获取Class

c# - 尝试在动态创建的程序集上绑定(bind)动态方法会导致 RuntimeBinderException

java - 在 Eclipse 中链接到生成的 Java protobuf 代码

java - java中的继承私有(private)字段

java - 当我使用实际手机时,RecyclerView 不显示项目 View ,但在模拟器上工作正常

java - 设置以 Java 结尾的默认行

java - 我需要帮助解决此错误 : java. lang.NoSuchMethodError

c# - 项目的加载程序集

java - 用自定义类替换 Java API 类?

java - 如何从 fragment 中调用类