У меня есть этот метод (в моем собственном загрузчике классов), который загружает классы из zip:
ZipInputStream in = new ZipInputStream(new FileInputStream(zip));
ZipEntry entry;
while ((entry = in.getNextEntry()) != null) {
if (!entry.isDirectory()) {
byte[] buffer = new byte[(int) entry.getSize()];
in.read(buffer);
if (!entry.getName().endsWith(".class"))
continue;
String name = entry.getName().replace(".class", "").replace("/", ".");
Class<?> cls = this.defineClass(name, buffer, 0, buffer.length);
this.resolveClass(cls);
}
}
Почтовый индекс, который я пытаюсь загрузить, выглядит так:
TestClass.class
TestClass$SomeOtherInnerClass.class
Моя проблема в том, что defineClass() не может загрузить TestClass$SomeOtherInnerClass. Если этот класс загружается до фактического TestClass, я получаю следующее:
java.lang.NoClassDefFoundError: TestClass
Я также попытался сначала загрузить TestClass.class, но потом получил эту ошибку:
java.lang.ClassFormatError: Wrong InnerClasses attribute length in class file TestClass
Есть ли что-то, что я делаю неправильно?