Java/Ant/Tar

Материал из Java эксперт
Перейти к: навигация, поиск

Create tar file

   <source lang="java">

  1. Licensed to the Apache Software Foundation (ASF) under one
  2. or more contributor license agreements. See the NOTICE file
  3. distributed with this work for additional information
  4. regarding copyright ownership. The ASF licenses this file
  5. to you under the Apache License, Version 2.0 (the
  6. "License"); you may not use this file except in compliance
  7. with the License. You may obtain a copy of the License at
  8. http://www.apache.org/licenses/LICENSE-2.0
  9. Unless required by applicable law or agreed to in writing,
  10. software distributed under the License is distributed on an
  11. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  12. KIND, either express or implied. See the License for the
  13. specific language governing permissions and limitations
  14. under the License.
  15. This file is used by build.xml
  16. Global defaults

name= Anakia project= anakia version= 1.0 final.name= ${project}-${version} root.package= org.apache.anakia

  1. compile switches

debug= on optimize= on deprecation= off ant.build.dir= build build.dir= ${app.dir}/bin

  1. The source tree runs through a filter copy task to
  2. allow substitution of version, date etc. and will
  3. end up in build.src

build.lib= ${build.dir}/lib build.test.lib= ${build.dir}/test-lib build.dest= ${build.dir}/classes build.test.dest= ${build.dir}/test-classes build.javadoc= ${build.dir}/apidocs build.test= ${build.dir}/test build.docs= ${build.dir}/docs

  1. Various local pathes in the distribution

src.java.dir= ${app.dir}/src/java test.java.dir= ${app.dir}/src/test test.dir= ${app.dir}/test example.dir= ${app.dir}/examples xdocs.dir= ${app.dir}/xdocs

  1. Running the tests

test.haltonerror= true test.haltonfailure= true

  1. Building the distribution

dist.root= ${build.dir}/dist dist.dir= ${dist.root}/${final.name}

  1. Set to Sun Javadocs

javadocs.ref.jsdk= http://java.sun.ru/j2se/1.4.2/docs/api/

  1. for the javadoc

javadoc.packagenames = ${root.package}.*

  1. attributes for the jar manifest

mf.package = ${root.package} mf.extension.name = ${project} mf.specification.title = Anakia is a XML-based text processor mf.specification.vendor = Apache Software Foundation mf.implementation.title = ${mf.package} mf.implementation.vendor.id = org.apache mf.implementation.vendor = Apache Software Foundation mf.implementation.version = ${version}

  1. #######################################################################
  2. Downloading jars from ibiblio repository
  3. #######################################################################
  4. The default behaviour is to download dependency jars only when
  5. they are not already present.
  6. Set skip.jar.loading to true to never download any dependency jar,
  7. or force.jar.loading to true to always download all dependency jars.

skip.jar.loading= false force.jar.loading= false

  1. Settings for the proxy to use for download. Change this if you must
  2. use a proxy from your host. If the proxy.host property is unset, no
  3. proxy is used.

proxy.host= proxy.port= 80

  1. We download directly from the ibiblio maven repository

repo.url= http://www.ibiblio.org/maven

  1. Jars to be downloaded

jar.antlr.version= 2.7.5 jar.rumons-collections.version= 3.1 jar.rumons-lang.version= 2.1 jar.jdom.version= 1.0 jar.werken-xpath.version= 0.9.4 jar.junit.version= 3.8.1 jar.velocity.version= 1.5

<?xml version="1.0" encoding="ISO-8859-1"?>





<project name="Anakia" default="world" basedir="..">

 <path id="basedir-os">
   <pathelement location="${basedir}" />
 </path>
 
 
 
 <pathconvert property="app.dir" refid="basedir-os" targetos="unix"/>
 
 <property file="${user.home}/.ant.properties" />
 <property file="${user.home}/build.properties" />
 <property file=".ant.properties" />
 
 <property file="build/build.properties" />
 <property name="test.runner" value="junit.textui.TestRunner"/>
 <target name="world" depends="jar,test,javadocs,docs,env"
         description="Build the project jar and documentation"/>
 
 
 
 <target name="env" description="Prints build parameters">
   <echo>
 Global settings:
   java.home = ${java.home}
   user.home = ${user.home}
   java.class.path = ${java.class.path}
 Project settings:
   Version:     ${version}
   Debug:       ${debug}
   Optimize:    ${optimize}
   Deprecation: ${deprecation}
 Target settings (relative to build tree root):
   Classes:      ${build.dest}
   API Docs:     ${build.javadoc}
   Docs:         ${build.docs}
   </echo>
 </target>
 
 
 
 <target name="prepare" depends="basic-prepare"/>
 
 
 
 <target name="basic-prepare">
   <mkdir dir="${build.dir}"/>
   <mkdir dir="${build.dest}"/>
   <mkdir dir="${build.test.dest}"/>
 </target>
 
 
 
 <target name="build-prepare" depends="basic-prepare">
   <ant antfile="${ant.build.dir}/download.xml" target="build-download" />
   
   <path id="build.classpath">
     <fileset dir="${build.lib}">
       <include name="**/*.jar"/>
     </fileset>
   </path>
   
   <path id="test.classpath">
       <fileset dir="${build.test.lib}">
         <include name="**/*.jar"/>
       </fileset>
       <fileset dir="${build.lib}">
         <include name="**/*.jar"/>
       </fileset>
       <pathelement location="${build.dest}" />
       <pathelement location="${build.test.dest}" />
   </path>
   <path id="run.classpath">
     <path refid="build.classpath"/>
     <pathelement location="${build.dir}/${final.name}.jar"/>
   </path>
 </target>
 
 
 
 <target name="compile" depends="compile-src,compile-test"/>
 <target name="compile-src" depends="build-prepare"
         description="Compiles the source">
   <javac srcdir="${src.java.dir}"
     destdir="${build.dest}"
     encoding="UTF-8"
     debug="${debug}"
     deprecation="${deprecation}"
     optimize="${optimize}"
     classpathref="build.classpath"/>
   <copy todir="${build.dest}" filtering="yes">
     <fileset dir="${src.java.dir}">
       <include name="**/*.properties"/>
     </fileset>
   </copy>
 </target>
 <target name="compile-test" depends="build-prepare,compile-src"
         description="Compiles the test classes">
   <javac srcdir="${test.java.dir}"
     destdir="${build.test.dest}"
     encoding="UTF-8"
     debug="${debug}"
     deprecation="${deprecation}"
     optimize="${optimize}">
     
     <classpath>
       <path refid="build.classpath"/>
       <path refid="test.classpath" />
       <pathelement location="${build.dest}"/>
     </classpath>
   </javac>
   <copy todir="${build.test.dest}" filtering="yes">
     <fileset dir="${test.java.dir}">
       <include name="**/*.properties"/>
     </fileset>
   </copy>
 </target>



 <target name="jar" depends="compile-src"
         description="Builds the Jar file">
   <property name="jarname" value="${final.name}" />
   <jar jarfile="${build.dir}/${jarname}.jar">
     <metainf dir="${app.dir}">
       <include name="LICENSE"/>
       <include name="NOTICE"/>
     </metainf>
     <fileset dir="${build.dest}"/>
     <manifest>
       <attribute name="Created-By" value="Apache Ant"/>
       <attribute name="Build-Jdk" value="${java.version}"/>
       <attribute name="Package" value="${mf.package}"/>
       <attribute name="Extension-Name" value="${mf.extension.name}"/>
       <attribute name="Specification-Title" value="${mf.specification.title}" />
       <attribute name="Specification-Vendor" value="${mf.specification.vendor}"/>
       <attribute name="Implementation-Title" value="${mf.implementation.title}"/>
       <attribute name="Implementation-Vendor-Id" value="${mf.implementation.vendor.id}"/>
       <attribute name="Implementation-Vendor" value="${mf.implementation.vendor}"/>
       <attribute name="Implementation-Version" value="${mf.implementation.version}"/>
     </manifest>
   </jar>
   <checksum file="${build.dir}/${jarname}.jar" algorithm="md5" property="checksum.jar.md5"/>
   <checksum file="${build.dir}/${jarname}.jar" algorithm="sha1" property="checksum.jar.sha1"/>
   <echo message="${checksum.jar.md5} *${jarname}.jar" file="${build.dir}/${jarname}.jar.md5" />
   <echo message="${checksum.jar.sha1} *${jarname}.jar" file="${build.dir}/${jarname}.jar.sha1" />
 </target>
 
 
 
 <target name="jar-src"
         depends="prepare"
         description="Builds the Source Jar File">
   <jar jarfile="${build.dir}/${final.name}-src.jar">
     <metainf dir="${app.dir}">
       <include name="LICENSE"/>
       <include name="NOTICE"/>
     </metainf>
     <fileset dir="${src.java.dir}"/>
     <manifest>
       <attribute name="Created-By" value="Apache Ant"/>
       <attribute name="Specification-Title" value="${mf.specification.title}" />
       <attribute name="Specification-Vendor" value="${mf.specification.vendor}"/>
       <attribute name="Implementation-Title" value="${mf.implementation.title}"/>
       <attribute name="Implementation-Vendor-Id" value="${mf.implementation.vendor.id}"/>
       <attribute name="Implementation-Vendor" value="${mf.implementation.vendor}"/>
       <attribute name="Implementation-Version" value="${mf.implementation.version}"/>
     </manifest>
   </jar>
   <checksum file="${build.dir}/${final.name}-src.jar" algorithm="md5" property="checksum.jar-src.md5"/>
   <checksum file="${build.dir}/${final.name}-src.jar" algorithm="sha1" property="checksum.jar-src.sha1"/>
   <echo message="${checksum.jar-src.md5} *${final.name}-src.jar" file="${build.dir}/${final.name}-src.jar.md5" />
   <echo message="${checksum.jar-src.sha1} *${final.name}-src.jar" file="${build.dir}/${final.name}-src.jar.sha1" />
 </target>
 
 
 
 <target name="javadocs" depends="build-prepare"
         description="Creates the Javadoc API documentation">
   <mkdir dir="${build.javadoc}"/>
   <javadoc sourcepath="${src.java.dir}"
            packagenames="${javadoc.packagenames}"
            destdir="${build.javadoc}"
            author="true"
            private="false"
            version="true"
            use="true"
            windowtitle="${name} ${version} API"
            doctitle="${name} ${version} API"
            encoding="UTF-8"
            docencoding="UTF-8"
            bottom="Copyright © 2000-${build.year} <a href="http://www.apache.org/%22>Apache Software Foundation</a>. All Rights Reserved."
            classpathref="build.classpath">
     <link href="${javadocs.ref.jsdk}"/>
     <link href="http://www.jdom.org/docs/apidocs"/>
     <link href="http://logging.apache.org/log4j/docs/api"/>
     <link href="http://excalibur.apache.org/apidocs"/>
     <link href="http://tomcat.apache.org/tomcat-4.1-doc/servletapi"/>
     <link href="http://jakarta.apache.org/oro/api"/>
     <link href="http://jakarta.apache.org/commons/lang/api-release"/>
     <link href="http://jakarta.apache.org/commons/collections/api-release"/>
   </javadoc>
 </target>
 <target name="javadocs-clean">
   <delete dir="${build.javadoc}" quiet="true"/>
 </target>
 
 
 
 <target name="build-package-tree" depends="clean,jar,docs,javadocs">
   <mkdir dir="${dist.dir}"/>
   <mkdir dir="${dist.dir}/src/java"/>
   <copy todir="${dist.dir}/src/java/">
     <fileset dir="${src.java.dir}" />
   </copy>
   <copy todir="${dist.dir}/src/test/">
     <fileset dir="${test.java.dir}" />
   </copy>
   <copy todir="${dist.dir}/lib">
     <fileset dir="${build.lib}" />
   </copy>
   <copy todir="${dist.dir}/lib/test">
     <fileset dir="${build.test.lib}" />
   </copy>
   <copy todir="${dist.dir}/build">
     <fileset dir="${app.dir}/build">
       <include name="**"/>
       <exclude name="velocity.log"/>
     </fileset>
   </copy>
   
   <copy todir="${dist.dir}/docs">
     <fileset dir="${build.docs}">
       <include name="**"/>
       <exclude name="docs/api/**"/>
     </fileset>
   </copy>
   
   <copy todir="${dist.dir}/docs/api">
     <fileset dir="${build.javadoc}">
       <include name="**"/>
     </fileset>
   </copy>
   <copy todir="${dist.dir}/test">
     <fileset dir="${app.dir}/test">
       <include name="**"/>
     </fileset>
   </copy>
   <copy todir="${dist.dir}/xdocs">
     <fileset dir="${xdocs.dir}">
       <include name="**"/>
     </fileset>
   </copy>
   <copy todir="${dist.dir}">
     <fileset dir="${app.dir}">
       <include name="LICENSE" />
       <include name="NOTICE" />
       <include name="README.txt" />
       <include name="pom.xml" />
     </fileset>
   </copy>
   <copy
     file="${build.dir}/${final.name}.jar"
     tofile="${dist.dir}/${final.name}.jar"
   />
 </target>
 
 
 
 <target name="package-zip"
         depends="build-package-tree">
   
   <fixcrlf srcdir="${dist.dir}" eol="crlf" eof="asis" encoding="ISO-8859-1">
     <include name="**/*.html" />
     <include name="**/*.java" />
     <include name="**/*.properties" />
     <include name="**/*.txt" />
     <include name="**/*.xml" />
   </fixcrlf>
   <delete file="${build.dir}/${final.name}.zip" quiet="true"/>
   <zip zipfile="${build.dir}/${final.name}.zip" basedir="${dist.root}"
        includes="**/${final.name}/**"/>
   <checksum file="${build.dir}/${final.name}.zip" algorithm="md5" property="checksum.zip.md5"/>
   <checksum file="${build.dir}/${final.name}.zip" algorithm="sha1" property="checksum.zip.sha1"/>
   <echo message="${checksum.zip.md5} *${final.name}.zip" file="${build.dir}/${final.name}.zip.md5" />
   <echo message="${checksum.zip.sha1} *${final.name}.zip" file="${build.dir}/${final.name}.zip.sha1" />
 </target>
 
 
 
 <target name="package-tgz"
         depends="build-package-tree">
   
   <fixcrlf srcdir="${dist.dir}" eol="lf" eof="remove" encoding="ISO-8859-1">
     <include name="**/*.html" />
     <include name="**/*.java" />
     <include name="**/*.properties" />
     <include name="**/*.txt" />
     <include name="**/*.xml" />
   </fixcrlf>
   <delete file="${build.dir}/${final.name}.tar.gz" quiet="true"/>
   <tar tarfile="${build.dir}/${final.name}.tar.gz" basedir="${dist.root}"
        includes="**/${final.name}/**" longfile="gnu" compression="gzip" />
   <checksum file="${build.dir}/${final.name}.tar.gz" algorithm="md5" property="checksum.tgz.md5"/>
   <checksum file="${build.dir}/${final.name}.tar.gz" algorithm="sha1" property="checksum.tgz.sha1"/>
   <echo message="${checksum.tgz.md5} *${final.name}.tar.gz" file="${build.dir}/${final.name}.tar.gz.md5" />
   <echo message="${checksum.tgz.sha1} *${final.name}.tar.gz" file="${build.dir}/${final.name}.tar.gz.sha1" />
 </target>



 <target name="package"
         depends="package-zip,package-tgz"
         description="Generates the distribution files">
 </target>
 
 
 
 
 <target name="clean" 
         description="Cleans all generated files except downloaded libs">
   <delete includeEmptyDirs="true" quiet="true">
     <fileset dir="${build.dir}" defaultexcludes="no">
       <exclude name="lib/**" />
       <exclude name="test-lib/**" />
     </fileset>
     <fileset dir="${ant.build.dir}" defaultexcludes="no">
       <include name="velocity.log" />
     </fileset>
   </delete>
 </target>
 
 
 
 <target name="real-clean" 
         description="Cleans all generated files">
   <delete includeEmptyDirs="true" quiet="true" dir="${build.dir}" />
 </target>
 
 
 
 <target name="docs" depends="build-prepare,jar"
         description="Generates the HTML documentation">
   <taskdef name="anakia"
            classname="org.apache.anakia.AnakiaTask"
            classpathref="run.classpath"/>
   <echo>
 #######################################################
 #
 #  Now using Anakia to transform the XML documentation
 #  to HTML.
 #######################################################
   </echo>
   <anakia basedir="${xdocs.dir}/docs" destdir="${build.docs}"
        extension=".html" style="site.vsl"
        projectFile="../stylesheets/project.xml"
        includes="**/*.xml"
        lastModifiedCheck="true"
        templatePath="${xdocs.dir}/stylesheets">
   </anakia>
   <copy todir="${build.docs}/images" filtering="no">
       <fileset dir="${xdocs.dir}/images">
           <include name="**/*.gif"/>
           <include name="**/*.jpeg"/>
           <include name="**/*.jpg"/>
           <include name="**/*.png"/>
       </fileset>
   </copy>
   <copy todir="${build.docs}" filtering="no">
       <fileset dir="${xdocs.dir}">
           <include name="**/*.css"/>
           <include name="**/.htaccess"/>
       </fileset>
   </copy>
 </target>



 <target name="docs-clean">
   <delete dir="${build.docs}" quiet="true"/>
 </target>



 <target name="test-clean">
   <delete dir="${build.test.dest}" quiet="true"/>
   <delete dir="${build.test}" quiet="true"/>
   <delete dir="${build.test.reports}" quiet="true"/>
 </target>
 <target name="test"
         depends="build-prepare,compile-test,test-anakia"/>
 <target name="test-anakia">
   <echo message="Running Anakia tests..."/>
   <taskdef name="anakia" classname="org.apache.anakia.AnakiaTask"
            classpathref="test.classpath"/>
   
   <anakia basedir="${test.dir}/anakia/xdocs"
           destdir="${build.test}/anakia"
       extension=".html" style="./site_contexts.vsl"
       projectFile="./stylesheets/project.xml"
       excludes="**/stylesheets/**"
       includes="**/*.xml"
       templatePath="${test.dir}/anakia/xdocs/stylesheets"
       lastModifiedCheck="false">
   </anakia>
   <anakia basedir="${test.dir}/anakia/xdocs"
           destdir="${build.test}/anakia"
       extension=".context.html" style="./site_contexts.vsl"
       projectFile="./stylesheets/project.xml"
       excludes="**/stylesheets/**"
       includes="**/*.xml"
       templatePath="${test.dir}/anakia/xdocs/stylesheets"
       lastModifiedCheck="false">
       <context name="customContext" file="./stylesheets/customContext.xml"/>
   </anakia>
   <java classname="${test.runner}" fork="yes" dir="${app.dir}" failonerror="${test.haltonerror}"
         classpathref="test.classpath">
     <arg value="org.apache.anakia.AnakiaTestCase"/>
   </java>
 </target>

