【发布时间】:2011-05-30 18:20:06
【问题描述】:
我正在使用自定义类加载器加载类。在大多数情况下,一切正常,但有时当我加载特别复杂的项目/库时,我会遇到一个奇怪的错误:
Exception in thread "main" java.lang.ClassCircularityError:
org/apache/commons/codec/binary/Hex
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.lang.ClassLoader.defineClass(ClassLoader.java:466)
at my.custom.class.Loader.loadClass(...)
查看 Javadocs,我不希望 defineClass 抛出这个特定的错误。 org/apache/commons/codec/binary/Hex 是我要加载的类。就好像defineClass 在定义类之前想要一个类的副本——这对我来说毫无意义。
想法?
【问题讨论】:
-
你能展示你的代码吗?您是否按照建议覆盖了 findClass() ?否则,你必须非常小心才能把所有事情都做好。
-
就像定义类在定义类之前想要一个类的副本,不,它不想要类的副本。你是如何定义包名
class的? -
@bestsss 大概堆栈跟踪只是因为包名称选择不当而混淆了
-
@bkail,我明白,这是一个讽刺的评论,因为堆栈跟踪实际上错过了循环引用的重要数据。
-
@bestsss 可以通过直接编写类文件在包名中使用“类”。看来您真正想要回答的问题是:@Jim 你能提供完整的堆栈跟踪吗?
标签: java circular-dependency classloader