通过javassist动态加载jar
我正试图用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)
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并避免这种情况