Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过javassist动态加载jar_Java_Javassist - Fatal编程技术网

通过javassist动态加载jar

通过javassist动态加载jar,java,javassist,Java,Javassist,我正试图用javassist加载一个jar,以使其在应用程序的当前类加载器中可用,并且由于一个NoClassDefFoundError 到目前为止,我得到的信息如下: ClassPool pool = ClassPool.getDefault(); pool.insertClassPath(jarFile); List<String> classes = listJarClasses(jarFile); for (final String className : classes)

我正试图用javassist加载一个jar,以使其在应用程序的当前类加载器中可用,并且由于一个
NoClassDefFoundError

到目前为止,我得到的信息如下:

ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(jarFile);

List<String> classes = listJarClasses(jarFile);
for (final String className : classes) {
    CtClass ctClass = pool.get(className);
    ctClass.toClass(getClass().getClassLoader(), getClass().getProtectionDomain());
}
ClassPool=ClassPool.getDefault();
pool.insertClassPath(jarFile);
列表类=列表类(jarFile);
for(最终字符串类名:classes){
CtClass-CtClass=pool.get(className);
toClass(getClass().getClassLoader(),getClass().getProtectionDomain());
}
listJarClasses
方法只需迭代jar的条目并返回找到的类名

我知道这个方法确实会将类加载到当前的类加载器,但到目前为止,我不能保证它们会以正确的顺序创建

例如,我正在迭代类,我得到了要添加的
ClassA
,但是这个类需要编译
ClassB
,并且
ClassB
还没有通过循环添加到类加载器中,因此
NoClassDefFoundError

我也知道有一种方法可以通过
URLClassLoader
加载类,如图所示,但这并不能解决问题,因为该类在当前类加载器上不可用,将来无法使用

有没有一种方法可以简化向类加载器添加jar并避免这种情况