</project>

 </source>
   
  
 
  



Tar the binary distribution with the documentation

   <source lang="java">

<?xml version="1.0"?> <project name="Example Application Build" default="build-both" basedir=".">

 <property file="build.properties"/>
 
 <property name="cvsroot" 
           value=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" />
 
 <property name="mysql.cvsroot" 
           value=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/mmmysql" />
  
 <path id="build.classpath">
   <pathelement location="${servlet24.jar}"/>
   <pathelement location="${jsp20.jar}"/>
   <pathelement location="${mysql.jar}"/>
   <pathelement path="${appName.jar}"/>
 </path>
  
 <fileset id="javadoc" dir="${src}">
   <exclude name="*/conf/**"/>
   <exclude name="*/docs/*"/>
   <include name="shared/**"/>
   <include name="stand-alone/**"/>
   <include name="web/java/**"/>
 </fileset>  
  
 
  
 
 <property name="docs.all.dir" value="${build}"/>
 
 <patternset id="docs.all">
   <include name="docs/**"/>
 </patternset>
 
 <property name="docs.misc.dir" value="${src}/shared/docs"/>
 
 <patternset id="docs.misc">
   <include name="README"/>
   <include name="LICENSE"/>
 </patternset>
 
 
 
 <property name="src.files.dir" value="."/>
 
 <patternset id="src.files">
   <include name="${src}/**"/>
   <include name="build.*"/>
 </patternset>
 
 
 
  
 <patternset id="bin.jar">
   <include name="*.jar"/>
 </patternset>
 
 
 
  
 <patternset id="bin.war">
   <include name="*.war"/>
 </patternset>
  
 
 <target name="dir" description="Create the working directories">
   <echo message="Creating the working directories"/>
   <mkdir dir="${build.stand-alone.root}"/>
   <mkdir dir="${build.web.classes}"/>
   <mkdir dir="${dist}"/>
   <mkdir dir="${lib}"/>
 </target>
 
 
 <target name="checkout-jstl" depends="dir" 
         description="Update or check out required sources
                      from CVS for the JSTL">
   <echo message="Checking out the required JSTL sources from CVS"/>
   <cvs cvsroot="${cvsroot}" quiet="true"
        command="checkout -P ${jstl.build}" 
        dest="${build}" compression="true" />
 </target>
 
 <target name="checkout-mysql-connector" depends="dir" 
         description="Update or check out required sources
         from CVS for the MySQL connector">
   <echo message="Checking out the required sources from CVS for the MySQL connector" />
   <cvs cvsroot="${mysql.cvsroot}" quiet="true"
        command="checkout" package="${mysql.build}"
        dest="${build}" compression="true" />
 </target>
 
 <target name="build-jstl" depends="checkout-jstl" 
         description="Build the JSTL from source">
   <echo message="Building the JSTL from source"/>
   <ant antfile="build.xml" dir="${build}/${jstl.build}"/>
   <copy todir="${lib}">
     <fileset dir="${build}/${jstl.build}/${build}/lib">
       <include name="*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="build-mysql-connector" depends="checkout-mysql-connector" 
         description="Build the MySQL connector from source">
   <echo message="Building the MySQL connector from source"/>
   
   
   <mkdir dir="${build}/dist-mysql-jdbc"/>
   <ant antfile="build.xml" dir="${build}/${mysql.build}"/>
   <copy tofile="${mysql.jar}">
     <fileset dir="${build}/build-mysql-jdbc">
       <include name="mysql-connector*/*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="compile-stand-alone" depends="dir" 
         description="Compile stand-alone application">
   <echo message="Compiling the stand-alone application"/>
   <javac srcdir="${src.shared.java}" destdir="${build.stand-alone.root}"/>
   <javac srcdir="${src.stand-alone.java}" 
          destdir="${build.stand-alone.root}"/>  
 </target>
 <target name="stand-alone-complete" 
         depends="build-mysql-connector, package-stand-alone" 
         description="Compile stand-alone application, 
                      using CVS version of the MySQL connector">
   <echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
 </target>
 
 <target name="package-stand-alone" depends="compile-stand-alone" 
         description="Package the stand-alone application">
   <echo message="Creating the stand-alone JAR file"/>
   <copy file="${database.properties}" todir="${build.stand-alone.root}"/>
   <jar destfile="${appName.jar}" basedir="${build.stand-alone.root}"/>
 </target>
 
 <target name="compile-web" depends="dir" description="Compile web application">
   <echo message="Compiling the web application"/>
   <javac destdir="${build.web.classes}">
     <src path="${src.shared.java}"/>
   </javac>
   <javac srcdir="${src.web.java}" destdir="${build.web.classes}">
     <classpath refid="build.classpath"/>
   </javac>
 </target>
 <target name="web-complete" 
         depends="build-mysql-connector, build-jstl, package-web" 
         description="Compile web application, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/>
 </target>
 
 <target name="copy-web" depends="compile-web" description="Copy the web files">
   <echo message="Copying the web pages and configuration files"/>
   <copy todir="${build.web.root}">
     <fileset dir="${src.web.pages}"/>
   </copy>
   
   <copy todir="${build.web.tags}">
     <fileset dir="${src.web.tags}"/>
   </copy>
   <copy todir="${build.web.web-inf}">
     <fileset dir="${src.web.conf}">
       <include name="*.tld"/>
     </fileset>
   </copy>
   
   <copy todir="${build.web.lib}">
     <fileset dir="${lib}"/>
   </copy>
   
   <copy file="${database.properties}" todir="${build.web.classes}"/>
   
 </target>
 


 <target name="package-web" depends="compile-web" 
         description="Build the WAR file in one step">
   <echo message="Building the WAR file in one step"/> 
   <war destfile="${appName.war}" basedir="${src.web.pages}" 
        webxml="${src.web.conf}/web.xml">
     <lib dir="${lib}"/>
     <classes dir="${build.web.root}"/>
     <zipfileset dir="${src.web.tags}" prefix="WEB-INF/tags"/>
     <zipfileset file="${database.properties}" prefix="WEB-INF/classes"/>
     <zipfileset dir="${src.web.conf}" prefix="WEB-INF">
       <include name="*.tld"/>
     </zipfileset>
   </war>
 </target>
 
 <target name="build-both" 
         depends="package-stand-alone, package-web" 
         description="Compile both applications, 
                      without CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, without CVS versions of the MySQL connector and the JSTL"/>
 </target>
 <target name="build-all" 
         depends="stand-alone-complete, web-complete" 
         description="Compile both applications, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, using CVS versions of the MySQL connector and the JSTL"/>
 </target>


 <target name="download-servlet-jar" depends="dir" 
         description="Download the servlet JAR">
   <echo message="Downloading the servlet JAR"/>
   <get src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.4.jar"
        dest="${servlet24.jar}"
        verbose="true"/>
 </target>
 
 <target name="download-jsp-jar" depends="dir" 
         description="Download the JSP JAR">
   <echo message="Downloading the JSP JAR"/>
   <get src="http://www.ibiblio.org/maven/jspapi/jars/jsp-api-2.0.jar"
        dest="${jsp20.jar}"
        verbose="true"/>
 </target>
 
 
 <target name="check-docs" 
         description="Check that the documentation is up to date">
   <echo message="Checking that the documentation is up to date"/>
   <condition property="docs.notRequired">
     <and>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.zip">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.tar.gz">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
     </and>
   </condition>
 </target>  
 
 <target name="javadocs" depends="dir,check-docs" 
         description="Generate Javadocs for the application" 
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="http://java.sun.ru/j2se/${javadoc.j2se.version}/docs/api"/>  
     <link href="http://java.sun.ru/j2ee/${javadoc.j2ee.version}/docs/api"/> 
   </javadoc>
 </target>
  
 <target name="javadocs-offline" depends="dir,check-docs"
         description="Generate Javadocs for the application, 
                      using offline package-list files"
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application, 
                  using offline package-list files"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="${javadoc.j2se.offline}" resolveLink="true"/>  
     <link href="${javadoc.j2ee.offline}" resolveLink="true"/> 
   </javadoc>
 </target>
 
 <target name="docs" depends="javadocs" 
         description="Assemble the documentation" unless="docs.notRequired">
   <echo message="Assembling the documentation"/>
   <copy todir="${docs}">
     <fileset dir="${src.shared.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/stand-alone">
     <fileset dir="${src.stand-alone.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/web">
     <fileset dir="${src.web.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
 </target>
 
 
 <target name="zip-docs" depends="docs" description="Zip the documentation">
   <echo message="Zipping the documentation"/>
   <zip destfile="${dist}/${appName}-${package.docs}.zip">
     
     <fileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </fileset>
     
     <fileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.docs}.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.zip" forceOverwrite="true"  
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-src" depends="zip-docs" 
         description="Zip the source and documentation together">
   <echo message="Zipping the source and documentation together"/>
   <zip destfile="${dist}/${appName}-src.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     <fileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-stand-alone" depends="package-stand-alone,zip-docs" 
         description="Zip the binary stand-alone distribution 
                      with the documentation">
   <echo message="Zipping the binary stand-alone distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.stand-alone}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <zipfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </zipfileset>
     <fileset dir=".">
       <include name="${mysql.jar}"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-web" depends="package-web,zip-docs" 
         description="Zip the binary web distribution with the documentation">
   <echo message="Zipping the binary web distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.web}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <fileset dir="${dist}">
       <patternset refid="bin.war"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin" depends="zip-bin-stand-alone,zip-bin-web" 
         description="Zip the binary distribution with the documentation">
   <echo message="Zipping the binary distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-bin.zip" 
        duplicate="preserve" update="true">
     <zipgroupfileset dir="${dist}" includes="*.zip"/>
   </zip>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-all" depends="zip-src,zip-bin" 
         description="Zip the binary and source distributions">
   <echo message="Zipped the binary and source distributions"/>
 </target>
 
 
 <target name="tar-docs" depends="docs" description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-${package.docs}.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-src" depends="tar-docs"
         description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-src.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-stand-alone" depends="package-stand-alone,tar-docs" 
         description="Tar the binary stand-alone distribution 
                      with the documentation">
   <echo message="Tarring the binary stand-alone distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>    </tar> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-web" depends="package-web,tar-docs" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin" depends="tar-bin-stand-alone,tar-bin-web" 
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 
 <target name="tar-bin-web-new" depends="package-web,tar-docs,zip-bin-web" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <unzip src="${dist}/${appName}-${package.web}-bin.zip" dest="${tmp}/web"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     <tarfileset dir="${tmp}/web"/>
   </tar>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-new" 
         depends="zip-bin,tar-bin-stand-alone,tar-bin-web-new"
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <delete failonerror="false" includeemptydirs="true">
     <fileset dir="${tmp}" includes="**"/>
   </delete>
   <unzip src="${dist}/${appName}-bin.zip" dest="${tmp}"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     <tarfileset dir="${tmp}"/>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-all" depends="tar-src,tar-bin" 
         description="Tar the binary and source distributions">
   <echo message="Tarred the binary and source distributions"/>
 </target>
 
 
 


 <target name="ftp-docs" depends="zip-docs,tar-docs" 
         description="Place the documentation on FTP">
   <echo message="Placing the documentation on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-src" depends="zip-src,tar-src" 
         description="Place the source code on FTP">
   <echo message="Placing the source code on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-src.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-bin" depends="zip-bin,tar-bin" 
         description="Place the binaries on FTP">
   <echo message="Placing the binaries on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.bin.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}*bin*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp" description="Place everything on FTP">
   <echo message="Placing everything on FTP"/>
   <antcall target="ftp-docs"/>
   <antcall target="ftp-src"/>
   <antcall target="ftp-bin"/>
 </target>
 


 <target name="email-docs" depends="zip-docs,tar-docs" 
         description="E-mailing the documentation">
   <echo message="E-mailing the documentation"/>
   <mail from="${mail.from}"
         tolist="${mail.tolist}"
         mailhost="${mail.mailhost}"
         user="${mail.user}"
         password="${mail.password}"
         subject="${mail.subject}">
     <message>
       ${mail.message.docs}
     </message>
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </mail>
 </target>
 
 
 <target name="deploy-copy-files" depends="copy-web" 
         description="Deploy the application by copying it to Tomcat">
   <echo message="Copying the expanded web application to CATALINA_HOME"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/webapps/${appName}">
     <fileset dir="${build.web.root}"/>
   </copy>
 </target>
 
 <target name="deploy-copy-war" depends="package-web" 
         description="Deploy the WAR by copying it to Tomcat">
   <echo message="Copying the WAR to CATALINA_HOME"/>
   <property environment="env"/>
   <copy file="${appName.war}" todir="${env.CATALINA_HOME}/webapps"/>
 </target>
 
 <target name="deploy-context" depends="copy-web" 
         description="Deploy the web application using a context XML file">
   <echo message="Deploying the web application using a context XML file"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/conf/Catalina/localhost" 
         file="${src.web.conf}/${appName}.xml"/>
 </target>
 
 <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
 
 <target name="deploy" depends="package-web" 
         description="Hot deploy the application">
   <echo message="Deploying the WAR to Tomcat"/>
   <deploy url="${manager.url}"
           username="${manager.user}"
           password="${manager.password}"  
           path="/${appName}"
           war="file:${appName.war}"
           update="true"/>
 </target>
 
 <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
 
 <target name="undeploy" description="Undeploy the application">
   <echo message="Undeploying the WAR"/>
   <undeploy url="${manager.url}"
             username="${manager.user}"   
             password="${manager.password}"
             path="/${appName}"/>
 </target>
 <target name="clean" description="Clean up the working directories">
   <echo message="Cleaning up"/>
   <delete dir="${build}"/>
 </target>

