我正在尝试使用javassist加载jar以使其在应用程序的当前类加载器中可用,并且由于CannotCompileException
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());
}
listJarClasses
方法将迭代jar的条目并返回找到的类名。
我理解这个方法确实会将类加载到当前的类加载器,但到目前为止我无法保证它们将以正确的顺序创建。
例如,我正在迭代这些类,我要添加ClassA
,但是这个类需要编译ClassB
并且ClassB
尚未添加到类加载器中循环,即NoClassDefFoundError
。
我也理解有一种方法可以通过URLClassLoader
加载类,如here所示,但这不能解决问题,因为该类在当前的类加载器上不可用,以备将来使用
有没有办法让jar更容易添加到类加载器并避免这种情况?