Написание модульных приложений 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
Другие вопросы по тегам