<?xml version="1.0"?>
<!--

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You 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>Apache Commons JCI - Downloads</title>
      <author email="dev@commons.apache.org">Commons Development Team</author>
   </properties>

   <body>
      <section name="Releases">

         <p>The following releases are available:</p>

         <h1>Version 1.1 </h1>
         <p>
             The current trunk and not released yet. Access to the source tree to see the latest and
             greatest code is possible through <a href="source-repository.html">anonymous SVN access</a>.
         </p>

         <h1>Version 1.0, 18.06.2007</h1>
         <p>
             JCI is available through <a href="http://repo1.maven.org">maven repository</a> mirrors.
             Traditional release distributions are are available from the
             <a href="http://commons.apache.org/jci/download_jci.cgi">JCI download page</a>.
         </p>
<!--
         <p>
            Older releases are retained by the Apache Software Foundation but are 
            moved into a <a href="http://archive.apache.org/dist/commons/jci/">
            special archive area</a>.
         </p>
         <p>
           <a href="http://people.apache.org/builds/commons/nightly/commons-jci/">
           Nightly source and binary drops</a> are available.
         </p>
-->
      </section>

<!--
      <section name="Release Candidate">
         <p>
            Release candidates for the upcoming 1.1 release can be downloaded 
            <a href="http://people.apache.org/~tcurdt/jci/rc/">here</a>.
         </p>
         <p>
            Please review and report any problem on the 
            <a href="mail-lists.html">mailing list</a>.
         </p>
         <p>
            Planet release target is 10 April 200x.
         </p>
      </section>
-->
   </body>
</document>
