Подтвердить что ты не робот

Преимущества Maven Multi Module над простой зависимостью

У меня есть многолетний опыт работы с maven-проектами, даже с несколькими модульными модулями (что заставило меня ненавидеть мультимодульную функцию maven (так что теперь отказ от ответственности)), и даже если мне действительно нравится maven, есть что-то, что я не может получить ясный ответ о:

Что такое типичная утилита мультимодульного проекта maven? Какова добавленная стоимость такой структуры по сравнению с простыми зависимостями и родительским pom?

Я видел много конфигураций проектов с несколькими модулями, но все они могли быть четко решены путем создания простой структуры библиотеки зависимостей, которые живут своей жизнью в качестве конечных результатов (даже с родительским помпом, в качестве отдельной версии: факторинг зависимостей и конфигурации), и я не нашел каких-либо случаев, когда я могу ясно видеть добавленную стоимость структуры мультимодуля.

Я всегда обнаружил, что такая структура приносит чрезмерную сложность без реальной выгоды: где я что-то упускаю? (чтобы быть по-настоящему честным, я могу понять, что некоторые ear могут извлечь выгоду из такого рода структуры, но кроме этого конкретного использования, любого другого реального использования и пользы?)

4b9b3361

Ответ 1

Здесь реальный случай жизни.

У меня есть проект с несколькими модулями (и на ваш разбор... я не видел никаких осложнений). Конечным результатом является webapp, но у меня есть разные модули для api, impl и webapp.

Через 12 месяцев после создания проекта я обнаружил, что мне нужно интегрироваться с Amazon S3, используя автономный процесс, запускаемый из банки. Я добавляю новый модуль, который зависит от api/impl и записывает мой код для интеграции в новый модуль. Я использую плагин сборки (или что-то вроде этого) для создания runnable jar, и теперь у меня есть война, которую я могу развернуть в tomcat, и процесс, который я могу развернуть на другом сервере. У меня нет веб-классов в моем процессе интеграции S3, и у меня нет зависимостей от Amazon в моем webapp, но я могу поделиться всеми вещами в api и impl.

Через 3 месяца мы решили создать веб-приложение REST. Мы хотим сделать это как отдельное приложение, а не только новые сопоставления URL-адресов в существующем webapp. Просто. Еще один модуль, другой webapp, созданный в результате сборки maven без специального вмешательства. Бизнес-логика легко разделяется между webapp и rest-webapp, и я могу их развернуть по мере необходимости.

Ответ 2

Основным преимуществом нескольких модулей является

  • одна команда maven для создания всех ваших модулей сразу.
  • и самое главное: maven заботится о порядке сборки для вас.
  • настройка вашего CI-сервера также очень проста: одна задача jenkins для создания всего.

Я уже работал в проекте с 30 подмодулями. Иногда вам нужно что-то менять больше, чем модуль, и запускать одну единственную команду и быть уверенным, что все, что нужно компилировать, скомпилировано в правильном порядке, является обязательным.

ИЗМЕНИТЬ

Почему 30 подмодулей?

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

Ответ 3

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

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

  • Клиентский модуль
  • Интерфейсный модуль (который имеет общие объекты между клиентом и реализацией)
  • модуль реализации
  • военный модуль

Я согласен с тем, что включение этого модуля реализации и войны в один и тот же фактический модуль будет в порядке, но преимущество (возможно) в этом заключается в том, что это очень четкое разделение между классами, которые решают проблему, и тем, как приложение взаимодействует с внешним мир.

В предыдущих проектах, в которых участвовало только веб-приложение, я попытался поместить все в один и тот же модуль, так как он упростил тестирование, учитывая модули, которые я использовал.