Jim*_*Jim 12 java circular-dependency classloader
我正在使用自定义类加载器加载类.在大多数情况下,一切正常,但有时当我加载特别复杂的项目/库时,我得到一个奇怪的错误:
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(...)
Run Code Online (Sandbox Code Playgroud)
看看Javadocs,我不希望defineClass抛出这个特殊的错误. org/apache/commons/codec/binary/Hex是我正在尝试加载的类.defineClass在它定义类之前,它几乎就像想要一个类的副本 - 这对我来说毫无意义.
想法?
Paŭ*_*ann 15
阿ClassCircularityError当一些类是其自身的(间接)超被抛出,一些接口(间接地)延伸本身或相似.
这通常不应该发生,因为良好的编译器不会生成这样的类,但使用不同版本的库(或使用包含不同版本的类的几个库)可能会带来这个问题.
扫描您的库以获取双类名称,特别是看看上面提到的org.apache.commons.codec.binary.Hex类的多个版本.