Для начала вам нужен интерфейс, который должны быть реализованы всеми плагинами, например
public interface Plugin {
public void load(PluginConfiguration pluginConfiguration);
public void run();
public void unload();
public JComponent getConfigurationPage();
}
Авторы плагинов должны затем объединить свои плагины в файлы JAR. Ваши приложения открывают файл JAR и могут затем использовать атрибут из манифеста JAR или список всех файлов в файле JAR, чтобы найти класс, реализующий ваш интерфейс Plugin. Создав этот класс, плагин готов к работе.
Конечно, вы также можете захотеть реализовать какую-то изолированную среду, чтобы плагин был ограничен в том, что он может и не может делать. Я создал небольшое тестовое приложение (и написал об этом в блоге ), которое состоит из двух плагинов, одному из которых запрещен доступ к локальным ресурсам.
Используйте OSGi .
Это основа системы плагинов Eclipse. Equinox - это реализация Eclipse (лицензированная EPL), а Felix - реализация Apache Project (лицензионная публичная лицензия Apache).
Eclipse предоставляет конкретный пример того, как OSGi может охватывать упомянутые вами моменты (или вы можете просто построить свое приложение поверх Eclipse RCP, если вам нужен полный стек Eclipse / SWT / JFace).
источник
Начиная с версии 1.6, существует java.util.ServiceLoader, который можно использовать, если вы хотите написать собственную простую систему.
Но если вы хотите чего-то большего, чем базовые функции, используйте одну из существующих платформ.
источник
Существует также JPF (Java Plugin Framework) .
источник
Используйте PF4J . Имеет поддержку Web, Spring и Wicket. Простота в использовании и создании приложений
источник
Я работал над OSGi в течение недели - интенсивной, ничего, кроме недели OSGi. В конце концов, это был плохой сон, но я многому научился.
Мне удалось заставить работать OSGi (не просто, все примеры устарели, всему в сети не менее трех лет, если не пять), но у меня возникли серьезные проблемы с его интеграцией в существующий проект из-за проблем с баночка проявляется.
Короче говоря, есть только несколько неясных инструментов, используемых для создания манифестов, и они недостаточно хорошо документированы (BND Tools вряд ли малоизвестны, но они предназначены для определенного процесса в Eclipse). Кроме того, большая часть доступной информации OSGi не предназначена для разработчиков приложений, у которых уже есть настольное приложение.
Это делает большую часть контекста для информации туманной или неуместной. Сообщения Нила Бартлетта в блоге были самой большой помощью, но даже те, которые не смогли получить работающую систему (я взял некоторый код из учебника Феликса и собрал его вместе, чтобы развернуть встроенную среду). Я нашел черновик его книги, который он бесплатно опубликовал несколько лет назад, и это прекрасно, но примеры в Eclipse не работают из-за изменений в поддержке Eclipse OSGi.
Каждый шаг является серьезным препятствием. Я постараюсь опубликовать некоторые детали здесь позже.
источник
Я думаю, что рекомендация OSGi для решения вышеуказанной проблемы - крайне плохой совет. OSGi - это «правильный выбор», но для сценария, подобного описанному выше, я думаю, что достаточно JPF или какой-нибудь доморощенный минималистичный фреймворк.
источник
Несколько лет назад я запустил такой проект и надеюсь, что скоро он будет готов. Меня вдохновили такие проекты, как NetBeans и Eclipse, но между тем он изменился на что-то немного другое. OSGi выглядит сейчас как хороший выбор, но у меня не было возможности сравнить его с моим проектом. Он похож на JPF, упомянутый выше, но в то же время отличается во многих отношениях.
Основная идея, которая меня мотивировала, заключается в том, чтобы как можно проще создавать Java-приложения без разделения между веб-приложениями, настольными приложениями или апплетами / приложениями JWS (конечно, это пока не распространяется на пользовательский интерфейс) в качестве основной функциональности.
Я построил проект с несколькими целями:
источник