<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!--
   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.
-->
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
        <meta name="description" lang="en" content="Apache Click Java web application framework"/>
        <meta name="keywords" lang="en" content="Apache Click, Click Framework, Java, JEE, J2EE, web application framework, open source"/>
        <title>Apache Click</title>
        <link rel="stylesheet" type="text/css" href="../help.css"/>
    </head>

    <body>

        <h1>Downloads</h1>

        Please select a release from the table below.

        <p/>
        
        <table cellspacing="1" cellpadding="8" style="border: 1px solid black;">
            <tbody><tr style="background-color: navy; color: white;">
                    <th align="center">Package</th>
                    <th align="center">Version</th>
                    <th align="center">Release date</th>
                    <th align="center">Supports</th>
                </tr>
                <tr>
                    <td><a target="_blank" class="external" href="http://sourceforge.net/project/showfiles.php?group_id=82095&package_id=181305&release_id=639119">
                        clickide-2.1.0</a></td>
                    <td>2.1.0</td>
                    <td>9/Nov/2008</td>
                    <td>Click 1.5 and Eclipse 3.4 / WTP 3.0.</td>
                </tr>
                <tr>
                    <td><a target="_blank" class="external" href="http://sourceforge.net/project/showfiles.php?group_id=82095&package_id=181305&release_id=581910">
                        clickide-2.0.0</a></td>
                    <td>2.0.0</td>
                    <td>5/Mar/2008</td>
                    <td>Click 1.4 and Eclipse 3.3 / WTP 2.0</td>
                </tr>
                <tr>
                    <td><a target="_blank" class="external" href="http://sourceforge.net/project/showfiles.php?group_id=82095&package_id=181305&release_id=515778">
                        clickide-1.7.0</a></td>
                    <td>1.7.0</td>
                    <td>13/Jun/2007</td>
                    <td>Click 1.3.1 and Eclipse 3.2 & WTP 1.5</td>
                </tr>
                <tr>
                    <td><a target="_blank" class="external" href="http://sourceforge.net/project/showfiles.php?group_id=82095&package_id=181305">
                        archives</a>
                    </td>
                    <td></td>
                    <td></td>
                </tr>
            </tbody>
        </table>

        <p/>

        <b>Note:</b> these releases are hosted at <a target="_blank" class="external" href="http://sourceforge.net/">http://sourceforge.net/</a>
        and is not endorsed by nor affiliated with the Apache Software Foundation.

    </body>
</html>
