Index: branches/TaskRewrite/src/build.xml
===================================================================
--- branches/TaskRewrite/src/build.xml	(revision 57)
+++ branches/TaskRewrite/src/build.xml	(revision 74)
@@ -1,38 +1,128 @@
-<project name="gnumims" default="test">
+<project xmlns:ivy="antlib:org.apache.ivy.ant" name="gnumims" default="test">
+    <property environment="env"/>
+  	<property name="ivy.install.version" value="2.0.0" />
+    <condition property="ivy.home" value="${env.IVY_HOME}">
+      <isset property="env.IVY_HOME" />
+    </condition>
+    <property name="ivy.home" value="${user.home}/.ant" />
+    <property name="ivy.jar.dir" value="${ivy.home}/lib" />
+    <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy-${ivy.install.version}.jar" />
 
-    <condition property="grails" value="grails.bat">
-        <os family="windows"/>
-    </condition>
-    <property name="grails" value="grails" />
-
-	<!-- ================================= 
-          target: clean              
-         ================================= -->
-    <target name="clean" description="--> Cleans a Grails application">
-		<exec executable="${grails}" failonerror="true">
-			<arg value="clean"/>
-		</exec>                               
+    <target name="download-ivy" unless="offline">
+		<available file="${ivy.jar.file}" property="ivy.available"/>
+		<antcall target="-download-ivy" />
     </target>
 
-	<!-- ================================= 
-          target: war              
+	<target name="-download-ivy" unless="ivy.available">
+        <mkdir dir="${ivy.jar.dir}"/>
+        <!-- download Ivy from web site so that it can be used even without any special installation -->
+        <get src="http://www.apache.org/dist/ant/ivy/${ivy.install.version}/apache-ivy-${ivy.install.version}-bin.zip"
+            dest="${ivy.home}/ivy.zip" usetimestamp="true" verbose="true"/>
+	    <unzip src="${ivy.home}/ivy.zip" dest="${ivy.jar.dir}">
+		   <patternset>
+		        <include name="**/*.jar"/>
+		    </patternset>
+			<mapper type="flatten"/>
+		</unzip>
+	</target>
+
+    <target name="init-ivy" depends="download-ivy" unless="ivy.lib.path">
+      <!-- try to load ivy here from ivy home, in case the user has not already dropped
+              it into ant's lib dir (note that the latter copy will always take precedence).
+              We will not fail as long as local lib dir exists (it may be empty) and
+              ivy is in at least one of ant's lib dir or the local lib dir. -->
+        <path id="ivy.lib.path">
+            <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
+        </path>
+        <taskdef resource="org/apache/ivy/ant/antlib.xml"
+                 uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
+    </target>
+
+
+    <property name="lib.dir" value="${basedir}/lib"/>
+
+    <macrodef name="grails">
+        <attribute name="script"/>
+        <attribute name="args" default="" />
+        <sequential>
+            <grailsTask script="@{script}" args="@{args}" classpathref="grails.classpath">
+                <compileClasspath refid="compile.classpath"/>
+                <testClasspath refid="test.classpath"/>
+                <runtimeClasspath refid="app.classpath"/>
+            </grailsTask>
+        </sequential>
+    </macrodef>
+
+    <!-- =================================
+          target: resolve
          ================================= -->
-    <target name="war" description="--> Creates a WAR of a Grails application">
-		<exec executable="${grails}" failonerror="true">
-			<arg value="war"/>
-		</exec>                               
+    <target name="-resolve" description="--> Retrieve dependencies with ivy" depends="init-ivy">
+        <ivy:retrieve pattern="${lib.dir}/[conf]/[artifact]-[revision].[ext]"/>
     </target>
-	
-	<!-- ================================= 
-          target: test              
+
+    <target name="-init-grails" depends="-resolve">
+        <path id="grails.classpath">
+            <fileset dir="${lib.dir}/build"/>
+        </path>
+
+        <path id="compile.classpath">
+            <fileset dir="${lib.dir}/compile"/>
+        </path>
+
+        <path id="test.classpath">
+            <fileset dir="${lib.dir}/test"/>
+        </path>
+
+        <path id="app.classpath">
+            <fileset dir="${lib.dir}/runtime"/>
+        </path>
+
+        <taskdef name="grailsTask"
+                 classname="grails.ant.GrailsTask"
+                 classpathref="grails.classpath"/>
+    </target>
+
+    <target name="deps-report" depends="-resolve" description="--> Generate report of module dependencies.">
+        <ivy:report conf="*"/>
+    </target>
+
+    <!-- =================================
+          target: clean
          ================================= -->
-    <target name="test" description="--> Run a Grails applications unit tests">
-		<exec executable="${grails}" failonerror="true">
-			<arg value="test-app"/>
-		</exec>                               
+    <target name="clean" depends="-init-grails" description="--> Cleans a Grails application">
+        <grails script="Clean"/>
+        <delete dir="${lib.dir}" includes="**/*"/>
     </target>
-	
-	<!-- ================================= 
-          target: deploy              
+
+    <!-- =================================
+          target: compile
+         ================================= -->
+    <target name="compile" depends="-init-grails" description="--> Compiles a Grails application">
+        <grails script="Compile"/>
+    </target>
+
+    <!-- =================================
+          target: war
+         ================================= -->
+    <target name="war" depends="-init-grails" description="--> Creates a WAR of a Grails application">
+        <grails script="War"/>
+    </target>
+
+    <!-- =================================
+          target: test
+         ================================= -->
+    <target name="test" depends="-init-grails" description="--> Run a Grails applications unit tests">
+        <grails script="TestApp"/>
+    </target>
+
+    <!-- =================================
+          target: run
+         ================================= -->
+    <target name="run" depends="-init-grails" description="--> Runs a Grails application using embedded Jetty">
+        <grails script="RunApp"/>
+    </target>
+
+    <!-- =================================
+          target: deploy
          ================================= -->
     <target name="deploy" depends="war" description="--> The deploy target (initially empty)">
