An Ant build script for web applications

Ant web build script FAQ: Can you share an example Ant build script for a web application?

Sure, here's a sample Ant build script for a Java web application. I've included other example Ant scripts for Java Swing/JFC/GUI applications on this website, but this one demonstrates how to use Ant to build a web app instead.

My Ant build script for web applications

<project name="MY_APP" default="cleandist" basedir=".">

  <property environment="currentenv" />
  <property file="build.${currentenv.ANT_HOST_NAME}" />
  <property name="build"   value="build" />
  <property name="rootdir" value="../" />

  <!-- properties for 'jsp-only' deployment on tool -->
  <property name="cvspages"        value="../pages" />
  <property name="jspTargetDir"    value="${appDeployDir}" />
  <property name="imagesTargetDir" value="${jspTargetDir}/images" />

  <path id="class.path">
    <pathelement path="${currentenv.classpath}"/>
    <fileset dir="../lib">
      <include name="**/*.jar"/>
      <include name="**/*.zip"/>
    <fileset dir="${tomcat_home}/lib">
      <include name="**/*.jar"/>
      <include name="**/*.zip"/>

  <!-- CLEAN -->
  <target name="clean">
    <echo message="Removing old directory structure..." />
    <delete dir="${appDeployDir}" >

  <!-- MK DEPLOY DIR -->
  <target name="mkDeployDir">
    <mkdir dir="${appDeployDir}/WEB-INF/classes" />
    <mkdir dir="${dg_props_dir}" />

  <!-- DEPLOY -->
  <target name="deploy">
      <copy todir="${appDeployDir}">
          <fileset dir="${rootdir}/pages"/>
      <replace file="${appDeployDir}/global/properties.jsp" token="@web_site_context@" value="${web_site_context}" /> 
      <copy todir="${appDeployDir}/WEB-INF/lib">
          <fileset dir="${rootdir}/lib" />

      <copy todir="${appDeployDir}/WEB-INF/classes">
          <fileset dir="${rootdir}/classes" />

      <!-- STRUTS STUFF -->
      <copy todir="${appDeployDir}/WEB-INF">
          <fileset dir="${rootdir}/resources">
            <include name="*.tld"/>
      <copy file="${rootdir}/resources/struts-config.xml" toDir="${appDeployDir}/WEB-INF/" />

      <!-- WEB.XML -->
      <copy file="${rootdir}/resources/web.xml" toDir="${appDeployDir}/WEB-INF/" />
      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@dg_props_dir@" value="${dg_props_dir}" /> 
      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@deployDir@"    value="${appDeployDir}" /> 

      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@databasehost@"  value="${databasehost}" /> 
      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@db_name@"       value="${db_name}" /> 
      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@db_username@"   value="${db_username}" /> 
      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@db_password@"   value="${db_password}" /> 
      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@db_log_file@"   value="${db_log_file}" /> 
      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@db_driver@"     value="${db_driver}" /> 
      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@db_url@"        value="${db_url}" /> 

      <replace file="${appDeployDir}/WEB-INF/web.xml" token="@file_upload_dir@"   value="${file_upload_dir}" /> 

      <replace file="${appDeployDir}/fileUpload.jsp" token="@web_site_context@"   value="${web_site_context}" /> 

      <!-- <copy file="${rootdir}/resources/log.conf" toDir="${appDeployDir}/WEB-INF/" /> -->

      <!-- DATA/CONFIG FILE LOC -->
      <copy file="${rootdir}/resources/dg.props" toDir="${dg_props_dir}" />


  <target name="compile">
    <echo message="Compiling MY_APP ..." />
    <javac classpathref="class.path" srcdir="${rootdir}/classes" destdir="${appDeployDir}/WEB-INF/classes" />

  <!-- JSP DEPLOY -->
  <target name="jspDeploy">
    <echo message="Deleting JSP's and HTML files in web folder ..." />
      <fileset dir="${jspTargetDir}" includes="*.jsp"/>
      <fileset dir="${jspTargetDir}" includes="*.html"/>
    <echo message="Deleting images in web folder ..." />
      <fileset dir="${imagesTargetDir}" includes="*.gif"/>
      <fileset dir="${imagesTargetDir}" includes="*.jpg"/>

    <echo message="Creating necessary folders (if needed) ..." />
    <mkdir dir="${jspTargetDir}"/>
    <mkdir dir="${imagesTargetDir}"/>

    <echo message="Copying JSP's and HTML files to web folder ..." />
    <copy todir="${jspTargetDir}">
      <fileset dir="${cvspages}">
        <include name="*.*"/>

    <echo message="Copying images to web folder ..." />
    <copy todir="${imagesTargetDir}">
      <fileset dir="${cvspages}/images">
        <include name="*.*"/>

    <echo message="Changing file permissions on the site ..." />
    <chmod file="${jspTargetDir}\*" perm="ug+rw" />
    <chmod file="${imagesTargetDir}\*" perm="ug+rw" />


  <!-- CLEANDIST -->
  <target name="cleandist" depends="clean, mkDeployDir, compile, deploy">


Ant web build script - Discussion

In this sample Ant web build script I also do a fair amount of variable substitution during the build process. I do this by referencing a property file in this line of the Ant script:

  <property file="build.${currentenv.ANT_HOST_NAME}" />

This lets me change Ant build properties depending on which server (or workstation) I am running the build process on. The ANT_HOST_NAME is a variable that I set in the environment of each machine. Here are the contents of one of these property file that I reference on my laptop:

tomcat_home  = c:\\tomcat-3.3.2
appDeployDir = c:\\tomcat-3.3.2\\webapps\\appname
db_username = username
db_password  = password
dg_props_dir = c:/tomcat-3.3.2/webapps/appname/data
db_log_file  = c:/tomcat-3.3.2/logs/ddConnectionBroker.log
web_site_context = /appname
file_upload_dir = c:/tomcat-3.3.2/logs
db_driver = org.postgresql.Driver
db_url = jdbc:postgresql://