</project>


 </source>
   
  
 
  



Tar the binary stand-alone distribution with the documentation

   <source lang="java">

<?xml version="1.0"?> <project name="Example Application Build" default="build-both" basedir=".">

 <property file="build.properties"/>
 
 <property name="cvsroot" 
           value=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" />
 
 <property name="mysql.cvsroot" 
           value=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/mmmysql" />
  
 <path id="build.classpath">
   <pathelement location="${servlet24.jar}"/>
   <pathelement location="${jsp20.jar}"/>
   <pathelement location="${mysql.jar}"/>
   <pathelement path="${appName.jar}"/>
 </path>
  
 <fileset id="javadoc" dir="${src}">
   <exclude name="*/conf/**"/>
   <exclude name="*/docs/*"/>
   <include name="shared/**"/>
   <include name="stand-alone/**"/>
   <include name="web/java/**"/>
 </fileset>  
  
 
  
 
 <property name="docs.all.dir" value="${build}"/>
 
 <patternset id="docs.all">
   <include name="docs/**"/>
 </patternset>
 
 <property name="docs.misc.dir" value="${src}/shared/docs"/>
 
 <patternset id="docs.misc">
   <include name="README"/>
   <include name="LICENSE"/>
 </patternset>
 
 
 
 <property name="src.files.dir" value="."/>
 
 <patternset id="src.files">
   <include name="${src}/**"/>
   <include name="build.*"/>
 </patternset>
 
 
 
  
 <patternset id="bin.jar">
   <include name="*.jar"/>
 </patternset>
 
 
 
  
 <patternset id="bin.war">
   <include name="*.war"/>
 </patternset>
  
 
 <target name="dir" description="Create the working directories">
   <echo message="Creating the working directories"/>
   <mkdir dir="${build.stand-alone.root}"/>
   <mkdir dir="${build.web.classes}"/>
   <mkdir dir="${dist}"/>
   <mkdir dir="${lib}"/>
 </target>
 
 
 <target name="checkout-jstl" depends="dir" 
         description="Update or check out required sources
                      from CVS for the JSTL">
   <echo message="Checking out the required JSTL sources from CVS"/>
   <cvs cvsroot="${cvsroot}" quiet="true"
        command="checkout -P ${jstl.build}" 
        dest="${build}" compression="true" />
 </target>
 
 <target name="checkout-mysql-connector" depends="dir" 
         description="Update or check out required sources
         from CVS for the MySQL connector">
   <echo message="Checking out the required sources from CVS for the MySQL connector" />
   <cvs cvsroot="${mysql.cvsroot}" quiet="true"
        command="checkout" package="${mysql.build}"
        dest="${build}" compression="true" />
 </target>
 
 <target name="build-jstl" depends="checkout-jstl" 
         description="Build the JSTL from source">
   <echo message="Building the JSTL from source"/>
   <ant antfile="build.xml" dir="${build}/${jstl.build}"/>
   <copy todir="${lib}">
     <fileset dir="${build}/${jstl.build}/${build}/lib">
       <include name="*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="build-mysql-connector" depends="checkout-mysql-connector" 
         description="Build the MySQL connector from source">
   <echo message="Building the MySQL connector from source"/>
   
   
   <mkdir dir="${build}/dist-mysql-jdbc"/>
   <ant antfile="build.xml" dir="${build}/${mysql.build}"/>
   <copy tofile="${mysql.jar}">
     <fileset dir="${build}/build-mysql-jdbc">
       <include name="mysql-connector*/*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="compile-stand-alone" depends="dir" 
         description="Compile stand-alone application">
   <echo message="Compiling the stand-alone application"/>
   <javac srcdir="${src.shared.java}" destdir="${build.stand-alone.root}"/>
   <javac srcdir="${src.stand-alone.java}" 
          destdir="${build.stand-alone.root}"/>  
 </target>
 <target name="stand-alone-complete" 
         depends="build-mysql-connector, package-stand-alone" 
         description="Compile stand-alone application, 
                      using CVS version of the MySQL connector">
   <echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
 </target>
 
 <target name="package-stand-alone" depends="compile-stand-alone" 
         description="Package the stand-alone application">
   <echo message="Creating the stand-alone JAR file"/>
   <copy file="${database.properties}" todir="${build.stand-alone.root}"/>
   <jar destfile="${appName.jar}" basedir="${build.stand-alone.root}"/>
 </target>
 
 <target name="compile-web" depends="dir" description="Compile web application">
   <echo message="Compiling the web application"/>
   <javac destdir="${build.web.classes}">
     <src path="${src.shared.java}"/>
   </javac>
   <javac srcdir="${src.web.java}" destdir="${build.web.classes}">
     <classpath refid="build.classpath"/>
   </javac>
 </target>
 <target name="web-complete" 
         depends="build-mysql-connector, build-jstl, package-web" 
         description="Compile web application, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/>
 </target>
 
 <target name="copy-web" depends="compile-web" description="Copy the web files">
   <echo message="Copying the web pages and configuration files"/>
   <copy todir="${build.web.root}">
     <fileset dir="${src.web.pages}"/>
   </copy>
   
   <copy todir="${build.web.tags}">
     <fileset dir="${src.web.tags}"/>
   </copy>
   <copy todir="${build.web.web-inf}">
     <fileset dir="${src.web.conf}">
       <include name="*.tld"/>
     </fileset>
   </copy>
   
   <copy todir="${build.web.lib}">
     <fileset dir="${lib}"/>
   </copy>
   
   <copy file="${database.properties}" todir="${build.web.classes}"/>
   
 </target>
 


 <target name="package-web" depends="compile-web" 
         description="Build the WAR file in one step">
   <echo message="Building the WAR file in one step"/> 
   <war destfile="${appName.war}" basedir="${src.web.pages}" 
        webxml="${src.web.conf}/web.xml">
     <lib dir="${lib}"/>
     <classes dir="${build.web.root}"/>
     <zipfileset dir="${src.web.tags}" prefix="WEB-INF/tags"/>
     <zipfileset file="${database.properties}" prefix="WEB-INF/classes"/>
     <zipfileset dir="${src.web.conf}" prefix="WEB-INF">
       <include name="*.tld"/>
     </zipfileset>
   </war>
 </target>
 
 <target name="build-both" 
         depends="package-stand-alone, package-web" 
         description="Compile both applications, 
                      without CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, without CVS versions of the MySQL connector and the JSTL"/>
 </target>
 <target name="build-all" 
         depends="stand-alone-complete, web-complete" 
         description="Compile both applications, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, using CVS versions of the MySQL connector and the JSTL"/>
 </target>


 <target name="download-servlet-jar" depends="dir" 
         description="Download the servlet JAR">
   <echo message="Downloading the servlet JAR"/>
   <get src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.4.jar"
        dest="${servlet24.jar}"
        verbose="true"/>
 </target>
 
 <target name="download-jsp-jar" depends="dir" 
         description="Download the JSP JAR">
   <echo message="Downloading the JSP JAR"/>
   <get src="http://www.ibiblio.org/maven/jspapi/jars/jsp-api-2.0.jar"
        dest="${jsp20.jar}"
        verbose="true"/>
 </target>
 
 
 <target name="check-docs" 
         description="Check that the documentation is up to date">
   <echo message="Checking that the documentation is up to date"/>
   <condition property="docs.notRequired">
     <and>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.zip">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.tar.gz">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
     </and>
   </condition>
 </target>  
 
 <target name="javadocs" depends="dir,check-docs" 
         description="Generate Javadocs for the application" 
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="http://java.sun.ru/j2se/${javadoc.j2se.version}/docs/api"/>  
     <link href="http://java.sun.ru/j2ee/${javadoc.j2ee.version}/docs/api"/> 
   </javadoc>
 </target>
  
 <target name="javadocs-offline" depends="dir,check-docs"
         description="Generate Javadocs for the application, 
                      using offline package-list files"
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application, 
                  using offline package-list files"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="${javadoc.j2se.offline}" resolveLink="true"/>  
     <link href="${javadoc.j2ee.offline}" resolveLink="true"/> 
   </javadoc>
 </target>
 
 <target name="docs" depends="javadocs" 
         description="Assemble the documentation" unless="docs.notRequired">
   <echo message="Assembling the documentation"/>
   <copy todir="${docs}">
     <fileset dir="${src.shared.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/stand-alone">
     <fileset dir="${src.stand-alone.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/web">
     <fileset dir="${src.web.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
 </target>
 
 
 <target name="zip-docs" depends="docs" description="Zip the documentation">
   <echo message="Zipping the documentation"/>
   <zip destfile="${dist}/${appName}-${package.docs}.zip">
     
     <fileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </fileset>
     
     <fileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.docs}.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.zip" forceOverwrite="true"  
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-src" depends="zip-docs" 
         description="Zip the source and documentation together">
   <echo message="Zipping the source and documentation together"/>
   <zip destfile="${dist}/${appName}-src.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     <fileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-stand-alone" depends="package-stand-alone,zip-docs" 
         description="Zip the binary stand-alone distribution 
                      with the documentation">
   <echo message="Zipping the binary stand-alone distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.stand-alone}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <zipfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </zipfileset>
     <fileset dir=".">
       <include name="${mysql.jar}"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-web" depends="package-web,zip-docs" 
         description="Zip the binary web distribution with the documentation">
   <echo message="Zipping the binary web distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.web}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <fileset dir="${dist}">
       <patternset refid="bin.war"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin" depends="zip-bin-stand-alone,zip-bin-web" 
         description="Zip the binary distribution with the documentation">
   <echo message="Zipping the binary distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-bin.zip" 
        duplicate="preserve" update="true">
     <zipgroupfileset dir="${dist}" includes="*.zip"/>
   </zip>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-all" depends="zip-src,zip-bin" 
         description="Zip the binary and source distributions">
   <echo message="Zipped the binary and source distributions"/>
 </target>
 
 
 <target name="tar-docs" depends="docs" description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-${package.docs}.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-src" depends="tar-docs"
         description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-src.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-stand-alone" depends="package-stand-alone,tar-docs" 
         description="Tar the binary stand-alone distribution 
                      with the documentation">
   <echo message="Tarring the binary stand-alone distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>    </tar> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-web" depends="package-web,tar-docs" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin" depends="tar-bin-stand-alone,tar-bin-web" 
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 
 <target name="tar-bin-web-new" depends="package-web,tar-docs,zip-bin-web" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <unzip src="${dist}/${appName}-${package.web}-bin.zip" dest="${tmp}/web"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     <tarfileset dir="${tmp}/web"/>
   </tar>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-new" 
         depends="zip-bin,tar-bin-stand-alone,tar-bin-web-new"
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <delete failonerror="false" includeemptydirs="true">
     <fileset dir="${tmp}" includes="**"/>
   </delete>
   <unzip src="${dist}/${appName}-bin.zip" dest="${tmp}"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     <tarfileset dir="${tmp}"/>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-all" depends="tar-src,tar-bin" 
         description="Tar the binary and source distributions">
   <echo message="Tarred the binary and source distributions"/>
 </target>
 
 
 


 <target name="ftp-docs" depends="zip-docs,tar-docs" 
         description="Place the documentation on FTP">
   <echo message="Placing the documentation on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-src" depends="zip-src,tar-src" 
         description="Place the source code on FTP">
   <echo message="Placing the source code on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-src.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-bin" depends="zip-bin,tar-bin" 
         description="Place the binaries on FTP">
   <echo message="Placing the binaries on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.bin.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}*bin*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp" description="Place everything on FTP">
   <echo message="Placing everything on FTP"/>
   <antcall target="ftp-docs"/>
   <antcall target="ftp-src"/>
   <antcall target="ftp-bin"/>
 </target>
 


 <target name="email-docs" depends="zip-docs,tar-docs" 
         description="E-mailing the documentation">
   <echo message="E-mailing the documentation"/>
   <mail from="${mail.from}"
         tolist="${mail.tolist}"
         mailhost="${mail.mailhost}"
         user="${mail.user}"
         password="${mail.password}"
         subject="${mail.subject}">
     <message>
       ${mail.message.docs}
     </message>
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </mail>
 </target>
 
 
 <target name="deploy-copy-files" depends="copy-web" 
         description="Deploy the application by copying it to Tomcat">
   <echo message="Copying the expanded web application to CATALINA_HOME"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/webapps/${appName}">
     <fileset dir="${build.web.root}"/>
   </copy>
 </target>
 
 <target name="deploy-copy-war" depends="package-web" 
         description="Deploy the WAR by copying it to Tomcat">
   <echo message="Copying the WAR to CATALINA_HOME"/>
   <property environment="env"/>
   <copy file="${appName.war}" todir="${env.CATALINA_HOME}/webapps"/>
 </target>
 
 <target name="deploy-context" depends="copy-web" 
         description="Deploy the web application using a context XML file">
   <echo message="Deploying the web application using a context XML file"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/conf/Catalina/localhost" 
         file="${src.web.conf}/${appName}.xml"/>
 </target>
 
 <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
 
 <target name="deploy" depends="package-web" 
         description="Hot deploy the application">
   <echo message="Deploying the WAR to Tomcat"/>
   <deploy url="${manager.url}"
           username="${manager.user}"
           password="${manager.password}"  
           path="/${appName}"
           war="file:${appName.war}"
           update="true"/>
 </target>
 
 <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
 
 <target name="undeploy" description="Undeploy the application">
   <echo message="Undeploying the WAR"/>
   <undeploy url="${manager.url}"
             username="${manager.user}"   
             password="${manager.password}"
             path="/${appName}"/>
 </target>
 <target name="clean" description="Clean up the working directories">
   <echo message="Cleaning up"/>
   <delete dir="${build}"/>
 </target>

