如何找到类装入器加载了哪些jar以及以什么顺序加载?

2022-08-31 20:29:46

我无法在其他地方找到这个问题的明确答案,所以我会在这里尝试:

有没有办法(编程或其他方式)以应用程序类装入器加载的精确顺序获取应用程序类装入的 JAR/类的列表?通过应用程序类加载器,我的意思是在应用程序服务器(WLS,WAS,JBoss...)中加载EAR应用程序的类加载器,但显然,它适用于任何类加载器。

因此,为了概括起见,我想找出的是指定类装入器加载的 JAR 的列表和顺序。不是单个类,通过调用 classloader.getPackages() 很容易找到,而是由这个类加载器加载的 JAR 文件的列表。


答案 1

您是否尝试过使用 JVM 选项 。它显示所有加载的 JAR 文件和类。-verbose:class

例:

[Opened C:\Program Files\JDK160~1\jre\lib\rt.jar]
[Loaded java.lang.Object from C:\Program Files\JDK160~1\jre\lib\rt.jar]

答案 2

简短的答案是否定的。类装入器不需要公开其搜索逻辑。

但是,如果您的类装入器实例恰好是 URLClassLoader 或子类,那么您确实可以通过该方法访问 jars/目录列表。根据此类的文档,将按顺序搜索这些 URL。getURLs()

在实践中,如果你试图找出一个类是从哪里加载的,Steve的答案可能更有用。


推荐