2016-02-15 1 views
-2

Я только начал работать над проектом, который имеет много общего в базе кода между различными программами. Например, четыре программы анализируют HTML-страницы, и каждый из них имеет пакет util с классом Parser (все они одинаковы). Моя мысль была объединить все эти независимые программы, в структуре, как это:Является ли мультимодульный проект Maven подходящим для независимых программ?

- util (util related classes) 
    - src 
    - pom.xml 
- net (network related classes) 
    - src 
    - pom.xml 
- app1 
    - src 
    - pom.xml 
- app2 
    - src 
    - pom.xml 
- app3 
    - src 
    - pom.xml 
- pom.xml 

Затем, когда мне нужно использовать Redis в любом из приложений, я просто импортировать пакет net.Reis (или импорт util.Parser для использования анализатора HTML). Тем не менее, я совершенно новичок в вещах, и даже после прочтения многомодульного руководства here, я по-прежнему не уверен, что это подходящая модель для совершенно разных (но во многом связанных) программ.

ответ

1

Я думаю, что вы совершенно правы. Повторное использование модулей намного лучше, чем дублирование кода по очевидным причинам.

Однако я хотел бы подчеркнуть, что существует путь к классу компиляции и путь к среде выполнения. Я объясню ...

Сложение

В мавена есть упаковка недвижимости. Он определяет, какой тип артефакта будет скомпилирован из модуля. Обычно (и по умолчанию) его jar.

Итак, при построении вы получите банку Parser и добавите ее как зависимость от файлов pom.xml другого модуля.

Теперь это означает, что во время компиляции бинарники парсера будут находиться в пути к классам (другими словами, если у вас есть модуль A, который зависит от модуля Parser, внутри источника модуля A вы сможете использовать класс MyParser определенный в модуле Parser).

Вот как вы строите.

Продолжительность

Когда баночка готова, вы не можете запустить его как отдельное приложение. Maven не справляется с этим из коробки.

выполнения является путь к классам совсем другое дело

Таким образом, вы должны решить, как на самом деле запустить приложение.

Здесь есть много возможных вариантов здесь:

  • переупаковка всех бинарных файлов в один большой банкой жира (убер банку). Плагин Maven shade может помочь здесь

  • Создание пользовательского макета и скриптов для запуска приложения. В этом случае посмотрите на maven-assembly-plugin

  • Для приложений wwb. Просто создайте WAR-модуль (по одному на приложение, война означает «веб-архив») и упакуйте все в web-inf/lib внутри войны. Maven делает это автоматически, если вы укажете упаковку «война». Однако в этом случае вам понадобится контейнер для запуска войны (Tomcat, Jetty и т. Д.).

  • Опять же, если это необходимо для веб-приложения, рассмотрите возможность использования более «причудливых» вещей, таких как Spring Boot. Это создаст большую толстую банку со всем, что вам нужно внутри, поэтому вам не нужно будет вообще думать о classpath.

Я пропустил несколько способов здесь и здесь, конечно, ваш выбор конечно.

Надеюсь, что это поможет

Смежные вопросы