</project>


 </source>
   
  
 
  



Tar the binary web distribution with the documentation

   <source lang="java">

<?xml version="1.0"?> <project name="Example Application Build" default="build-both" basedir=".">

 <property file="build.properties"/>
 
 <property name="cvsroot" 
           value=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" />
 
 <property name="mysql.cvsroot" 
           value=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/mmmysql" />
  
 <path id="build.classpath">
   <pathelement location="${servlet24.jar}"/>
   <pathelement location="${jsp20.jar}"/>
   <pathelement location="${mysql.jar}"/>
   <pathelement path="${appName.jar}"/>
 </path>
  
 <fileset id="javadoc" dir="${src}">
   <exclude name="*/conf/**"/>
   <exclude name="*/docs/*"/>
   <include name="shared/**"/>
   <include name="stand-alone/**"/>
   <include name="web/java/**"/>
 </fileset>  
  
 
  
 
 <property name="docs.all.dir" value="${build}"/>
 
 <patternset id="docs.all">
   <include name="docs/**"/>
 </patternset>
 
 <property name="docs.misc.dir" value="${src}/shared/docs"/>
 
 <patternset id="docs.misc">
   <include name="README"/>
   <include name="LICENSE"/>
 </patternset>
 
 
 
 <property name="src.files.dir" value="."/>
 
 <patternset id="src.files">
   <include name="${src}/**"/>
   <include name="build.*"/>
 </patternset>
 
 
 
  
 <patternset id="bin.jar">
   <include name="*.jar"/>
 </patternset>
 
 
 
  
 <patternset id="bin.war">
   <include name="*.war"/>
 </patternset>
  
 
 <target name="dir" description="Create the working directories">
   <echo message="Creating the working directories"/>
   <mkdir dir="${build.stand-alone.root}"/>
   <mkdir dir="${build.web.classes}"/>
   <mkdir dir="${dist}"/>
   <mkdir dir="${lib}"/>
 </target>
 
 
 <target name="checkout-jstl" depends="dir" 
         description="Update or check out required sources
                      from CVS for the JSTL">
   <echo message="Checking out the required JSTL sources from CVS"/>
   <cvs cvsroot="${cvsroot}" quiet="true"
        command="checkout -P ${jstl.build}" 
        dest="${build}" compression="true" />
 </target>
 
 <target name="checkout-mysql-connector" depends="dir" 
         description="Update or check out required sources
         from CVS for the MySQL connector">
   <echo message="Checking out the required sources from CVS for the MySQL connector" />
   <cvs cvsroot="${mysql.cvsroot}" quiet="true"
        command="checkout" package="${mysql.build}"
        dest="${build}" compression="true" />
 </target>
 
 <target name="build-jstl" depends="checkout-jstl" 
         description="Build the JSTL from source">
   <echo message="Building the JSTL from source"/>
   <ant antfile="build.xml" dir="${build}/${jstl.build}"/>
   <copy todir="${lib}">
     <fileset dir="${build}/${jstl.build}/${build}/lib">
       <include name="*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="build-mysql-connector" depends="checkout-mysql-connector" 
         description="Build the MySQL connector from source">
   <echo message="Building the MySQL connector from source"/>
   
   
   <mkdir dir="${build}/dist-mysql-jdbc"/>
   <ant antfile="build.xml" dir="${build}/${mysql.build}"/>
   <copy tofile="${mysql.jar}">
     <fileset dir="${build}/build-mysql-jdbc">
       <include name="mysql-connector*/*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="compile-stand-alone" depends="dir" 
         description="Compile stand-alone application">
   <echo message="Compiling the stand-alone application"/>
   <javac srcdir="${src.shared.java}" destdir="${build.stand-alone.root}"/>
   <javac srcdir="${src.stand-alone.java}" 
          destdir="${build.stand-alone.root}"/>  
 </target>
 <target name="stand-alone-complete" 
         depends="build-mysql-connector, package-stand-alone" 
         description="Compile stand-alone application, 
                      using CVS version of the MySQL connector">
   <echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
 </target>
 
 <target name="package-stand-alone" depends="compile-stand-alone" 
         description="Package the stand-alone application">
   <echo message="Creating the stand-alone JAR file"/>
   <copy file="${database.properties}" todir="${build.stand-alone.root}"/>
   <jar destfile="${appName.jar}" basedir="${build.stand-alone.root}"/>
 </target>
 
 <target name="compile-web" depends="dir" description="Compile web application">
   <echo message="Compiling the web application"/>
   <javac destdir="${build.web.classes}">
     <src path="${src.shared.java}"/>
   </javac>
   <javac srcdir="${src.web.java}" destdir="${build.web.classes}">
     <classpath refid="build.classpath"/>
   </javac>
 </target>
 <target name="web-complete" 
         depends="build-mysql-connector, build-jstl, package-web" 
         description="Compile web application, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/>
 </target>
 
 <target name="copy-web" depends="compile-web" description="Copy the web files">
   <echo message="Copying the web pages and configuration files"/>
   <copy todir="${build.web.root}">
     <fileset dir="${src.web.pages}"/>
   </copy>
   
   <copy todir="${build.web.tags}">
     <fileset dir="${src.web.tags}"/>
   </copy>
   <copy todir="${build.web.web-inf}">
     <fileset dir="${src.web.conf}">
       <include name="*.tld"/>
     </fileset>
   </copy>
   
   <copy todir="${build.web.lib}">
     <fileset dir="${lib}"/>
   </copy>
   
   <copy file="${database.properties}" todir="${build.web.classes}"/>
   
 </target>
 


 <target name="package-web" depends="compile-web" 
         description="Build the WAR file in one step">
   <echo message="Building the WAR file in one step"/> 
   <war destfile="${appName.war}" basedir="${src.web.pages}" 
        webxml="${src.web.conf}/web.xml">
     <lib dir="${lib}"/>
     <classes dir="${build.web.root}"/>
     <zipfileset dir="${src.web.tags}" prefix="WEB-INF/tags"/>
     <zipfileset file="${database.properties}" prefix="WEB-INF/classes"/>
     <zipfileset dir="${src.web.conf}" prefix="WEB-INF">
       <include name="*.tld"/>
     </zipfileset>
   </war>
 </target>
 
 <target name="build-both" 
         depends="package-stand-alone, package-web" 
         description="Compile both applications, 
                      without CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, without CVS versions of the MySQL connector and the JSTL"/>
 </target>
 <target name="build-all" 
         depends="stand-alone-complete, web-complete" 
         description="Compile both applications, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, using CVS versions of the MySQL connector and the JSTL"/>
 </target>


 <target name="download-servlet-jar" depends="dir" 
         description="Download the servlet JAR">
   <echo message="Downloading the servlet JAR"/>
   <get src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.4.jar"
        dest="${servlet24.jar}"
        verbose="true"/>
 </target>
 
 <target name="download-jsp-jar" depends="dir" 
         description="Download the JSP JAR">
   <echo message="Downloading the JSP JAR"/>
   <get src="http://www.ibiblio.org/maven/jspapi/jars/jsp-api-2.0.jar"
        dest="${jsp20.jar}"
        verbose="true"/>
 </target>
 
 
 <target name="check-docs" 
         description="Check that the documentation is up to date">
   <echo message="Checking that the documentation is up to date"/>
   <condition property="docs.notRequired">
     <and>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.zip">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.tar.gz">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
     </and>
   </condition>
 </target>  
 
 <target name="javadocs" depends="dir,check-docs" 
         description="Generate Javadocs for the application" 
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="http://java.sun.ru/j2se/${javadoc.j2se.version}/docs/api"/>  
     <link href="http://java.sun.ru/j2ee/${javadoc.j2ee.version}/docs/api"/> 
   </javadoc>
 </target>
  
 <target name="javadocs-offline" depends="dir,check-docs"
         description="Generate Javadocs for the application, 
                      using offline package-list files"
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application, 
                  using offline package-list files"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="${javadoc.j2se.offline}" resolveLink="true"/>  
     <link href="${javadoc.j2ee.offline}" resolveLink="true"/> 
   </javadoc>
 </target>
 
 <target name="docs" depends="javadocs" 
         description="Assemble the documentation" unless="docs.notRequired">
   <echo message="Assembling the documentation"/>
   <copy todir="${docs}">
     <fileset dir="${src.shared.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/stand-alone">
     <fileset dir="${src.stand-alone.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/web">
     <fileset dir="${src.web.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
 </target>
 
 
 <target name="zip-docs" depends="docs" description="Zip the documentation">
   <echo message="Zipping the documentation"/>
   <zip destfile="${dist}/${appName}-${package.docs}.zip">
     
     <fileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </fileset>
     
     <fileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.docs}.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.zip" forceOverwrite="true"  
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-src" depends="zip-docs" 
         description="Zip the source and documentation together">
   <echo message="Zipping the source and documentation together"/>
   <zip destfile="${dist}/${appName}-src.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     <fileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-stand-alone" depends="package-stand-alone,zip-docs" 
         description="Zip the binary stand-alone distribution 
                      with the documentation">
   <echo message="Zipping the binary stand-alone distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.stand-alone}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <zipfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </zipfileset>
     <fileset dir=".">
       <include name="${mysql.jar}"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-web" depends="package-web,zip-docs" 
         description="Zip the binary web distribution with the documentation">
   <echo message="Zipping the binary web distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.web}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <fileset dir="${dist}">
       <patternset refid="bin.war"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin" depends="zip-bin-stand-alone,zip-bin-web" 
         description="Zip the binary distribution with the documentation">
   <echo message="Zipping the binary distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-bin.zip" 
        duplicate="preserve" update="true">
     <zipgroupfileset dir="${dist}" includes="*.zip"/>
   </zip>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-all" depends="zip-src,zip-bin" 
         description="Zip the binary and source distributions">
   <echo message="Zipped the binary and source distributions"/>
 </target>
 
 
 <target name="tar-docs" depends="docs" description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-${package.docs}.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-src" depends="tar-docs"
         description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-src.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-stand-alone" depends="package-stand-alone,tar-docs" 
         description="Tar the binary stand-alone distribution 
                      with the documentation">
   <echo message="Tarring the binary stand-alone distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>    </tar> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-web" depends="package-web,tar-docs" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin" depends="tar-bin-stand-alone,tar-bin-web" 
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 
 <target name="tar-bin-web-new" depends="package-web,tar-docs,zip-bin-web" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <unzip src="${dist}/${appName}-${package.web}-bin.zip" dest="${tmp}/web"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     <tarfileset dir="${tmp}/web"/>
   </tar>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-new" 
         depends="zip-bin,tar-bin-stand-alone,tar-bin-web-new"
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <delete failonerror="false" includeemptydirs="true">
     <fileset dir="${tmp}" includes="**"/>
   </delete>
   <unzip src="${dist}/${appName}-bin.zip" dest="${tmp}"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     <tarfileset dir="${tmp}"/>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-all" depends="tar-src,tar-bin" 
         description="Tar the binary and source distributions">
   <echo message="Tarred the binary and source distributions"/>
 </target>
 
 
 


 <target name="ftp-docs" depends="zip-docs,tar-docs" 
         description="Place the documentation on FTP">
   <echo message="Placing the documentation on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-src" depends="zip-src,tar-src" 
         description="Place the source code on FTP">
   <echo message="Placing the source code on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-src.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-bin" depends="zip-bin,tar-bin" 
         description="Place the binaries on FTP">
   <echo message="Placing the binaries on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.bin.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}*bin*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp" description="Place everything on FTP">
   <echo message="Placing everything on FTP"/>
   <antcall target="ftp-docs"/>
   <antcall target="ftp-src"/>
   <antcall target="ftp-bin"/>
 </target>
 


 <target name="email-docs" depends="zip-docs,tar-docs" 
         description="E-mailing the documentation">
   <echo message="E-mailing the documentation"/>
   <mail from="${mail.from}"
         tolist="${mail.tolist}"
         mailhost="${mail.mailhost}"
         user="${mail.user}"
         password="${mail.password}"
         subject="${mail.subject}">
     <message>
       ${mail.message.docs}
     </message>
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </mail>
 </target>
 
 
 <target name="deploy-copy-files" depends="copy-web" 
         description="Deploy the application by copying it to Tomcat">
   <echo message="Copying the expanded web application to CATALINA_HOME"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/webapps/${appName}">
     <fileset dir="${build.web.root}"/>
   </copy>
 </target>
 
 <target name="deploy-copy-war" depends="package-web" 
         description="Deploy the WAR by copying it to Tomcat">
   <echo message="Copying the WAR to CATALINA_HOME"/>
   <property environment="env"/>
   <copy file="${appName.war}" todir="${env.CATALINA_HOME}/webapps"/>
 </target>
 
 <target name="deploy-context" depends="copy-web" 
         description="Deploy the web application using a context XML file">
   <echo message="Deploying the web application using a context XML file"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/conf/Catalina/localhost" 
         file="${src.web.conf}/${appName}.xml"/>
 </target>
 
 <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
 
 <target name="deploy" depends="package-web" 
         description="Hot deploy the application">
   <echo message="Deploying the WAR to Tomcat"/>
   <deploy url="${manager.url}"
           username="${manager.user}"
           password="${manager.password}"  
           path="/${appName}"
           war="file:${appName.war}"
           update="true"/>
 </target>
 
 <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
 
 <target name="undeploy" description="Undeploy the application">
   <echo message="Undeploying the WAR"/>
   <undeploy url="${manager.url}"
             username="${manager.user}"   
             password="${manager.password}"
             path="/${appName}"/>
 </target>
 <target name="clean" description="Clean up the working directories">
   <echo message="Cleaning up"/>
   <delete dir="${build}"/>
 </target>

