How to: using ant to deploy to OC4j (dp4)

In a comment to my posting Deploy task bug in oc4j 10.1.3 dp4, art_usa asked for some help deploying to oc4j using ant. The following example works for me. First the Ant build.xml file itself:

<?xml version="1.0" encoding="windows-1252" ?>
<project default="all" xmlns:oracle="antlib:oracle"
	     xmlns="antlib:org.apache.tools.ant"
	     xmlns:ivy="antlib:fr.jayasoft.ivy.ant">
  <property file="build.properties"/>
  <!--
	============================================================================
	== properties
	============================================================================
	-->
  <!-- directories -->
  <property name="src.dir" value="src"/>
  <property name="classes.dir" value="classes"/>
  <property name="log.dir" value="log"/>
  <property name="web.dir" value="public_html"/>
  <property name="deploy.dir" value="deploy"/>
  <property name="doc.dir" value="doc"/>
  <!-- deliverables -->
  <property name="webjar.file" value="${app.name}-web.jar"/>
  <property name="war.file" value="${app.name}-web.war"/>
  <property name="ejbjar.file" value="${app.name}-ejb.jar"/>
  <property name="ear.file" value="${app.name}.ear"/>
  <!--
	============================================================================
	== class path
	============================================================================
	-->
  <path id="class.path">
	<fileset dir="lib">
	  <include name="**/*.jar"/>
	</fileset>
	<pathelement path="${classes.dir}"/>
  </path>
  <!--
	============================================================================
	== init
	============================================================================
	-->
  <target name="init">
	<tstamp/>
	<mkdir dir="${log.dir}"/>
	<mkdir dir="${classes.dir}"/>
  </target>
  <!--
	============================================================================
	== compile
	============================================================================
	-->
  <target name="compile" depends="init">
	<javac srcdir="${src.dir}" destdir="${classes.dir}"
	       classpathref="class.path"/>
	<copy todir="${classes.dir}">
	  <fileset dir="${src.dir}">
	    <include name="**/*.xml"/>
	    <include name="**/*.properties"/>
	  </fileset>
	</copy>
  </target>
 <!--
	============================================================================
	== war
	============================================================================
	-->
  <target name="war" depends="compile">
	<war destfile="${deploy.dir}/${war.file}" webxml="${web.dir}/WEB-INF/web.xml">
	  <fileset dir="${classes.dir}">
	    <include name="**/*.class"/>
	    <exclude name="test/**/*.class"/>
	  </fileset>
	  <fileset dir="${web.dir}">
	    <include name="**/*.jspx"/>
	    <include name="**/*.html"/>
	    <include name="WEB-INF/*.xml"/>
	  </fileset>
	  <lib dir="lib">
	    <exclude name="ivy-1.1.jar"/>
	    <exclude name="ejb.jar"/>
	    <exclude name="ejb30.jar"/>
	    <exclude name="junit.jar"/>
	    <exclude name="oc4jclient.jar"/>
	  </lib>
	</war>
  </target>
  <!--
	============================================================================
	== ejb jar
	============================================================================
	-->
  <target name="ejb" depends="compile">
	<jar destfile="${deploy.dir}/${ejbjar.file}">
	  <fileset dir="${classes.dir}">
	    <include name="**/model/**/*.class"/>
	    <exclude name="test/**/*.class"/>
	  </fileset>
	</jar>
  </target>
  <!--
	============================================================================
	== Ear
	============================================================================
	-->
  <target name="ear" depends="war,ejb">
	<ear destfile="${deploy.dir}/${ear.file}"
	     appxml="${classes.dir}/META-INF/application.xml">
	  <fileset dir="${deploy.dir}/" includes="${war.file}"/>
	  <fileset dir="${deploy.dir}/" includes="${ejbjar.file}"/>
	</ear>
  </target>
  <!--
	============================================================================
	== deploy
	============================================================================
	-->
  <target name="deploy" depends="init">
	<oracle:deploy moduletype="ear" host="${oc4j.host}"
	               port="${oc4j.admin.port}" userid="${oc4j.admin.user}"
	               password="${oc4j.admin.password}"
	               file="${deploy.dir}/${ear.file}"
	               deploymentname="${app.name}"
	               logfile="${log.dir}/deploy-ear.log"/>
	<oracle:bindWebApp host="${oc4j.host}" port="${oc4j.admin.port}"
	                   userid="${oc4j.admin.user}"
	                   password="${oc4j.admin.password}"
	                   deploymentname="${app.name}" webmodule="${web.name}"
	                   websitename="${oc4j.binding.module}"
	                   contextroot="/${app.name}"
	                   />
  </target>
  <!--
	============================================================================
	== clean
	============================================================================
	-->
  <target name="clean">
	<delete quiet="true">
	  <fileset dir="lib" includes="**/*.jar" excludes="**/ivy-1.1.jar"/>
	  <fileset dir="${classes.dir}" includes="**/*"/>
	  <fileset dir="deploy" includes="*"/>
	</delete>
  </target>
  <!--
	============================================================================
	== deploy
	============================================================================
	-->
  <target name="all" depends="clean,ear,deploy"/>
</project>

Next the build.properties file:

app.name=test1
web.name=test1-web

oc4j.binding.module=default-web-site
oc4j.admin.port=23791
oc4j.admin.user=oc4jadmin
oc4j.http.port=8888
oc4j.admin.password=admin
oc4j.host=localhost

java.home=c:\Program Files\Java\jdk1.5.0_01
oracle.home=c:\programs\oracle\oc4j1013-dp4

And finally a shell script to start ant.

set JAVA_HOME=c:Program FilesJavajdk1.5.0_01
set ANT_HOME=c:programsoracleoc4j1013-dp4ant
set ORACLE_HOME=c:programsoracleoc4j1013-dp4

set PATH=%JAVA_HOME%bin;%ANT_HOME%bin;%PATH%

%ANT_HOME%binant %1 %2 %3