I have two projects, app1 and app2.
app2 depends on app1(app2->app1).
app1's build.xml is like
<target name="deploy" depends="jar">
        <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${ivy.revision}" status="release" />
        <ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom" />
        <ivy:resolve />
        <ivy:publish resolver="nexus-snapshots" pubrevision="${ivy.revision}" overwrite="true" publishivy="false">
            <artifacts pattern="${build.dir}/[artifact].[ext]" />
        </ivy:publish>
    </target>
app1's ivy.xml is like this
<ivy-module version="2.0">
    <info organisation="the.bhushan" module="app1" revision="1.0-SNAPSHOT" />
    <publications>
        <artifact name="app1" type="jar" />
        <artifact name="app1" type="pom" />
    </publications>
    <dependencies>
        <dependency org="commons-cli" name="commons-cli" rev="1.0" />
        <dependency org="net.lingala.zip4j" name="zip4j" rev="1.3.1" />
    </dependencies>
</ivy-module>
app2's ivy.xml is like
<ivy-module version="2.0">
    <info organisation="the.bhushan" module="app2" revision="1.0-SNAPSHOT" />
    <configurations>
        <conf name="compile" visibility="public" />
    </configurations>
    <dependencies>
        <dependency org="the.bhushan" name="app1" rev="1.0-SNAPSHOT" />
    </dependencies>
</ivy-module>
Now the problem is that, in app2 transient dependencies are not getting retrieve(ie commons-cli and zip4j).
Update: I looked at pom created by app1. In that, all dependencies have <optional>true</optional> element.