</project>


 </source>
   
  
 
  



Tar the documentation

   <source lang="java">

<?xml version="1.0"?> <project name="Example Application Build" default="build-both" basedir=".">

 <property file="build.properties"/>
 
 <property name="cvsroot" 
           value=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" />
 
 <property name="mysql.cvsroot" 
           value=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/mmmysql" />
  
 <path id="build.classpath">
   <pathelement location="${servlet24.jar}"/>
   <pathelement location="${jsp20.jar}"/>
   <pathelement location="${mysql.jar}"/>
   <pathelement path="${appName.jar}"/>
 </path>
  
 <fileset id="javadoc" dir="${src}">
   <exclude name="*/conf/**"/>
   <exclude name="*/docs/*"/>
   <include name="shared/**"/>
   <include name="stand-alone/**"/>
   <include name="web/java/**"/>
 </fileset>  
  
 
  
 
 <property name="docs.all.dir" value="${build}"/>
 
 <patternset id="docs.all">
   <include name="docs/**"/>
 </patternset>
 
 <property name="docs.misc.dir" value="${src}/shared/docs"/>
 
 <patternset id="docs.misc">
   <include name="README"/>
   <include name="LICENSE"/>
 </patternset>
 
 
 
 <property name="src.files.dir" value="."/>
 
 <patternset id="src.files">
   <include name="${src}/**"/>
   <include name="build.*"/>
 </patternset>
 
 
 
  
 <patternset id="bin.jar">
   <include name="*.jar"/>
 </patternset>
 
 
 
  
 <patternset id="bin.war">
   <include name="*.war"/>
 </patternset>
  
 
 <target name="dir" description="Create the working directories">
   <echo message="Creating the working directories"/>
   <mkdir dir="${build.stand-alone.root}"/>
   <mkdir dir="${build.web.classes}"/>
   <mkdir dir="${dist}"/>
   <mkdir dir="${lib}"/>
 </target>
 
 
 <target name="checkout-jstl" depends="dir" 
         description="Update or check out required sources
                      from CVS for the JSTL">
   <echo message="Checking out the required JSTL sources from CVS"/>
   <cvs cvsroot="${cvsroot}" quiet="true"
        command="checkout -P ${jstl.build}" 
        dest="${build}" compression="true" />
 </target>
 
 <target name="checkout-mysql-connector" depends="dir" 
         description="Update or check out required sources
         from CVS for the MySQL connector">
   <echo message="Checking out the required sources from CVS for the MySQL connector" />
   <cvs cvsroot="${mysql.cvsroot}" quiet="true"
        command="checkout" package="${mysql.build}"
        dest="${build}" compression="true" />
 </target>
 
 <target name="build-jstl" depends="checkout-jstl" 
         description="Build the JSTL from source">
   <echo message="Building the JSTL from source"/>
   <ant antfile="build.xml" dir="${build}/${jstl.build}"/>
   <copy todir="${lib}">
     <fileset dir="${build}/${jstl.build}/${build}/lib">
       <include name="*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="build-mysql-connector" depends="checkout-mysql-connector" 
         description="Build the MySQL connector from source">
   <echo message="Building the MySQL connector from source"/>
   
   
   <mkdir dir="${build}/dist-mysql-jdbc"/>
   <ant antfile="build.xml" dir="${build}/${mysql.build}"/>
   <copy tofile="${mysql.jar}">
     <fileset dir="${build}/build-mysql-jdbc">
       <include name="mysql-connector*/*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="compile-stand-alone" depends="dir" 
         description="Compile stand-alone application">
   <echo message="Compiling the stand-alone application"/>
   <javac srcdir="${src.shared.java}" destdir="${build.stand-alone.root}"/>
   <javac srcdir="${src.stand-alone.java}" 
          destdir="${build.stand-alone.root}"/>  
 </target>
 <target name="stand-alone-complete" 
         depends="build-mysql-connector, package-stand-alone" 
         description="Compile stand-alone application, 
                      using CVS version of the MySQL connector">
   <echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
 </target>
 
 <target name="package-stand-alone" depends="compile-stand-alone" 
         description="Package the stand-alone application">
   <echo message="Creating the stand-alone JAR file"/>
   <copy file="${database.properties}" todir="${build.stand-alone.root}"/>
   <jar destfile="${appName.jar}" basedir="${build.stand-alone.root}"/>
 </target>
 
 <target name="compile-web" depends="dir" description="Compile web application">
   <echo message="Compiling the web application"/>
   <javac destdir="${build.web.classes}">
     <src path="${src.shared.java}"/>
   </javac>
   <javac srcdir="${src.web.java}" destdir="${build.web.classes}">
     <classpath refid="build.classpath"/>
   </javac>
 </target>
 <target name="web-complete" 
         depends="build-mysql-connector, build-jstl, package-web" 
         description="Compile web application, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/>
 </target>
 
 <target name="copy-web" depends="compile-web" description="Copy the web files">
   <echo message="Copying the web pages and configuration files"/>
   <copy todir="${build.web.root}">
     <fileset dir="${src.web.pages}"/>
   </copy>
   
   <copy todir="${build.web.tags}">
     <fileset dir="${src.web.tags}"/>
   </copy>
   <copy todir="${build.web.web-inf}">
     <fileset dir="${src.web.conf}">
       <include name="*.tld"/>
     </fileset>
   </copy>
   
   <copy todir="${build.web.lib}">
     <fileset dir="${lib}"/>
   </copy>
   
   <copy file="${database.properties}" todir="${build.web.classes}"/>
   
 </target>
 


 <target name="package-web" depends="compile-web" 
         description="Build the WAR file in one step">
   <echo message="Building the WAR file in one step"/> 
   <war destfile="${appName.war}" basedir="${src.web.pages}" 
        webxml="${src.web.conf}/web.xml">
     <lib dir="${lib}"/>
     <classes dir="${build.web.root}"/>
     <zipfileset dir="${src.web.tags}" prefix="WEB-INF/tags"/>
     <zipfileset file="${database.properties}" prefix="WEB-INF/classes"/>
     <zipfileset dir="${src.web.conf}" prefix="WEB-INF">
       <include name="*.tld"/>
     </zipfileset>
   </war>
 </target>
 
 <target name="build-both" 
         depends="package-stand-alone, package-web" 
         description="Compile both applications, 
                      without CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, without CVS versions of the MySQL connector and the JSTL"/>
 </target>
 <target name="build-all" 
         depends="stand-alone-complete, web-complete" 
         description="Compile both applications, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, using CVS versions of the MySQL connector and the JSTL"/>
 </target>


 <target name="download-servlet-jar" depends="dir" 
         description="Download the servlet JAR">
   <echo message="Downloading the servlet JAR"/>
   <get src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.4.jar"
        dest="${servlet24.jar}"
        verbose="true"/>
 </target>
 
 <target name="download-jsp-jar" depends="dir" 
         description="Download the JSP JAR">
   <echo message="Downloading the JSP JAR"/>
   <get src="http://www.ibiblio.org/maven/jspapi/jars/jsp-api-2.0.jar"
        dest="${jsp20.jar}"
        verbose="true"/>
 </target>
 
 
 <target name="check-docs" 
         description="Check that the documentation is up to date">
   <echo message="Checking that the documentation is up to date"/>
   <condition property="docs.notRequired">
     <and>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.zip">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.tar.gz">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
     </and>
   </condition>
 </target>  
 
 <target name="javadocs" depends="dir,check-docs" 
         description="Generate Javadocs for the application" 
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="http://java.sun.ru/j2se/${javadoc.j2se.version}/docs/api"/>  
     <link href="http://java.sun.ru/j2ee/${javadoc.j2ee.version}/docs/api"/> 
   </javadoc>
 </target>
  
 <target name="javadocs-offline" depends="dir,check-docs"
         description="Generate Javadocs for the application, 
                      using offline package-list files"
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application, 
                  using offline package-list files"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="${javadoc.j2se.offline}" resolveLink="true"/>  
     <link href="${javadoc.j2ee.offline}" resolveLink="true"/> 
   </javadoc>
 </target>
 
 <target name="docs" depends="javadocs" 
         description="Assemble the documentation" unless="docs.notRequired">
   <echo message="Assembling the documentation"/>
   <copy todir="${docs}">
     <fileset dir="${src.shared.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/stand-alone">
     <fileset dir="${src.stand-alone.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/web">
     <fileset dir="${src.web.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
 </target>
 
 
 <target name="zip-docs" depends="docs" description="Zip the documentation">
   <echo message="Zipping the documentation"/>
   <zip destfile="${dist}/${appName}-${package.docs}.zip">
     
     <fileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </fileset>
     
     <fileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.docs}.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.zip" forceOverwrite="true"  
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-src" depends="zip-docs" 
         description="Zip the source and documentation together">
   <echo message="Zipping the source and documentation together"/>
   <zip destfile="${dist}/${appName}-src.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     <fileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-stand-alone" depends="package-stand-alone,zip-docs" 
         description="Zip the binary stand-alone distribution 
                      with the documentation">
   <echo message="Zipping the binary stand-alone distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.stand-alone}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <zipfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </zipfileset>
     <fileset dir=".">
       <include name="${mysql.jar}"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-web" depends="package-web,zip-docs" 
         description="Zip the binary web distribution with the documentation">
   <echo message="Zipping the binary web distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.web}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <fileset dir="${dist}">
       <patternset refid="bin.war"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin" depends="zip-bin-stand-alone,zip-bin-web" 
         description="Zip the binary distribution with the documentation">
   <echo message="Zipping the binary distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-bin.zip" 
        duplicate="preserve" update="true">
     <zipgroupfileset dir="${dist}" includes="*.zip"/>
   </zip>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-all" depends="zip-src,zip-bin" 
         description="Zip the binary and source distributions">
   <echo message="Zipped the binary and source distributions"/>
 </target>
 
 
 <target name="tar-docs" depends="docs" description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-${package.docs}.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-src" depends="tar-docs"
         description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-src.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-stand-alone" depends="package-stand-alone,tar-docs" 
         description="Tar the binary stand-alone distribution 
                      with the documentation">
   <echo message="Tarring the binary stand-alone distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>    </tar> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-web" depends="package-web,tar-docs" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin" depends="tar-bin-stand-alone,tar-bin-web" 
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 
 <target name="tar-bin-web-new" depends="package-web,tar-docs,zip-bin-web" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <unzip src="${dist}/${appName}-${package.web}-bin.zip" dest="${tmp}/web"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     <tarfileset dir="${tmp}/web"/>
   </tar>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-new" 
         depends="zip-bin,tar-bin-stand-alone,tar-bin-web-new"
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <delete failonerror="false" includeemptydirs="true">
     <fileset dir="${tmp}" includes="**"/>
   </delete>
   <unzip src="${dist}/${appName}-bin.zip" dest="${tmp}"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     <tarfileset dir="${tmp}"/>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-all" depends="tar-src,tar-bin" 
         description="Tar the binary and source distributions">
   <echo message="Tarred the binary and source distributions"/>
 </target>
 
 
 


 <target name="ftp-docs" depends="zip-docs,tar-docs" 
         description="Place the documentation on FTP">
   <echo message="Placing the documentation on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-src" depends="zip-src,tar-src" 
         description="Place the source code on FTP">
   <echo message="Placing the source code on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-src.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-bin" depends="zip-bin,tar-bin" 
         description="Place the binaries on FTP">
   <echo message="Placing the binaries on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.bin.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}*bin*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp" description="Place everything on FTP">
   <echo message="Placing everything on FTP"/>
   <antcall target="ftp-docs"/>
   <antcall target="ftp-src"/>
   <antcall target="ftp-bin"/>
 </target>
 


 <target name="email-docs" depends="zip-docs,tar-docs" 
         description="E-mailing the documentation">
   <echo message="E-mailing the documentation"/>
   <mail from="${mail.from}"
         tolist="${mail.tolist}"
         mailhost="${mail.mailhost}"
         user="${mail.user}"
         password="${mail.password}"
         subject="${mail.subject}">
     <message>
       ${mail.message.docs}
     </message>
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </mail>
 </target>
 
 
 <target name="deploy-copy-files" depends="copy-web" 
         description="Deploy the application by copying it to Tomcat">
   <echo message="Copying the expanded web application to CATALINA_HOME"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/webapps/${appName}">
     <fileset dir="${build.web.root}"/>
   </copy>
 </target>
 
 <target name="deploy-copy-war" depends="package-web" 
         description="Deploy the WAR by copying it to Tomcat">
   <echo message="Copying the WAR to CATALINA_HOME"/>
   <property environment="env"/>
   <copy file="${appName.war}" todir="${env.CATALINA_HOME}/webapps"/>
 </target>
 
 <target name="deploy-context" depends="copy-web" 
         description="Deploy the web application using a context XML file">
   <echo message="Deploying the web application using a context XML file"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/conf/Catalina/localhost" 
         file="${src.web.conf}/${appName}.xml"/>
 </target>
 
 <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
 
 <target name="deploy" depends="package-web" 
         description="Hot deploy the application">
   <echo message="Deploying the WAR to Tomcat"/>
   <deploy url="${manager.url}"
           username="${manager.user}"
           password="${manager.password}"  
           path="/${appName}"
           war="file:${appName.war}"
           update="true"/>
 </target>
 
 <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
 
 <target name="undeploy" description="Undeploy the application">
   <echo message="Undeploying the WAR"/>
   <undeploy url="${manager.url}"
             username="${manager.user}"   
             password="${manager.password}"
             path="/${appName}"/>
 </target>
 <target name="clean" description="Clean up the working directories">
   <echo message="Cleaning up"/>
   <delete dir="${build}"/>
 </target>

