Возможно ли загрузить JAR в ваше запущенное Java-приложение «на лету»?

#java #classloader

#java #classloader

Вопрос:

У меня есть система плагинов в моем Java-приложении. Возможно ли загружать классы JAR / Java «на лету» в ваше приложение, или я должен включить эти классы JAR / Java в свое приложение?

Моя идея состояла в том, чтобы загрузить плагин в приложение, а затем вызвать метод интерфейса этого класса, без необходимости перезапуска Java-приложения. Возможно ли это или вообще разумно?

Ответ №1:

Я бы рекомендовал использовать OSGi для динамической загрузки / выгрузки плагинов. Он обрабатывает все процессы загрузки классов. Если вы не можете использовать OSGi, вам придется использовать собственные загрузчики классов и настроить их в соответствии с расположением ваших загружаемых файлов jar.

Ответ №2:

Вы можете, используя свой собственный ClassLoader, который находит файл JAR и возвращает байты класса в JVM. Взгляните на это руководство от sun: http://java.sun.com/developer/onlineTraining/Security/Fundamentals/magercises/ClassLoader/help.html

Ответ №3:

Я бы также рекомендовал OSGi, но для более простой системы на основе плагинов ознакомьтесь с java plugin framework. Он направлен на упрощение систем на основе плагинов и может быть найден по адресу http://jpf.sourceforge.net /.

Как упоминал @Liv, что-то вроде URLClassLoader можно использовать для простых разовых загрузок, но это быстрое решение, а не хорошая отправная точка для системы загрузки плагинов.