ClassLoader.defineClass抛出的ClassCircularityError

我正在使用自定义类加载器加载类。 在大多数情况下,一切正常,但有时当我加载特别复杂的项目/库时,我得到一个奇怪的错误:

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在定义类之前想要一个类的副本 – 这对我来说没有意义。

想法?

当某个类是其自身的(间接)超类时,抛出ClassCircularityError ,某些接口(间接)扩展自身或类似。

这应该通常不会发生,因为良好的编译器不会生成这样的类,但使用不同版本的库(或使用包含不同版本的类的几个库)可能会带来这个问题。

扫描您的库以获取双类名称,特别是看看是否有多个版本的org.apache.commons.codec.binary.Hex类。