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

Maven: агрегирование против зависимости

Я очень новичок в Maven, и сейчас я пытаюсь настроить свое первое дерево проектов. Я изо всех сил пытаюсь понять разницу между двумя альтернативами:

У меня есть проекты jar и war (два в каждом), которые я хочу связать. Традиционно я просто создаю проект уха, который имеет все четыре из них в качестве зависимостей.

Теперь я читал об агрегации попов и не знаю, что делать дальше (см. http://maven.apache.org/pom.html#Aggregation). Должен ли я создать агрегатный POM с четырьмя проектами?

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

4b9b3361

Ответ 1

Модуль - это всего лишь способ организации вещей.

В многомодульной сборке вы можете построить целые дерево артефактов за один шаг (вспомните Joel Test). Тем не менее, каждый из них будет отдельным артефактом, который может быть индивидуально обозначен как зависимость.

Вот пример макета, упаковка в круглых скобках.

root (pom)
    - project1 (jar)
    - project2 (war) -> references project1 as dependency
    - project3 (jar)
    - project4 (war) -> references project3 as dependency
    - project5 (ear) -> references project2 and project4 as dependency

вызвать mvn install в корневом каталоге, чтобы построить все дерево.

Предполагается, что проект1 используется только проектом2, а project3 используется только проектом4. В противном случае это более сложный сценарий.

root (pom)
    - project1 (jar)
    - project2 (jar)
    - project3 (war) -> references project1 and project2 as dependency of scope provided
    - project4 (war) -> references project1 and project2 as dependency of scope provided
    - project5 (ear) -> references project1 through project4 as dependency

Итак, модули отнимают работу по созданию нескольких проектов независимо, но вам все равно нужно самостоятельно управлять своими зависимостями.