如何发现哪个类路径条目提供了类?

时间:2009-07-06 02:29:21

标签: java reflection jar classloader

我从Java中的自定义类加载器从几个不同的.jars加载了几个不同的类。我创建了一个自定义URLClassLoader,向其中添加了几个.jars并将其传递给ServiceLoader以查找我想要的类。

我的问题是:给定一个课程,有没有办法发现它是从哪个.jar加载的?

3 个答案:

答案 0 :(得分:5)

以下代码段应该有效:

obj.getClass().getProtectionDomain().getCodeSource().getLocation().toString()

请注意,在调用getProtectionDomain或getCodeSource并在任何生产代码中正确处理时,应添加null检查。 (这取决于类加载器,安全性等)

答案 1 :(得分:3)

尝试设置参数

-verbose:class

使用 java 运行你的jar /类时,它将为你提供它加载的类及其来源的完整纲要,例如:

[Opened /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/sunrsasign.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/jsse.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/jce.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/charsets.jar]
[Loaded java.lang.Object from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]

这应该给你所有你需要知道的东西,找到你想要的类/ jar。

答案 2 :(得分:2)

您可以在Classloader上调用findResource,并解析您获取的URL以确定其来源。