Написание модульных приложений Java
У меня есть проект со следующей структурой:
+---main
| \pom.xml
+---module1
| \pom.xml
+---module2
| \pom.xml
+---module3
| \pom.xml
+---module4
| \pom.xml
+---pom.xml
Модули использует ServiceLoader
механизм регистрации своих услуг. Основной класс находится в main
модуль, который также отвечает за загрузку сервисов в classpath с использованием ServiceLoader
механизм. Проблема в том, что main
модуль не знает module1
, module2
, module3
а также module4
потому что они установлены пользователем самостоятельно. Я хочу добавить все классы в этих модулях в classpath при запуске программы, чтобы ServiceLoader знал о службах в этих модулях.
В настоящее время я загружаю эти модули во время выполнения из main
модуль, но это, кажется, не хороший способ решения этой проблемы, потому что IDE не знает об этих модулях, и кажется, что загрузка этих модулей занимает намного больше времени во время выполнения. Я смотрел на то, как модульные проекты Java, такие как Elasticsearch и PrestoDB, решают эту проблему, но кажется, что они оба загружают установленные модули во время выполнения.
Как вы решаете эту проблему при разработке модульных приложений Java? Допустим, у меня есть каталог с плагинами, в котором находятся файлы jar модулей, установленных пользователем. Можно ли запустить приложение с classpath, который содержит все файлы jar в этом каталоге, с помощью плагина maven? Или я должен загрузить эти банки во время выполнения?
1 ответ
Обычно пользователь запускает приложение из сценария (или в Windows с каким-либо настраиваемым модулем запуска Java). В этом скрипте вы можете просто добавить папку с плагином в ваш путь к классу следующим образом:
java -cp plugin/* -jar app.jar