</project>


 </source>
   
  
 
  



Tar the source and documentation together

   <source lang="java">

<?xml version="1.0"?> <project name="Example Application Build" default="build-both" basedir=".">

 <property file="build.properties"/>
 
 <property name="cvsroot" 
           value=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" />
 
 <property name="mysql.cvsroot" 
           value=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/mmmysql" />
  
 <path id="build.classpath">
   <pathelement location="${servlet24.jar}"/>
   <pathelement location="${jsp20.jar}"/>
   <pathelement location="${mysql.jar}"/>
   <pathelement path="${appName.jar}"/>
 </path>
  
 <fileset id="javadoc" dir="${src}">
   <exclude name="*/conf/**"/>
   <exclude name="*/docs/*"/>
   <include name="shared/**"/>
   <include name="stand-alone/**"/>
   <include name="web/java/**"/>
 </fileset>  
  
 
  
 
 <property name="docs.all.dir" value="${build}"/>
 
 <patternset id="docs.all">
   <include name="docs/**"/>
 </patternset>
 
 <property name="docs.misc.dir" value="${src}/shared/docs"/>
 
 <patternset id="docs.misc">
   <include name="README"/>
   <include name="LICENSE"/>
 </patternset>
 
 
 
 <property name="src.files.dir" value="."/>
 
 <patternset id="src.files">
   <include name="${src}/**"/>
   <include name="build.*"/>
 </patternset>
 
 
 
  
 <patternset id="bin.jar">
   <include name="*.jar"/>
 </patternset>
 
 
 
  
 <patternset id="bin.war">
   <include name="*.war"/>
 </patternset>
  
 
 <target name="dir" description="Create the working directories">
   <echo message="Creating the working directories"/>
   <mkdir dir="${build.stand-alone.root}"/>
   <mkdir dir="${build.web.classes}"/>
   <mkdir dir="${dist}"/>
   <mkdir dir="${lib}"/>
 </target>
 
 
 <target name="checkout-jstl" depends="dir" 
         description="Update or check out required sources
                      from CVS for the JSTL">
   <echo message="Checking out the required JSTL sources from CVS"/>
   <cvs cvsroot="${cvsroot}" quiet="true"
        command="checkout -P ${jstl.build}" 
        dest="${build}" compression="true" />
 </target>
 
 <target name="checkout-mysql-connector" depends="dir" 
         description="Update or check out required sources
         from CVS for the MySQL connector">
   <echo message="Checking out the required sources from CVS for the MySQL connector" />
   <cvs cvsroot="${mysql.cvsroot}" quiet="true"
        command="checkout" package="${mysql.build}"
        dest="${build}" compression="true" />
 </target>
 
 <target name="build-jstl" depends="checkout-jstl" 
         description="Build the JSTL from source">
   <echo message="Building the JSTL from source"/>
   <ant antfile="build.xml" dir="${build}/${jstl.build}"/>
   <copy todir="${lib}">
     <fileset dir="${build}/${jstl.build}/${build}/lib">
       <include name="*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="build-mysql-connector" depends="checkout-mysql-connector" 
         description="Build the MySQL connector from source">
   <echo message="Building the MySQL connector from source"/>
   
   
   <mkdir dir="${build}/dist-mysql-jdbc"/>
   <ant antfile="build.xml" dir="${build}/${mysql.build}"/>
   <copy tofile="${mysql.jar}">
     <fileset dir="${build}/build-mysql-jdbc">
       <include name="mysql-connector*/*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="compile-stand-alone" depends="dir" 
         description="Compile stand-alone application">
   <echo message="Compiling the stand-alone application"/>
   <javac srcdir="${src.shared.java}" destdir="${build.stand-alone.root}"/>
   <javac srcdir="${src.stand-alone.java}" 
          destdir="${build.stand-alone.root}"/>  
 </target>
 <target name="stand-alone-complete" 
         depends="build-mysql-connector, package-stand-alone" 
         description="Compile stand-alone application, 
                      using CVS version of the MySQL connector">
   <echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
 </target>
 
 <target name="package-stand-alone" depends="compile-stand-alone" 
         description="Package the stand-alone application">
   <echo message="Creating the stand-alone JAR file"/>
   <copy file="${database.properties}" todir="${build.stand-alone.root}"/>
   <jar destfile="${appName.jar}" basedir="${build.stand-alone.root}"/>
 </target>
 
 <target name="compile-web" depends="dir" description="Compile web application">
   <echo message="Compiling the web application"/>
   <javac destdir="${build.web.classes}">
     <src path="${src.shared.java}"/>
   </javac>
   <javac srcdir="${src.web.java}" destdir="${build.web.classes}">
     <classpath refid="build.classpath"/>
   </javac>
 </target>
 <target name="web-complete" 
         depends="build-mysql-connector, build-jstl, package-web" 
         description="Compile web application, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/>
 </target>
 
 <target name="copy-web" depends="compile-web" description="Copy the web files">
   <echo message="Copying the web pages and configuration files"/>
   <copy todir="${build.web.root}">
     <fileset dir="${src.web.pages}"/>
   </copy>
   
   <copy todir="${build.web.tags}">
     <fileset dir="${src.web.tags}"/>
   </copy>
   <copy todir="${build.web.web-inf}">
     <fileset dir="${src.web.conf}">
       <include name="*.tld"/>
     </fileset>
   </copy>
   
   <copy todir="${build.web.lib}">
     <fileset dir="${lib}"/>
   </copy>
   
   <copy file="${database.properties}" todir="${build.web.classes}"/>
   
 </target>
 


 <target name="package-web" depends="compile-web" 
         description="Build the WAR file in one step">
   <echo message="Building the WAR file in one step"/> 
   <war destfile="${appName.war}" basedir="${src.web.pages}" 
        webxml="${src.web.conf}/web.xml">
     <lib dir="${lib}"/>
     <classes dir="${build.web.root}"/>
     <zipfileset dir="${src.web.tags}" prefix="WEB-INF/tags"/>
     <zipfileset file="${database.properties}" prefix="WEB-INF/classes"/>
     <zipfileset dir="${src.web.conf}" prefix="WEB-INF">
       <include name="*.tld"/>
     </zipfileset>
   </war>
 </target>
 
 <target name="build-both" 
         depends="package-stand-alone, package-web" 
         description="Compile both applications, 
                      without CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, without CVS versions of the MySQL connector and the JSTL"/>
 </target>
 <target name="build-all" 
         depends="stand-alone-complete, web-complete" 
         description="Compile both applications, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, using CVS versions of the MySQL connector and the JSTL"/>
 </target>


 <target name="download-servlet-jar" depends="dir" 
         description="Download the servlet JAR">
   <echo message="Downloading the servlet JAR"/>
   <get src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.4.jar"
        dest="${servlet24.jar}"
        verbose="true"/>
 </target>
 
 <target name="download-jsp-jar" depends="dir" 
         description="Download the JSP JAR">
   <echo message="Downloading the JSP JAR"/>
   <get src="http://www.ibiblio.org/maven/jspapi/jars/jsp-api-2.0.jar"
        dest="${jsp20.jar}"
        verbose="true"/>
 </target>
 
 
 <target name="check-docs" 
         description="Check that the documentation is up to date">
   <echo message="Checking that the documentation is up to date"/>
   <condition property="docs.notRequired">
     <and>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.zip">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.tar.gz">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
     </and>
   </condition>
 </target>  
 
 <target name="javadocs" depends="dir,check-docs" 
         description="Generate Javadocs for the application" 
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="http://java.sun.ru/j2se/${javadoc.j2se.version}/docs/api"/>  
     <link href="http://java.sun.ru/j2ee/${javadoc.j2ee.version}/docs/api"/> 
   </javadoc>
 </target>
  
 <target name="javadocs-offline" depends="dir,check-docs"
         description="Generate Javadocs for the application, 
                      using offline package-list files"
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application, 
                  using offline package-list files"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="${javadoc.j2se.offline}" resolveLink="true"/>  
     <link href="${javadoc.j2ee.offline}" resolveLink="true"/> 
   </javadoc>
 </target>
 
 <target name="docs" depends="javadocs" 
         description="Assemble the documentation" unless="docs.notRequired">
   <echo message="Assembling the documentation"/>
   <copy todir="${docs}">
     <fileset dir="${src.shared.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/stand-alone">
     <fileset dir="${src.stand-alone.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/web">
     <fileset dir="${src.web.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
 </target>
 
 
 <target name="zip-docs" depends="docs" description="Zip the documentation">
   <echo message="Zipping the documentation"/>
   <zip destfile="${dist}/${appName}-${package.docs}.zip">
     
     <fileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </fileset>
     
     <fileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.docs}.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.zip" forceOverwrite="true"  
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-src" depends="zip-docs" 
         description="Zip the source and documentation together">
   <echo message="Zipping the source and documentation together"/>
   <zip destfile="${dist}/${appName}-src.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     <fileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-stand-alone" depends="package-stand-alone,zip-docs" 
         description="Zip the binary stand-alone distribution 
                      with the documentation">
   <echo message="Zipping the binary stand-alone distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.stand-alone}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <zipfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </zipfileset>
     <fileset dir=".">
       <include name="${mysql.jar}"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-web" depends="package-web,zip-docs" 
         description="Zip the binary web distribution with the documentation">
   <echo message="Zipping the binary web distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.web}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <fileset dir="${dist}">
       <patternset refid="bin.war"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin" depends="zip-bin-stand-alone,zip-bin-web" 
         description="Zip the binary distribution with the documentation">
   <echo message="Zipping the binary distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-bin.zip" 
        duplicate="preserve" update="true">
     <zipgroupfileset dir="${dist}" includes="*.zip"/>
   </zip>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-all" depends="zip-src,zip-bin" 
         description="Zip the binary and source distributions">
   <echo message="Zipped the binary and source distributions"/>
 </target>
 
 
 <target name="tar-docs" depends="docs" description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-${package.docs}.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-src" depends="tar-docs"
         description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-src.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-stand-alone" depends="package-stand-alone,tar-docs" 
         description="Tar the binary stand-alone distribution 
                      with the documentation">
   <echo message="Tarring the binary stand-alone distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>    </tar> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-web" depends="package-web,tar-docs" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin" depends="tar-bin-stand-alone,tar-bin-web" 
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 
 <target name="tar-bin-web-new" depends="package-web,tar-docs,zip-bin-web" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <unzip src="${dist}/${appName}-${package.web}-bin.zip" dest="${tmp}/web"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     <tarfileset dir="${tmp}/web"/>
   </tar>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-new" 
         depends="zip-bin,tar-bin-stand-alone,tar-bin-web-new"
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <delete failonerror="false" includeemptydirs="true">
     <fileset dir="${tmp}" includes="**"/>
   </delete>
   <unzip src="${dist}/${appName}-bin.zip" dest="${tmp}"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     <tarfileset dir="${tmp}"/>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-all" depends="tar-src,tar-bin" 
         description="Tar the binary and source distributions">
   <echo message="Tarred the binary and source distributions"/>
 </target>
 
 
 


 <target name="ftp-docs" depends="zip-docs,tar-docs" 
         description="Place the documentation on FTP">
   <echo message="Placing the documentation on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-src" depends="zip-src,tar-src" 
         description="Place the source code on FTP">
   <echo message="Placing the source code on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-src.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-bin" depends="zip-bin,tar-bin" 
         description="Place the binaries on FTP">
   <echo message="Placing the binaries on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.bin.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}*bin*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp" description="Place everything on FTP">
   <echo message="Placing everything on FTP"/>
   <antcall target="ftp-docs"/>
   <antcall target="ftp-src"/>
   <antcall target="ftp-bin"/>
 </target>
 


 <target name="email-docs" depends="zip-docs,tar-docs" 
         description="E-mailing the documentation">
   <echo message="E-mailing the documentation"/>
   <mail from="${mail.from}"
         tolist="${mail.tolist}"
         mailhost="${mail.mailhost}"
         user="${mail.user}"
         password="${mail.password}"
         subject="${mail.subject}">
     <message>
       ${mail.message.docs}
     </message>
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </mail>
 </target>
 
 
 <target name="deploy-copy-files" depends="copy-web" 
         description="Deploy the application by copying it to Tomcat">
   <echo message="Copying the expanded web application to CATALINA_HOME"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/webapps/${appName}">
     <fileset dir="${build.web.root}"/>
   </copy>
 </target>
 
 <target name="deploy-copy-war" depends="package-web" 
         description="Deploy the WAR by copying it to Tomcat">
   <echo message="Copying the WAR to CATALINA_HOME"/>
   <property environment="env"/>
   <copy file="${appName.war}" todir="${env.CATALINA_HOME}/webapps"/>
 </target>
 
 <target name="deploy-context" depends="copy-web" 
         description="Deploy the web application using a context XML file">
   <echo message="Deploying the web application using a context XML file"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/conf/Catalina/localhost" 
         file="${src.web.conf}/${appName}.xml"/>
 </target>
 
 <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
 
 <target name="deploy" depends="package-web" 
         description="Hot deploy the application">
   <echo message="Deploying the WAR to Tomcat"/>
   <deploy url="${manager.url}"
           username="${manager.user}"
           password="${manager.password}"  
           path="/${appName}"
           war="file:${appName.war}"
           update="true"/>
 </target>
 
 <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
 
 <target name="undeploy" description="Undeploy the application">
   <echo message="Undeploying the WAR"/>
   <undeploy url="${manager.url}"
             username="${manager.user}"   
             password="${manager.password}"
             path="/${appName}"/>
 </target>
 <target name="clean" description="Clean up the working directories">
   <echo message="Cleaning up"/>
   <delete dir="${build}"/>
 </target>

