Вы должны позаботиться о различиях между отношением родитель-ребенок и концепцией агрегации в Maven2. Это не один и тот же принцип, даже если они действительно часто используются одновременно.
РОДИТЕЛИ
Первая концепция заключается в том, что проект объявляет в своем pom.xml
родителя:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>42</version>
</parent>
...
В этом случае для построения этого компонента родительский проект должен быть найден в локальном репозитории. Это ваш случай здесь.
Интерес родительской концепции в Maven 2 заключается в наследовании свойств, зависимостей, конфигурации. Это место, где вы разместите всю общую информацию о детских проектах.
Это точно такая же концепция extends
в языке Java.
агрегация
В этом случае у вас есть проект, который объединяет несколько подмодулей, указав их имена в module
узлах:
<modules>
<module>commons</module>
<module>client</module>
<module>server</module>
...
</modules>
Это означает, что каждая команда, которую вы запустите в этом корневом проекте, будет выполняться на каждом модуле (порядок определяется реактором Maven 2). Например, если вы запускаете mvn clean install
в корневом проекте, Maven 2 выполнит эту команду в корневом проекте, затем в проекте commons
, затем в client
и, наконец, в server
.
.
В этой концепции вы можете скомпилировать один проект без компиляции какого-либо другого проекта (кроме случаев, когда есть взаимозависимости, конечно).
Вот схема, которая показывает две разные концепции:

У вас есть более подробное объяснение этих двух понятий в Maven: Полное руководство, здесь .