<project name="Generic Webapp" default="compile" basedir=".">

<!--
        This is a generic build.xml file for Ant that can be used to develop
        any web application that conforms to the following requirements:

        - Web sources appear in the directory specified by the "webapp.web"
          property, in exactly the hierarchy to be present in the created
          web application archive.

        - Java sources (if any) appear in the directory specified by the
          "webapp.src" property, which will be compiled into the
          "WEB-INF/classes" directory of the resulting web application.

        - You must specify a "servlet.jar" property that defines the path
          of the servlet API classes you will compile against.

        - If you want to copy Struts libraries and TLD files to your web
          application, set the "struts.libs" property to the pathname of a
          directory containing struts.jar and the associated *.tld files.

        - If you want to copy additional JAR files into the WEB-INF/lib
          directory of your web app, set the "webapp.libs" property to the
          pathname of a directory containing the JAR files to be copied.

-->


<!-- ========== Prerequisite Properties =================================== -->

<!--
        These properties MUST be set on the "ant" command line, the "antrc"
        properties file in your home directory, or from settings in a superior
        build.xml script, if you wish to take advantage of the corresponding
        functionality.

        compile.classpath             The class path containing external
                                      JAR files and directories required for
                                      compiling this web application.  Note
                                      that struts.jar will automatically be
                                      added if "struts.lib" is defined, and
                                      dependent JAR files will be added if
                                      "webapp.libs" is defined.

        build.home                    Base directory into which we are building
                                      the Struts components.

        commons-beanutils.jar         (required).  The path to the JAR file
                                      of the Jakarta Commons Beanutils
                                      package (version 1.0 or later).

        commons-collections.jar       (required).  The path to the JAR file
                                      of the Jakarta Commons Collections
                                      package (version 1.0 or later).

        commons-digester.jar          (required).  The path to the JAR file
                                      of the Jakarta Commons Digester
                                      package (version 1.0 or later).

        commons-fileupload.jar        (required).  The path to the JAR file
                                      of the Jakarta Commons FileUpload
                                      package (version 1.0 or later)

        commons-lang.jar              (required).  The path to the JAR file
                                      of the Jakarta Commons Lang
                                      package (version 1.0 or later).

        commons-logging.jar           (required).  The path to the JAR file
                                      of the Jakarta Commons Logging
                                      package (version 1.0 or later).

        commons-validator.jar         (required).  The path to the JAR file
                                      of the Jakarta Commons VALIDATOR
                                      package (version 1.0 or later).

        servlet.jar                   MUST be set to the pathname of the
                                      servlet API classes you wish to
                                      compile against.

        struts.libs                   If specified, must be the pathname of a
                                      directory from which "struts.jar" will be
                                      copied to your WEB-INF/lib directory, and
                                      from which all TLD files will be copied
                                      to your WEB-INF directory.  Also, the
                                      struts.jar file will automatically be
                                      added to your compile classpath.

        webapp.libs                   If specified, must be the pathname of a
                                      directory from which all available
                                      "*.jar" files are copied to the web
                                      application's WEB-INF/lib directory.
                                      Also, any JAR files found here will
                                      automatically be added to your compile
                                      classpath.

        webapp.name                   MUST be set to the base name of the web
                                      application archive file that will be
                                      created for this web application.

        webapp.suppress               Set this property to an arbitrary value
                                      (such as "true") if you do NOT want the
                                      source code for your web application
                                      copied to the WEB-INF/src directory.

        webapp.war                    If specified, overrides the default name
                                      of the web application archive file to be
                                      created for this webapp.  Default value
                                      is "struts-${webapp.name}.war".

-->

<property name="build.home"            value="target" />
<property name="servlet.jar"          value="../jakarta-servletapi/lib/servlet.jar"/>



<!-- ========== Initialization Properties ================================= -->


