<?xml version="1.0"?>
<!--
   Copyright 2003-2004 The Apache Software Foundation

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<document>
  <properties>
    <title>Building</title>
    <author email="dev@commons.apache.org">Apache Commons Development Team</author>
    <author email="rwaldhoff@apache.org">Rodney Waldhoff</author>
  </properties>

  <body>
    <section name="Building Functor">
      <p>
         To build Commons Functor from scratch, you must first obtain the source, either
         from 
         <a href="./cvs-usage.html">the SVN server</a>
         or from
         <a href="http://cvs.apache.org/builds/jakarta-commons/nightly/commons-functor/">a source snapshot</a>.
      </p>
      <p>
         Commons Functor can be built using <a href="http://jakarta.apache.org/turbine/maven/">Maven</a>
         or <a href="http://ant.apache.org/">Ant</a>.  
         <!--
         The <a href="http://jakarta.apache.org/gump">Gump</a>
         continuous integration process attempts to build Functor several times a day (against the built-from-scratch
         versions of all of it's dependencies), and notifies the development team if it does not succeed. 
         You can 
         <a href="http://cvs.apache.org/builds/gump/latest/commons-functor.html">view the status of the latest gump build here</a>.
         -->
      </p>
      <subsection name="Building with Maven">
        <ol>
          <li>
            Install a recent Maven release.  Maven is available from 
            <a href="http://maven.apache.org/">http://maven.apache.org/</a>.
          </li>
          <li>
            With Maven installed, you should be able to run an arbitrary maven goal from the root Commons Functor 
            directory.  Use <code>maven -g</code> for a list of avaiable goals.  Commonly used goals include 
            <code>clean</code>, <code>test</code>, <code>dist</code>, <code>site</code> and <code>clover</code>.
          </li>
        </ol>
      </subsection>      
      <subsection name="Building with Ant">
        <ol>
          <li>
            Install a recent Ant release.  Ant is available from 
            <a href="http://ant.apache.org/">http://ant.apache.org/</a>.
          </li>
          <li>
            Obtain JUnit 3.8.1 or later.  JUnit is available from 
            <a href="http://junit.org/">http://junit.org/</a>.
            Note that JUnit is a needed to compile and run the unit tests,
            but is not needed at runtime by clients of Commons Functor.
          </li>
          <li>
            Copy the <code>build.properties.sample</code> file found in the 
            root Commons Functor directory to a file named <code>build.properties</code>.
            Modify this file to provide the location of the <code>junit.jar</code> file.
            (Note that Commons Functor supports a "shared" <code>build.properties</code> 
            file placed either at <code>../build.properties</code> or
            <code>../../jakarta-commons/build.properties</code>, or both, relative to the 
            root Commons Functor directory.)
          </li>
          <li>
            You may run <code>ant -projecthelp</code> to obtain a list of the available Ant targets.
            Commonly used targets include <code>clean</code>, <code>test</code>, <code>compile</code>,
            <code>dist</code>, and <code>javadoc</code>.            
          </li>
        </ol>
      </subsection>      
    </section>
  </body>
</document>
