Многомодульный проект описан в документации:
http://ant.apache.org/ivy/history/latest-milestone/tutorial/multiproject.html
, а исходный код доступен в Subversion:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/example/multi-project/
Упрощенная сводка того, как это работает:
Сборка Wrapper
Вызывает каждую отдельную сборку модуля в правильном порядке.Если модуль A зависит от модуля B, то сначала будет построен B:
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="build-all" default="build">
<!--
==========================================================================
Use the ivy buildlist task to create an ordered list of sub-project builds
==========================================================================
-->
<target name="build-list">
<ivy:buildlist reference="build-path">
<fileset dir="." includes="modules/**/build.xml"/>
</ivy:buildlist>
</target>
<!--
==============================
Invoke targets in sub-projects
==============================
-->
<target name="build" depends="build-list" description="Invoke build target on sub-projects">
<subant target="build" buildpathref="build-path" />
</target>
</project>
Для получения дополнительной информации см. Документацию buildlist .
Сборка модуля
Каждый модуль загружает свои зависимости в начале сборки
<target name="init">
<ivy:settings file="../../ivysettings.xml"/>
<ivy:resolve/>
</target>
В конце публикует свои встроенные артефакты:
<target name="publish" depends="build" description="Publish module artifacts to the respository">
<ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true">
<artifacts pattern="${build.dir}/[artifact].[ext]"/>
</ivy:publish>
</target>
Не забывайте, что для всехчтобы это работало, каждый модуль должен объявлять, от чего он зависит и что он публикует
<ivy-module version='2.0'>
<info organisation='com.myorg' module='mymod'/>
<publications>
<artifact name="mymod" type="jar"/>
</publications>
<dependencies>
..
</dependencies>
</ivy-module>