通过javassist动态加载jar

时间:2015-10-31 11:25:34

标签: java javassist

我正在尝试使用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更容易添加到类加载器并避免这种情况?

0 个答案:

没有答案