Лучшая технология для добавления поддержки плагинов в приложение J2SE?
Я пишу настольное приложение J2SE, для которого требуется подключаемый компонент. Я уже определил интерфейс Java для этого плагина. Пользователь должен иметь возможность выбирать во время выполнения (через GUI), какую реализацию этого интерфейса он хочет использовать (например, в диалоге инициализации). Я предполагаю, что каждый плагин будет упакован как JAR-файл, содержащий реализующий класс плюс любые вспомогательные классы, которые могут ему потребоваться.
Какая технология лучше всего подходит для подобных вещей в настольном Java-приложении?
5 ответов
После многих попыток создания Java-архитектур на основе плагинов (что именно вы ищете), я наконец-то обнаружил, что JSPF - лучшее решение для кода Java5. он не имеет огромных потребностей в решениях, подобных OSGI, но довольно прост в использовании.
OSGI, безусловно, правильный путь. Но, предполагая, что вам не нужно выгружать, чтобы перезагрузить плагин, он может использовать молоток, чтобы сломать гайку.
Вы можете использовать классы в java.util.jar для сканирования каждого JAR-файла в папке плагинов, а затем использовать "java.net.URLClassLoader" для загрузки правильного.
Если вам "просто" нужен подключаемый компонент, достаточно просто создать экземпляры классов на основе метаинформации, например, прочитать через META-INF/ info загрузчиков классов из различных jar-файлов, которые находятся на вашем пути к классам или в определенном каталоге плагинов.,
OSGi, с другой стороны, предоставляет средства для структурирования всего вашего приложения. Если у вас уже есть большое настольное приложение, для которого требуется одна подключаемая часть, это будет крутой кривой обучения. Если вы начнете с того, что будет настольным приложением, OSGi предоставит средства для модуляции всего приложения. Речь идет о "изоляции компонентов" и независимости модулей.
Apache Felix обеспечивает хорошее начало, если вы хотите пойти по OSGi Lane. Это может выглядеть сложно и тяжеловесно, но это только потому, что никто не привык к такому уровню изоляции между модулями. Раньше было так просто вызывать любой публичный метод...
Вы думали об использовании OSGi в качестве плагина? С OSGi вы можете обновлять / заменять, загружать или выгружать свои модули по требованию.
Один из подходов, который я рассматриваю, состоит в том, чтобы мое приложение запускало облегченный контейнер OSGi, который, если я правильно понял, мог бы обнаружить, какие файлы JAR плагина существуют в указанной папке, что, в свою очередь, позволило бы мне перечислить их для выбора пользователем. от. Это возможно?
Я также нашел эту статью Ричарда Дедмана, но она выглядит несколько устаревшей (2006?) И не упоминает ни OSGi (по крайней мере, по имени), ни java.util.jar
пакет