<!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, 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>

