В этой статье я хотел бы рассказать, как быстро и просто сделать каркас приложения на Java с поддержкой динамической загрузки плагинов. Читателю наверняка сразу в голову придёт, что такая задача уже давно решена, и можно просто использовать готовые фреймворки или написать свой загрузчик классов, но в предлагаемом мною решении ничего этого не потребуется:
- Нам не понадобятся специальные библиотеки или фреймворки (OSGi, Guice и т.п.)
- Мы не будем использовать парсинг байткода с помощью ASM и подобных библиотек.
- Не будем писать свой загрузчик классов.
- Не будем использовать рефлексию и аннотации.
- Не понадобится возня с classpath для поиска плагинов. Мы вообще не будем трогать classpath.
- Также мы не будем использовать XML, YAML или какие-либо другие декларативные языки для описания точек расширений (extension point’ов в плагинах).
Однако всё же есть одно требование — такое решение будет работать только на Java 9 или выше. Потому что оно будет основано на модулях и сервисах.
Читать полностью »