gpt4 book ai didi

java - 跨类加载器类加载

转载 作者:行者123 更新时间:2023-12-02 04:33:12 25 4
gpt4 key购买 nike

我有一个CustomClassLoaderMap<String, byte[]> 加载类。我正在加载的类依赖于其他已卸载的类。我有包含上述类的 jar 文件 UrlClassLoader这是在 CustomClassLoader 之前启动的,但是当 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);
}

我尝试设置上下文类加载器,如下所示:

Thread.currentThread().setContextClassLoader(jarLoader);

其中 jarLoader 是 URLClassLoader .

有什么办法可以完成我想做的事情吗?

最佳答案

您应该覆盖ClassLoader(ClassLoader parent)在您的 CustomClassLoader 中构造函数,并将您的 URLClassLoader 传递到那里:

class CustomClassLoader extends ClassLoader {
public CustomClassLoader(URLClassLoader parent, ...your data...) {
super(parent);
...
}
}

CustomClassLoader customClassLoader = new CustomClassLoader(jarLoader, ...);

关于java - 跨类加载器类加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31173719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com