У меня есть общий вопрос о проекте Maven multi module. Когда и зачем идти на это?
Почему и когда нужно создать мультимодульный проект Maven?
Ответ 1
Ответ @Esko Luontola
Разделение проекта на несколько модулей полезно, например, если модули необходимо развернуть отдельно,
может быть неверно истолкован. Если у вас есть модули, которые будут развернуты раздельно, это точно противоположно. В таком случае вы никогда не должны создавать многомодульную сборку. Это должно быть сделано через простые отдельные проекты maven.
Идея создания нескольких модулей заключается в том, что у вас есть модули, которые принадлежат друг другу, как проект уха, который обычно состоит из нескольких других, таких как клиент, сервер, ejb, war и т.д. Это обычно обрабатывается с помощью многомодульной сборки что означает, что все модули имеют одинаковый номер версии, но могут быть доступны и использованы другим отдельно.
Ответ 2
Похоже, что этот вопрос больше касается программного обеспечения в целом. Maven - это всего лишь один из способов сделать это.
Я возьму несколько строк из "Непрерывная доставка" , Jez Humble
Что такое компонент? Это ужасно перегруженный термин в программном обеспечении, поэтому мы постараемся сделать это как можно яснее, что мы подразумеваем под этим. Когда мы говорим о компонентах, мы имеем в виду достаточно крупномасштабный код структуры в рамках приложения с четко определенным API, который мог бы потенциально могут быть заменены на другую реализацию. компонентная программная система отличается тем, что codebase делится на отдельные части, которые обеспечивают поведение через четко определенные, ограниченные взаимодействия с другими компонентами. антитезой системы на основе компонентов является монолитная система без четкие границы или разделение проблем между элементами ответственный за различные задачи. Монолитные системы обычно имеют плохая инкапсуляция и плотная связь между логически независимыми структуры нарушают Закон Деметры.
...
Использование компонентного дизайна часто описывается как обнадеживающее повторное использование и хорошие архитектурные свойства, такие как развязка. Эта правда, но это также имеет еще одно важное преимущество: это один из наиболее эффективные способы совместной работы крупных команд разработчиков.
...
Многие проекты в порядке с единственным хранилищем управления версиями и простой конвейер развертывания. Однако многие проекты превратились в непоколебимый болото кода, потому что никто не принял решение создавать дискретные компоненты, когда это было дешево. Пункт в которые небольшие проекты меняются на более крупные, являются текучими и будут подкрадываться на вас.
...
Наконец, стоит отметить Закон Конвейс, в котором говорится, что "организации, которые разрабатывают системы... сдерживают производство проекты, которые являются копиями коммуникационных структур этих организаций".4 Так, например, проекты с открытым исходным кодом, где разработчики общаются только по электронной почте, как правило, очень модульные с несколькими интерфейсы. Продукт, разработанный небольшой группой, будет быть плотно соединенным и не модульным. Будьте осторожны, как вы настраиваете ваша команда разработчиков - это повлияет на архитектуру вашего приложение.
Я нахожу удивительным, насколько ясным и точным это последнее утверждение. И я настоятельно рекомендую эту книгу!: -)
Ответ 3
Разделение проекта на несколько модулей полезно, например, если модули необходимо развернуть отдельно, или в случае библиотеки некоторым потребителям проекта требуется только подмножество классов или разработчики библиотеки хотят сделать четкое различие между тем, что является общедоступным API, и тем, что является частной реализацией. И с большими проектами это может сделать код более удобным для поддержания порядка, даже если он может технически быть в одном модуле.
Ответ 4
Есть еще несколько вариантов использования, в которых я рекомендую использовать многомодовый проект maven:
-
В ваших модулях используются одни и те же зависимости, в этом случае вы укажете все зависимости в основной папке, и все модули смогут пользоваться им. (Нет необходимости указывать для каждого модуля те же зависимости.)
-
Если вам нужно выполнять операции над несколькими проектами вместе. (Я лично его использую), я создаю пакет из всех моих проектов и отправляю его в costumer, поэтому я их создаю с помощью основного pom и упаковываю их в zip файл, используя другой плагин maven.