+++ Root
+++ Base
pom.xml (рутовый pom)
+++ SubProject1
pom.xml
<parent>
<artifactId>Base</artifactId>
<relativePath>../Base/pom.xml</relativePath>
...
</parent>
+++ SubProject2
+++ SubBase2
pom.xml
<parent>
<artifactId>Base</artifactId>
<relativePath>../../Base/pom.xml</relativePath>
...
</parent>
+++ SubProject21
pom.xml
<parent>
<artifactId>SubBase2</artifactId>
<relativePath>../SubBase2/pom.xml</relativePath>
...
</parent>
+++ SubProject22
+++ SubProject23
таким образом для сборки например подпроекта SubProject21 нам не надо синхронизироваться по каталогу Root, где может содержаться большое число подпроектов, а только несколько подкаталогов:
Root/Base,
Root/SubProject2/SubBase2,
Root/SubProject2/SubProject21
<project default="SubProject2_all">
<condition property="maven.executable" value="mvn.bat">
<os family="windows"/>
</condition>
<property name="maven.executable" value="mvn"/>
<property name="target" value="clean install"/>
<property name="fastTarget" value="install -DskipTests=true"/>
<target name="SubProject2_all">
<exec dir=".." executable="${maven.executable}" failonerror="true">
<arg line="${target}"/>
</exec>
</target>
<target name="SubProject2_clean">
<exec dir=".." executable="${maven.executable}" failonerror="true">
<arg line="clean"/>
</exec>
</target>
<target name="SubBase2">
<exec dir="." executable="${maven.executable}" failonerror="true">
<arg line="${target}"/>
</exec>
</target>
<target name="fastSubBase2">
<exec dir="." executable="${maven.executable}" failonerror="true">
<arg line="${fastTarget}"/>
</exec>
</target>
<target name="SubProject21" depends="SubBase2">
<exec dir="../SubProject21" executable="${maven.executable}" failonerror="true">
<arg line="${target}"/>
</exec>
</target>
<target name="fastSubProject21" depends="fastSubBase2">
<exec dir="../CommonServices/DataProcessing" executable="${maven.executable}" failonerror="true">
<arg line="${fastTarget}"/>
</exec>
</target>
<target name="SubProject22" depends="SubProject21">
<exec dir="../SubProject21" executable="${maven.executable}" failonerror="true">
<arg line="${target}"/>
</exec>
</target>
<target name="fastSubProject22" depends="fastSubProject21">
<exec dir="../CommonServices/DataProcessing" executable="${maven.executable}" failonerror="true">
<arg line="${fastTarget}"/>
</exec>
</target>
...