【发布时间】:2015-07-02 00:18:55
【问题描述】:
我有一个CustomClassLoader,它从Map<String, byte[]> 加载类。我正在加载的类依赖于其他未加载的类。我的 jar 文件包含在 UrlClassLoader 之前启动的 UrlClassLoader 中的所述类,但是当 CustomClassLoader 尝试加载具有外部导入的类(UrlClassLoader 中的 jarfile)时,抛出异常:
Exception in thread "main" java.lang.NoClassDefFoundError: external/class/in/urlclassloader/ClassImportedByLoadedClass
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.lang.ClassLoader.defineClass(ClassLoader.java:642)
at CustomClassLoader.defineClass(EncryptedByteArrayClassLoader.java:35)
我需要一些方法:
a) 加载 URLClassLoader 中的所有类
或
b) 有一些方法可以将 URLClassLoader 设置为从内存加载的类的默认 ClassLoader(而不是我的 CustomClassLoader)
第 35 行:
public Class<?> defineClass(String name, byte[] bytes) {
return super.defineClass(name, bytes, 0, bytes.length);
}
我尝试设置上下文 ClassLoader 如下:
Thread.currentThread().setContextClassLoader(jarLoader);
其中 jarLoader 是 URLClassLoader。
有什么方法可以完成我想做的事情吗?
【问题讨论】:
标签: java reflection classloader urlclassloader