У меня возникают проблемы с динамической загрузкой класса Java из динамически загружаемого класса.
Мой класс представляет собой плагин ImageJ
, и он динамически загружает другие модули через classloader
. У меня есть NoClassDefFoundError
при загрузке модуля, который ссылается на что-то, что находится в том же пакете, что и плагин ImageJ
.
Что я конкретно делаю:
- ImageJ загружает плагин (A)
- (A) получает загрузчик системного класса
- (A) добавить URL-адрес jar в загрузчик классов
- (A) попробуйте загрузить нужный класс (B) в банку, используя
Class.forName
Я не могу загрузить класс B, потому что я получаю NoClassDefFoundError
, вызванный тем, что B указывает на класс в A, который не был найден в текущем загрузчике классов.
Я думаю, мне нужно использовать тот же загрузчик классов ImageJ
, который используется для загрузки плагинов, в первую очередь, чтобы иметь возможность загружать мои модули и по-прежнему находить ссылки на банки, ранее загруженные ImageJ
. Я хотел бы сделать это без перекомпиляции ImageJ
.
Есть ли способ решить эту проблему, не добавляя код ImageJ
или не изменяя его?
пример псевдоклассов
package a;
class A extends PlugInFrame {}
package a;
class C extends MyOwnPlugIn {}
package b;
import a;
class B extends C {}