</project>


 </source>
   
  
 
  



Tasks that use the zip files to construct tar files

   <source lang="java">

<?xml version="1.0"?> <project name="Example Application Build" default="build-both" basedir=".">

 <property file="build.properties"/>
 
 <property name="cvsroot" 
           value=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" />
 
 <property name="mysql.cvsroot" 
           value=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/mmmysql" />
  
 <path id="build.classpath">
   <pathelement location="${servlet24.jar}"/>
   <pathelement location="${jsp20.jar}"/>
   <pathelement location="${mysql.jar}"/>
   <pathelement path="${appName.jar}"/>
 </path>
  
 <fileset id="javadoc" dir="${src}">
   <exclude name="*/conf/**"/>
   <exclude name="*/docs/*"/>
   <include name="shared/**"/>
   <include name="stand-alone/**"/>
   <include name="web/java/**"/>
 </fileset>  
  
 
  
 
 <property name="docs.all.dir" value="${build}"/>
 
 <patternset id="docs.all">
   <include name="docs/**"/>
 </patternset>
 
 <property name="docs.misc.dir" value="${src}/shared/docs"/>
 
 <patternset id="docs.misc">
   <include name="README"/>
   <include name="LICENSE"/>
 </patternset>
 
 
 
 <property name="src.files.dir" value="."/>
 
 <patternset id="src.files">
   <include name="${src}/**"/>
   <include name="build.*"/>
 </patternset>
 
 
 
  
 <patternset id="bin.jar">
   <include name="*.jar"/>
 </patternset>
 
 
 
  
 <patternset id="bin.war">
   <include name="*.war"/>
 </patternset>
  
 
 <target name="dir" description="Create the working directories">
   <echo message="Creating the working directories"/>
   <mkdir dir="${build.stand-alone.root}"/>
   <mkdir dir="${build.web.classes}"/>
   <mkdir dir="${dist}"/>
   <mkdir dir="${lib}"/>
 </target>
 
 
 <target name="checkout-jstl" depends="dir" 
         description="Update or check out required sources
                      from CVS for the JSTL">
   <echo message="Checking out the required JSTL sources from CVS"/>
   <cvs cvsroot="${cvsroot}" quiet="true"
        command="checkout -P ${jstl.build}" 
        dest="${build}" compression="true" />
 </target>
 
 <target name="checkout-mysql-connector" depends="dir" 
         description="Update or check out required sources
         from CVS for the MySQL connector">
   <echo message="Checking out the required sources from CVS for the MySQL connector" />
   <cvs cvsroot="${mysql.cvsroot}" quiet="true"
        command="checkout" package="${mysql.build}"
        dest="${build}" compression="true" />
 </target>
 
 <target name="build-jstl" depends="checkout-jstl" 
         description="Build the JSTL from source">
   <echo message="Building the JSTL from source"/>
   <ant antfile="build.xml" dir="${build}/${jstl.build}"/>
   <copy todir="${lib}">
     <fileset dir="${build}/${jstl.build}/${build}/lib">
       <include name="*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="build-mysql-connector" depends="checkout-mysql-connector" 
         description="Build the MySQL connector from source">
   <echo message="Building the MySQL connector from source"/>
   
   
   <mkdir dir="${build}/dist-mysql-jdbc"/>
   <ant antfile="build.xml" dir="${build}/${mysql.build}"/>
   <copy tofile="${mysql.jar}">
     <fileset dir="${build}/build-mysql-jdbc">
       <include name="mysql-connector*/*.jar"/>
     </fileset>
   </copy>
 </target>
 
 <target name="compile-stand-alone" depends="dir" 
         description="Compile stand-alone application">
   <echo message="Compiling the stand-alone application"/>
   <javac srcdir="${src.shared.java}" destdir="${build.stand-alone.root}"/>
   <javac srcdir="${src.stand-alone.java}" 
          destdir="${build.stand-alone.root}"/>  
 </target>
 <target name="stand-alone-complete" 
         depends="build-mysql-connector, package-stand-alone" 
         description="Compile stand-alone application, 
                      using CVS version of the MySQL connector">
   <echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/>
 </target>
 
 <target name="package-stand-alone" depends="compile-stand-alone" 
         description="Package the stand-alone application">
   <echo message="Creating the stand-alone JAR file"/>
   <copy file="${database.properties}" todir="${build.stand-alone.root}"/>
   <jar destfile="${appName.jar}" basedir="${build.stand-alone.root}"/>
 </target>
 
 <target name="compile-web" depends="dir" description="Compile web application">
   <echo message="Compiling the web application"/>
   <javac destdir="${build.web.classes}">
     <src path="${src.shared.java}"/>
   </javac>
   <javac srcdir="${src.web.java}" destdir="${build.web.classes}">
     <classpath refid="build.classpath"/>
   </javac>
 </target>
 <target name="web-complete" 
         depends="build-mysql-connector, build-jstl, package-web" 
         description="Compile web application, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/>
 </target>
 
 <target name="copy-web" depends="compile-web" description="Copy the web files">
   <echo message="Copying the web pages and configuration files"/>
   <copy todir="${build.web.root}">
     <fileset dir="${src.web.pages}"/>
   </copy>
   
   <copy todir="${build.web.tags}">
     <fileset dir="${src.web.tags}"/>
   </copy>
   <copy todir="${build.web.web-inf}">
     <fileset dir="${src.web.conf}">
       <include name="*.tld"/>
     </fileset>
   </copy>
   
   <copy todir="${build.web.lib}">
     <fileset dir="${lib}"/>
   </copy>
   
   <copy file="${database.properties}" todir="${build.web.classes}"/>
   
 </target>
 


 <target name="package-web" depends="compile-web" 
         description="Build the WAR file in one step">
   <echo message="Building the WAR file in one step"/> 
   <war destfile="${appName.war}" basedir="${src.web.pages}" 
        webxml="${src.web.conf}/web.xml">
     <lib dir="${lib}"/>
     <classes dir="${build.web.root}"/>
     <zipfileset dir="${src.web.tags}" prefix="WEB-INF/tags"/>
     <zipfileset file="${database.properties}" prefix="WEB-INF/classes"/>
     <zipfileset dir="${src.web.conf}" prefix="WEB-INF">
       <include name="*.tld"/>
     </zipfileset>
   </war>
 </target>
 
 <target name="build-both" 
         depends="package-stand-alone, package-web" 
         description="Compile both applications, 
                      without CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, without CVS versions of the MySQL connector and the JSTL"/>
 </target>
 <target name="build-all" 
         depends="stand-alone-complete, web-complete" 
         description="Compile both applications, 
                      using CVS versions of the MySQL connector and the JSTL">
   <echo message="Compiled both applications, using CVS versions of the MySQL connector and the JSTL"/>
 </target>


 <target name="download-servlet-jar" depends="dir" 
         description="Download the servlet JAR">
   <echo message="Downloading the servlet JAR"/>
   <get src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.4.jar"
        dest="${servlet24.jar}"
        verbose="true"/>
 </target>
 
 <target name="download-jsp-jar" depends="dir" 
         description="Download the JSP JAR">
   <echo message="Downloading the JSP JAR"/>
   <get src="http://www.ibiblio.org/maven/jspapi/jars/jsp-api-2.0.jar"
        dest="${jsp20.jar}"
        verbose="true"/>
 </target>
 
 
 <target name="check-docs" 
         description="Check that the documentation is up to date">
   <echo message="Checking that the documentation is up to date"/>
   <condition property="docs.notRequired">
     <and>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.zip">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
       <uptodate targetfile="${dist}/${appName}-${package.docs}.tar.gz">
         <srcfiles dir="${src}" includes="**"/>
       </uptodate>
     </and>
   </condition>
 </target>  
 
 <target name="javadocs" depends="dir,check-docs" 
         description="Generate Javadocs for the application" 
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="http://java.sun.ru/j2se/${javadoc.j2se.version}/docs/api"/>  
     <link href="http://java.sun.ru/j2ee/${javadoc.j2ee.version}/docs/api"/> 
   </javadoc>
 </target>
  
 <target name="javadocs-offline" depends="dir,check-docs"
         description="Generate Javadocs for the application, 
                      using offline package-list files"
         unless="docs.notRequired">
   <echo message="Generating Javadocs for the application, 
                  using offline package-list files"/>
   <javadoc destdir="${docs}/api" windowtitle="${javadoc.windowtitle}">
     <fileset refid="javadoc"/>
     <doctitle>
       ${javadoc.doctitle}
     </doctitle>
     <classpath refid="build.classpath"/>
     <link href="${javadoc.j2se.offline}" resolveLink="true"/>  
     <link href="${javadoc.j2ee.offline}" resolveLink="true"/> 
   </javadoc>
 </target>
 
 <target name="docs" depends="javadocs" 
         description="Assemble the documentation" unless="docs.notRequired">
   <echo message="Assembling the documentation"/>
   <copy todir="${docs}">
     <fileset dir="${src.shared.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/stand-alone">
     <fileset dir="${src.stand-alone.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
   <copy todir="${docs}/web">
     <fileset dir="${src.web.docs}">
       <include name="*.html"/>
     </fileset>
   </copy>
 </target>
 
 
 <target name="zip-docs" depends="docs" description="Zip the documentation">
   <echo message="Zipping the documentation"/>
   <zip destfile="${dist}/${appName}-${package.docs}.zip">
     
     <fileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </fileset>
     
     <fileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.docs}.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.zip" forceOverwrite="true"  
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-src" depends="zip-docs" 
         description="Zip the source and documentation together">
   <echo message="Zipping the source and documentation together"/>
   <zip destfile="${dist}/${appName}-src.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     <fileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-stand-alone" depends="package-stand-alone,zip-docs" 
         description="Zip the binary stand-alone distribution 
                      with the documentation">
   <echo message="Zipping the binary stand-alone distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.stand-alone}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <zipfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </zipfileset>
     <fileset dir=".">
       <include name="${mysql.jar}"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin-web" depends="package-web,zip-docs" 
         description="Zip the binary web distribution with the documentation">
   <echo message="Zipping the binary web distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-${package.web}-bin.zip">
     
     <zipfileset src="${dist}/${appName}-${package.docs}.zip"/>
     
     <fileset dir="${dist}">
       <patternset refid="bin.war"/>
     </fileset>
   </zip> 
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.zip" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="zip-bin" depends="zip-bin-stand-alone,zip-bin-web" 
         description="Zip the binary distribution with the documentation">
   <echo message="Zipping the binary distribution with the documentation"/>
   <zip destfile="${dist}/${appName}-bin.zip" 
        duplicate="preserve" update="true">
     <zipgroupfileset dir="${dist}" includes="*.zip"/>
   </zip>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.zip" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="zip-all" depends="zip-src,zip-bin" 
         description="Zip the binary and source distributions">
   <echo message="Zipped the binary and source distributions"/>
 </target>
 
 
 <target name="tar-docs" depends="docs" description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-${package.docs}.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.docs}.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-src" depends="tar-docs"
         description="Tar the documentation">
   <echo message="Tarring the documentation"/>
   <tar destfile="${dist}/${appName}-src.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-src.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-stand-alone" depends="package-stand-alone,tar-docs" 
         description="Tar the binary stand-alone distribution 
                      with the documentation">
   <echo message="Tarring the binary stand-alone distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>    </tar> 
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.stand-alone}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-web" depends="package-web,tar-docs" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar> 
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin" depends="tar-bin-stand-alone,tar-bin-web" 
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     
     <tarfileset dir="${docs.all.dir}">
       <patternset refid="docs.all"/>
     </tarfileset>
     
     <tarfileset dir="${docs.misc.dir}">
       <patternset refid="docs.misc"/>
     </tarfileset>
     
     <tarfileset dir="${src.files.dir}">
       <patternset refid="src.files"/>
     </tarfileset>
     
     <tarfileset dir="${dist}" prefix="lib">
       <patternset refid="bin.jar"/>
     </tarfileset>
     <tarfileset dir=".">
       <include name="${mysql.jar}"/>
     </tarfileset>
     
     <tarfileset dir="${dist}">
       <patternset refid="bin.war"/>
     </tarfileset>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 
 <target name="tar-bin-web-new" depends="package-web,tar-docs,zip-bin-web" 
         description="Tar the binary web distribution with the documentation">
   <echo message="Tarring the binary web distribution with the documentation"/>
   <unzip src="${dist}/${appName}-${package.web}-bin.zip" dest="${tmp}/web"/>
   <tar destfile="${dist}/${appName}-${package.web}-bin.tar.gz" 
        compression="gzip">
     <tarfileset dir="${tmp}/web"/>
   </tar>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-${package.web}-bin.tar.gz" 
             forceOverwrite="true" algorithm="SHA1"/>
 </target>
 
 <target name="tar-bin-new" 
         depends="zip-bin,tar-bin-stand-alone,tar-bin-web-new"
         description="Tar the binary distribution with the documentation">
   <echo message="Tarring the binary distribution with the documentation"/>
   <delete failonerror="false" includeemptydirs="true">
     <fileset dir="${tmp}" includes="**"/>
   </delete>
   <unzip src="${dist}/${appName}-bin.zip" dest="${tmp}"/>
   <tar destfile="${dist}/${appName}-bin.tar.gz" compression="gzip">
     <tarfileset dir="${tmp}"/>
   </tar>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true"/>
   <checksum file="${dist}/${appName}-bin.tar.gz" forceOverwrite="true" 
             algorithm="SHA1"/>
 </target>
 
 <target name="tar-all" depends="tar-src,tar-bin" 
         description="Tar the binary and source distributions">
   <echo message="Tarred the binary and source distributions"/>
 </target>
 
 
 


 <target name="ftp-docs" depends="zip-docs,tar-docs" 
         description="Place the documentation on FTP">
   <echo message="Placing the documentation on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-src" depends="zip-src,tar-src" 
         description="Place the source code on FTP">
   <echo message="Placing the source code on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.src.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}-src.*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp-bin" depends="zip-bin,tar-bin" 
         description="Place the binaries on FTP">
   <echo message="Placing the binaries on FTP"/>
   <ftp server="${ftp.server}"
        userid="${ftp.user}"
        password="${ftp.password}"
        remotedir="${ftp.bin.dir}"
        action="send"
        newer="true"
        timediffauto="true">
     <fileset dir="${dist}">
       <include name="${appName}*bin*"/>
     </fileset>
   </ftp>
 </target>
 
 <target name="ftp" description="Place everything on FTP">
   <echo message="Placing everything on FTP"/>
   <antcall target="ftp-docs"/>
   <antcall target="ftp-src"/>
   <antcall target="ftp-bin"/>
 </target>
 


 <target name="email-docs" depends="zip-docs,tar-docs" 
         description="E-mailing the documentation">
   <echo message="E-mailing the documentation"/>
   <mail from="${mail.from}"
         tolist="${mail.tolist}"
         mailhost="${mail.mailhost}"
         user="${mail.user}"
         password="${mail.password}"
         subject="${mail.subject}">
     <message>
       ${mail.message.docs}
     </message>
     <fileset dir="${dist}">
       <include name="${appName}-${package.docs}.*"/>
     </fileset>
   </mail>
 </target>
 
 
 <target name="deploy-copy-files" depends="copy-web" 
         description="Deploy the application by copying it to Tomcat">
   <echo message="Copying the expanded web application to CATALINA_HOME"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/webapps/${appName}">
     <fileset dir="${build.web.root}"/>
   </copy>
 </target>
 
 <target name="deploy-copy-war" depends="package-web" 
         description="Deploy the WAR by copying it to Tomcat">
   <echo message="Copying the WAR to CATALINA_HOME"/>
   <property environment="env"/>
   <copy file="${appName.war}" todir="${env.CATALINA_HOME}/webapps"/>
 </target>
 
 <target name="deploy-context" depends="copy-web" 
         description="Deploy the web application using a context XML file">
   <echo message="Deploying the web application using a context XML file"/>
   <property environment="env"/>
   <copy todir="${build.web.web-inf}" file="${src.web.conf}/web.xml"/>
   <copy todir="${env.CATALINA_HOME}/conf/Catalina/localhost" 
         file="${src.web.conf}/${appName}.xml"/>
 </target>
 
 <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
 
 <target name="deploy" depends="package-web" 
         description="Hot deploy the application">
   <echo message="Deploying the WAR to Tomcat"/>
   <deploy url="${manager.url}"
           username="${manager.user}"
           password="${manager.password}"  
           path="/${appName}"
           war="file:${appName.war}"
           update="true"/>
 </target>
 
 <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
 
 <target name="undeploy" description="Undeploy the application">
   <echo message="Undeploying the WAR"/>
   <undeploy url="${manager.url}"
             username="${manager.user}"   
             password="${manager.password}"
             path="/${appName}"/>
 </target>
 <target name="clean" description="Clean up the working directories">
   <echo message="Cleaning up"/>
   <delete dir="${build}"/>
 </target>

</project>


 </source>