<?xml version="1.0"?>
<!--
   Copyright 2006 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>Downloads</title>
   </properties>

   <body>
      <section name="Download Chain">
         
         <subsection name="Releases">
            <p>Download the <a href="http://jakarta.apache.org/site/downloads/downloads_commons-chain.cgi">Latest Release</a>
               of Commons Chain.
            </p>
         </subsection>

         <subsection name="Nightly Builds">
            <p>
               <a href="http://people.apache.org/builds/jakarta-commons/nightly/commons-chain/">Nightly Builds</a>
               are built once a day from the current SVN HEAD. This is (nearly) the latest code and so should
               be treated with caution.
            </p>
         </subsection>

         <subsection name="Archived Releases">
            <p>
               Older releases are retained by the Apache Software Foundation but are
               moved into a
               <a href="http://archive.apache.org/dist/jakarta/commons/chain/">
             special archive area</a>.
            </p>
         </subsection>

      </section>

   </body>
</document>
