2015-05-09 6 views
3

У меня есть проект со следующей структурой:Написание модульного 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? Или мне нужно загружать эти банки во время выполнения?

+0

Это может показаться слишком простым, и в этом случае я не понял ваш вопрос правильно: Если JAR-файлы/classes существуют, когда вы запускаете приложение, а просто добавляете свою папку в путь к классам (-cp folder/*)? – SirRichie

ответ

0

Обычно пользователь запускает приложение из сценария (или в окнах с некоторым настраиваемым java exe launcher). В сценарии вы можете просто добавить папку плагинов для вашего пути к классам по аналогии с этим:

java -cp plugin/* -jar app.jar 
Смежные вопросы