Maven: агрегация против зависимости - PullRequest
13 голосов
/ 27 июля 2010

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

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

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

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

1 Ответ

11 голосов
/ 27 июля 2010

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

В многомодульной сборке вы можете создать целое дерево артефактов за один шаг (вспомните 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 в корневом каталоге, чтобы построить все дерево.

Здесь предполагается, что project1 используется только project2, а project3 используется только project4. В противном случае здесь более сложный сценарий.

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

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

...