<!--
        These property values may optionally be overridden with property
        settings from an "ant" command line, the "antrc" properties file
        in your home directory, or from settings in a superior build.xml
        script.
-->



<!-- Should Java compilations set the debug compiler option? -->
<property name="compile.debug"         value="true" />

<!-- Should Java compilations set the deprecation compiler option? -->
<property name="compile.deprecation"   value="false" />

<!-- Should Java compilations set the optimize compiler option? -->
<property name="compile.optimize"      value="true" />

<!-- The base directory for distribution targets -->
<property name="dist.home"             value="dist" />

<!-- The source directory for Java compilations related to this webapp -->
<property name="webapp.src"            value="src/${webapp.name}" />

<!-- The version number of this particular web application -->
<property name="webapp.version"        value="1.0" />

<!-- The name of the web application archive file to be produced -->
<property name="webapp.war"            value="${webapp.name}.war" />

<!-- The source directory for copying static web resources and files -->
<property name="webapp.web"            value="web/${webapp.name}" />


<!-- ========== Derived Properties ======================================== -->


<!--
        These property values are derived from values defined above, and
        generally should NOT be overridden by command line settings
-->

<!-- The target directory for building the packed web application -->
<property name="webapp.dist"           value="${dist.home}/webapps" />

<!-- The target directory for building the unpacked web application -->
<property name="webapp.target"         value="${build.home}/${webapp.name}" />

<!-- The class path used for compiling this library -->
<path id="classpath">
  <pathelement location="${commons-beanutils.jar}"/>
  <pathelement location="${commons-collections.jar}"/>
  <pathelement location="${commons-digester.jar}"/>
  <pathelement location="${commons-fileupload.jar}"/>
  <pathelement location="${commons-lang.jar}"/>
  <pathelement location="${commons-logging.jar}"/>
  <pathelement location="${commons-pool.jar}"/>
  <pathelement location="${commons-validator.jar}"/>
  <pathelement location="${jdbc20ext.jar}"/>
  <pathelement location="${servlet.jar}"/>
  <pathelement location="${struts.libs}/struts.jar"/>
  <pathelement location="${struts.libs}/struts-el.jar"/>
  <pathelement location="${webapp.libs}"/>
  <pathelement path="${compile.classpath}"/>
</path>


<!-- ========== Executable Targets ======================================== -->


<!--
        The "init" target evaluates "available" expressions as necessary
        to modify the behavior of this script.
-->
<target name="init">

  <echo    message="Processing webapp ${webapp.name}"/>

  <!-- Do we need to copy dependent libraries? -->
  <available property="copy.libs"        file="${webapp.libs}" />

  <!-- Do we need to compile the Java sources for this web application? -->
  <available property="webapp.compile"   file="${webapp.src}" />

  <!-- Should we copy Struts library and TLD files? -->
  <available property="webapp.struts"    file="${struts.libs}" />

</target>


<!--
        The "prepare" target creates a directory structure in the build target
        area for the unpacked files associated with this web application
-->
<target name="prepare" depends="init"
        description="Prepare target directory">
  <echo    message="Processing webapp ${webapp.name}"/>
  <mkdir   dir="${webapp.target}" />
  <mkdir   dir="${webapp.target}/WEB-INF" />
  <mkdir   dir="${webapp.target}/WEB-INF/classes" />
  <mkdir   dir="${webapp.target}" />
</target>


<!--
        The "libs" target copies specified library JAR files (if any) from the
        "${webapp.libs} directory into the WEB-INF/lib directory of this app.
-->

<target name="libs" depends="prepare" if="copy.libs"
        description="Copy dependent libraries">
  <echo    message="Processing webapp ${webapp.name}"/>
  <mkdir   dir="${webapp.target}/WEB-INF/lib" />
  <copy  todir="${webapp.target}/WEB-INF/lib">
    <fileset dir="${webapp.libs}" includes="*.jar"/>
  </copy>
</target>


