当前位置: 首页 > 面试题库 >

如何查找类加载器加载哪些jar和以什么顺序加载?

齐志勇
2023-03-14
问题内容

我在其他地方找不到这个问题的明确答案,因此我将在这里尝试:

是否有某种方法(以编程方式或其他方式)来获取Application Classloader加载时所加载的JAR
/类列表的确切顺序?应用程序类加载器,我是指在应用程序服务器(WLS,WAS,JBoss
…)中加载EAR应用程序的类加载器,但显然,它适用于任何类加载器。

因此,概括地说,我想找出的是由指定类加载器加载的JAR的列表和顺序。不是单个类,通过调用classloader.getPackages()可以很容易地找到它,但是可以列出由该类加载器加载的JAR文件列表。


问题答案:

最简洁的答案是不。类加载器不需要公开其搜索逻辑

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

在实践中,如果您试图找出从何处加载类, Steve 的答案可能更有用。



 类似资料:
  • 我正在阅读Horstmann撰写的《Java核心》第10卷中关于断言的第四章,内容是: 有些类不是由类加载器加载的,而是由虚拟机直接加载的。您可以使用这些开关有选择地启用或禁用这些类中的断言。 我对此感到困惑,哪些类将由JVM加载,而不是由类加载器加载,我认为引导类加载器加载了初始类? 谢谢

  • 问题内容: 我们知道我们可以使用以下方法覆盖System 类加载器: 那么,既然它本身是一个类,它是由谁加载的? 我们如何获得该“元”类加载器的类文件? 问题答案: 从Javadoc中获取: 如果在首次调用此方法时定义了系统属性“ java.system.class.loader”,则该属性的值将作为要作为系统类加载器返回的类的名称。 该类使用默认的系统类加载器加载, 并且必须定义一个公共构造函数

  • 我对maven的类加载顺序有一个问题。 我知道,自maven版本2.0.9以来,类加载一直是确定性的,并且在pom中使用顺序。我不清楚传递依赖关系。maven是否首先加载所有顶级依赖项,然后加载传递依赖项。或者加载具有所有传递依赖项的顶级依赖项,然后加载下一个顶级依赖项。 我知道在完全正确的maven设置中,顺序没有问题,但我在依赖项中有一些重复的类,我想知道使用哪一个。排除可传递依赖项是没有选择

  • 我有一个EAR文件,其中包含两个不同的jar,它们共享一些具有相同package.class名称的类。这些JAR部署在我的APP-INF/lib目录中。 假设A jar包含最新版本的类,B包含旧版本的类。当引用一个类时,Weblogic首先查看B jar并加载破坏某些功能的旧版本。 如何让Weblogic从APP-INF/lib中先加载jar A再加载B?我需要定义一个特定的顺序,以避免加载旧类。

  • 我在JBoss7中部署了一个WAR,它使用上下文类加载器动态加载jar资源。 但是,上下文类加载器只在WEB-INF/lib文件夹中查找资源 Service Module Loader中模块“Deployment..war:main”的ModuleClassLoader 我如何在jboss中为我拥有资源的特定模块获取类加载器。我有需要加载到jboss_home/modules/org/custom

  • 主要内容:1.类加载过程,2.类加载时机,3.类加载器,4.类加载机制:当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化。 1.类加载过程 1.1加载 加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Cl