Add AOT compilation to jar file generation

diff --git a/build.xml b/build.xml
--- a/build.xml
+++ b/build.xml
@@ -4,19 +4,72 @@
     Pack all clojure-contrib sources into a JAR.
   </description>
 
+  <property environment="env"/>
+
+  <property name="src" location="src"/>
+  <property name="build" location="classes"/>
+  <property name="clojure.lib" location="${env.CLOJURE_LIB}"/>
+
+  <path id="clojurelib">
+    <fileset dir="${clojure.lib}" includes="**/*.jar"/>
+  </path>
+
   <!-- The JAR file to create. -->
   <property name="jarfile" location="clojure-contrib.jar"/>
 
-  <target name="clean"
-          description="Remove generated files and directories.">
-    <delete file="${jarfile}"/>
+  <target name="init">
+    <tstamp/>
+    <mkdir dir="${build}"/>
   </target>
 
-  <target name="jar"
-          description="Create jar file.">
-    <jar jarfile="${jarfile}">
-      <fileset dir="." includes="CPL.TXT"/>
-      <fileset dir="./src" includes="clojure/contrib/**/*.clj"/>
+  <target name="clean"
+    description="Remove generated files and directories.">
+    <delete file="${jarfile}"/>
+    <delete dir="${build}"/>
+  </target>
+
+  <target name="compile_clojure" depends="init"
+    description="Compile Clojure sources.">
+    <java classname="clojure.lang.Compile">
+      <classpath>
+        <path location="${build}"/>
+        <path location="${src}"/>
+        <path refid="clojurelib"/>
+      </classpath>
+      <sysproperty key="clojure.compile.path"
+        value="${build}"/>
+      <arg value="clojure.contrib.command-line"/>
+      <arg value="clojure.contrib.cond"/>
+      <arg value="clojure.contrib.def"/>
+      <arg value="clojure.contrib.duck-streams"/>
+      <arg value="clojure.contrib.except"/>
+      <arg value="clojure.contrib.fcase"/>
+      <arg value="clojure.contrib.gen-interface"/>
+      <arg value="clojure.contrib.import-static"/>
+      <arg value="clojure.contrib.javadoc"/>
+      <arg value="clojure.contrib.lazy-seqs"/>
+      <arg value="clojure.contrib.memoize"/>
+      <arg value="clojure.contrib.mmap"/>
+      <arg value="clojure.contrib.ns-utils"/>
+      <arg value="clojure.contrib.pred"/>
+      <arg value="clojure.contrib.seq-utils"/>
+      <arg value="clojure.contrib.sql.internal"/>
+      <arg value="clojure.contrib.sql"/>
+      <arg value="clojure.contrib.str-utils"/>
+      <arg value="clojure.contrib.test-is"/>
+      <arg value="clojure.contrib.trace"/>
+      <arg value="clojure.contrib.zip-filter"/>
+    </java>
+  </target>
+
+  <target name="jar" depends="compile_clojure"
+    description="Create jar file.">
+    <jar jarfile="${jarfile}" basedir="${build}">
+      <path location="CPL.txt"/>
+      <fileset dir="${src}" includes="**/*.clj"/>
+      <manifest>
+        <attribute name="Class-Path" value="."/>
+      </manifest>
     </jar>
   </target>
 