<!--
        The "source" target copies the Java source code of your web application
        into the build target area, IF AND ONLY IF the "webapp.source"
        property has been set to an arbitrary value.
-->

<target name="source" depends="prepare" if="webapp.compile"
        unless="webapp.suppress"
        description="Copy Java sources">
  <echo    message="Processing webapp ${webapp.name}"/>
  <mkdir   dir="${webapp.target}/WEB-INF/src"/>
  <copy  todir="${webapp.target}/WEB-INF/src">
    <fileset dir="${webapp.src}"/>
  </copy>
</target>


<!--
        The "struts" target copies the Struts library JAR file and TLDs
        into the build target area.
-->
<target name="struts" depends="prepare" if="webapp.struts"
        description="Copy Struts library and TLD files">
  <echo    message="Processing webapp ${webapp.name}"/>
  <copy  todir="${webapp.target}/WEB-INF">
    <fileset dir="${struts.libs}" includes="*.tld"/>
  </copy>
  <mkdir   dir="${webapp.target}/WEB-INF/lib"/>
  <copy  todir="${webapp.target}/WEB-INF/lib">
    <fileset dir="${struts.libs}" includes="commons-*.jar"/>
    <fileset dir="${struts.libs}" includes="jakarta-oro.jar"/>
    <fileset dir="${struts.libs}" includes="struts.jar"/>
    <fileset dir="${struts.libs}" includes="struts-el.jar"/>
  </copy>
</target>

<target name="jstl" description="Copy JSTL library and TLD files">
 <echo message="Processing webapp ${webapp.name}"/>
  <copy  todir="${webapp.target}/WEB-INF">
    <fileset dir="${struts.libs}" includes="*.tld"/>
  </copy>
  <mkdir   dir="${webapp.target}/WEB-INF/lib"/>
  <copy  todir="${webapp.target}/WEB-INF/lib">
    <fileset dir="${struts.libs}" includes="jstl.jar"/>
    <fileset dir="${struts.libs}" includes="standard.jar"/>
  </copy>
</target>

<!--
        The "static" target copies the static web resources portion of your
        web application source into the build target area.
-->
<target name="static" depends="prepare,source,libs,struts,jstl"
        description="Copy static files">
  <echo    message="Processing webapp ${webapp.name}"/>
  <copy  todir="${webapp.target}">
    <fileset dir="${webapp.web}"/>
  </copy>
</target>


<!--
        The "compile" target compiles the Java source code of your web
        application, if and only if the specified source directory
        actually exists.
-->
<target name="compile" depends="static" if="webapp.compile"
        description="Compile Java sources">
  <echo    message="Processing webapp ${webapp.name}"/>
  <echo    message="struts.libs=${struts.libs}"/>
  <javac  srcdir="${webapp.src}"
         destdir="${webapp.target}/WEB-INF/classes"
           debug="${compile.debug}"
     deprecation="${compile.deprecation}"
        optimize="${compile.optimize}">
    <classpath refid="classpath"/>
  </javac>
  <copy    todir="${webapp.target}/WEB-INF/classes">
    <fileset dir="${webapp.src}">
      <exclude name="**/*.java"/>
    </fileset>
  </copy>
</target>



<!--
        The "dist" target creates a web application archive containing
        your completed web application, suitable for deployment on any
        compatible servlet container.
-->
<target name="dist" depends="compile"
        description="Create web application archive">
  <echo    message="Processing webapp ${webapp.name}"/>
  <jar  jarfile="${webapp.dist}/${webapp.war}"
        basedir="${webapp.target}"/>
</target>


<!--
        The "clean" task deletes any created directories that have resulted
        from running any of the other targets in this script.
-->

<target name="clean"
        description="Clean build and distribution directories">
  <echo    message="Processing webapp ${webapp.name}"/>
  <delete   dir="${webapp.target}" />
  <delete  file="${webapp.dist}/${webapp.war}"/>
</target>


</project>
