As apps target is depending upon the core, and core depends upon reports and all three of them creates jar... So we can use antcall target for this... You can define path element, and createjar target...
Create a common path entry...
<path id="master-classpath">
<fileset dir="${lib/dir}">
<include name="*.jar"/>
</fileset>
<pathelement path="${build.dir}"/>
</path>
<target name="createJar" description="creating the jar">
<javac destdir="${build.dir}" ncludeantruntime="false">
<src path="${src.dir}"/>
<classpath refid="${var-classpath}"/>
</javac>
<WRITE CODE FOR JAR CREATION>
<copy the jar to lib/dir>
</target>
<target name="report">
<antcall target="createJar">
<param name="src.dir" value="./src/reports"/>
<param name="var-classpath" value="master-classpath"/>
<param name="jar-name" value="reports.jar"/>
</antcall>
</target>
<target name="core" depends="report">
<antcall target="createJar">
<param name="src.dir" value="./src/core"/>
<param name="jar-name" value="core.jar"/>
</antcall>
</target>
<target name="apps" depends="core">
<antcall target="createJar">
<param name="src.dir" value="./src/core"/>
<param name="jar-name" value="core.jar"/>
</antcall>
</target>
Something like this will help you to create your file. This code is not complete. You need to make lot of changes to make it work...