Предлагаемое рабочее пространство выглядит хорошо. Для ясности я выложу это здесь (примечание, ear , web и * - все пустые каталоги).
parent (contains root pom.xml)
|--- ear
|--- ear1 (contains ear1 pom.xml)
|--- ear2 (contains ear2 pom.xml)
|--- web
|--- web1 (contains web1 pom.xml)
|--- web2 (contains web2 pom.xml)
|--- components
|--- jar1 (contains jar1 pom.xml)
|--- jar2 (contains jar2 pom.xml)
|--- jarN (contains jarN pom.xml)
Поскольку зависимости проекта берутся из хранилища (локального или удаленного), нет проблем, что модули не будут расположены на одном уровне. Вы должны объявить их как обычные зависимости. Например, в ear1 вы можете указать:
<dependencies>
<dependency>
<groupId>_your_groupId_</groupID>
<artifactId>_jar1_artifactId_</artifactId>
<version>_jar1_version_</version>
<dependency>
<dependency>
<groupId>_your_groupId_</groupID>
<artifactId>_web1_artifactId_</artifactId>
<version>_web1_version_</version>
<dependency>
</dependencies>
Я не уверен, что полностью понимаю ваши потребности, но я постараюсь описать, что я буду делать.
Вы можете использовать профили, чтобы указать, какие проекты создавать. Например, предположим, что проект ear1 зависит от проектов jar1 , jar2 , jar4 и web2 . В этом случае в корневом файле pom.xml вы можете указать такой профиль:
<profiles>
<profile>
<id>ear1</id>
<modules>
<module>components/jar1</module>
<module>components/jar2</module>
<module>components/jar4</module>
<module>web/web2</module>
<module>ear/ear1</module>
</modules>
</profile>
</profiles>
Если вы запустите mvn package -P ear1
, Maven будет создавать только те модули, которые указаны в разделе <modules>
профиля.