2010-07-27 2 views
12

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

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

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

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

+0

Соглашение в SO должно использовать тег maven-2, если вы не имеете в виду (мертвую) версию maven 1. Это неприятность, если вы спросите меня, но так оно и есть. Это изменилось для вас. –

ответ

11

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

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

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

+2

Спасибо за ваш ответ! Просто, чтобы было ясно: если в вашем примере я бы не использовал проект «root», а просто создал бы проект5 (т. Е. «Mvn install» там), то он не будет автоматически перекомпилировать проекты 1-4, правильно? Наверное, это то, что я ложно принял и что привело к моей путанице. – apropoz

+0

точно. maven работает нигде, но находится под текущим каталогом. он разрешит другие артефакты из локального или удаленного репозитория, но он не будет повторно строить их, если они не находятся внутри текущего дерева. –

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