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