<!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="Author" content="Malcolm Edgar"/>
        <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"/>
        <style type="text/css">
            th { text-align: left; }
            td { vertical-align: top; white-space: nowrap; }
            .indent { margin-left: 1em;}
        </style>
    </head>
    <body>

        <h1>Source Code</h1>

        Click source code is hosted in a SVN repository. You can checkout the code
        anonymously or as a committer.

        <ul>
            <li>
                Anonymous Access (http) -  <a class="external" target="_blank" href="http://svn.apache.org/repos/asf/click/">http://svn.apache.org/repos/asf/click/</a>
            </li>
            <li>
                Committer Access (https) -	 <a class="external" target="_blank" href="https://svn.apache.org/repos/asf/click/">https://svn.apache.org/repos/asf/click/</a>
            </li>
        </ul>

        <p/>
        When you want to checkout the source code, either checkout the trunk or
        a specific release.
        <p/>
        Trunk consists of the following:

<pre class="codeConfig" style="margin-left:3em;">
+--[click]                      Click Framework
|
+--[examples]                   Various example applications
|
+--[sandbox]                    Provides an area for committers to experiment with various features
|
+--[tools]                      Various tools for working with Click including ClickIDE </pre>

        <p/>
        To checkout the Click Framework from trunk run the command:

        <p/>
        <tt class="indent">
            svn co <a class="external" target="_blank" href="http://svn.apache.org/repos/asf/click/trunk/click/">http://svn.apache.org/repos/asf/click/trunk/click/</a>
        </tt>

        <p/>
        To checkout the 1.4.2 release run the command:

        <p/>
        <tt class="indent">
            svn co <a class="external" target="_blank" href="http://svn.apache.org/repos/asf/click/tags/click-1.4.2/">http://svn.apache.org/repos/asf/click/tags/click-1.4.2/</a>
        </tt>

        <p/>
        There is also a graphical view of the SVN repository provided by Fisheye:
        <a class="external" target="_blank" href="http://fisheye6.atlassian.com/browse/click">http://fisheye6.atlassian.com/browse/click</a>

        <p/>

        To build Click see the <a href="building.html">Building</a> topic for details.
    </body>
</html>

