У меня есть приложение java, которое динамически загружает несколько плагинов (.jar-файлов) из FS. Для каждого плагина я использую такой код:Динамически загружать абстрактный класс и реализацию из отдельных JAR
URLClassLoader cl = URLClassLoader.newInstance(new URL[] { jarFile });
Class<?> loadedClass = cl.loadClass(PluginEntry);
BasePlugin plugin = (basePlugin)loadedClass.newInstance();
И все в порядке. У меня есть 2 плагина, которые наследуют один и тот же класс, вот структура: интерфейс BasePlugin -> app.jar абстрактный класс BaseA реализует BasePlugin -> baseA.jar класс B расширяет BaseA -> pluginB.jar класс C расширяет BaseA - > pluginC.jar
Но мне нужно поместить пакет baseA в pluginB.jar и pluginC.jar, и это проблема. Я хочу удалить BaseA.jar из пакетов pluginB/C и динамически загружать BaseA.jar из FS перед загрузкой pluginB и pluginC. Я пытался сделать это
URLClassLoader cl = URLClassLoader.newInstance(new URL[] { baseAjarFile });
Class<?> loadedClass = cl.loadClass(PluginEntry);
, но я ничего не могу с этим сделать loadedClass. И когда приложение загружает плагинB/C, он выходит из строя с исключением java.lang.NoClassDefFoundError. Итак, как я могу загрузить этот общий абстрактный базовый класс и сделать его доступным для pluginB/C?
Спасибо, это работает! – user3017277