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


<!-- start the processing -->
    <!-- ====================================================================== -->
    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
    <!-- Main Page Section -->
    <!-- ====================================================================== -->
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

                                                    <meta name="author" value="JSPWiki Developer Team">
            <meta name="email" value="jspwiki-dev@incubator.apache.org">
            
           
            
            
            
            
            
            <title>Apache JSPWiki - Apache JSPWiki</title>

                        
                
        <link rel="stylesheet" type="text/css" href="site.css"/>
        </head>

        <body>        
            <table  width="100%" cellspacing="0">
                <!-- TOP IMAGE -->
                <tr>
                    <td align='LEFT'>
                    <table><tr><td>
                    </td>
                    </td></tr></table>
                    </td>
                    <td align='RIGHT'>
                    <a href="http://incubator.apache.org/jspwiki">
                    <img src="http://harmony.apache.org/images/apache-incubator-logo.png"
                    	alt="$project.getChild("logo").getText()" /></a>                    
                    </td>
                </tr>
            </table>
            <table width="100%" cellspacing="4">
                <tr><td colspan="2">
                    <hr noshade="" size="1"/>
                </td></tr>

                <tr>
                    <!-- LEFT SIDE NAVIGATION -->
                    <td class="menuItem" width="20%" nowrap="true">

                    <!-- special ACon Logo - leave here for next time
                    <a href="http://www.us.apachecon.com/">
                        <img src="http://www.apache.org/ads/ApacheCon/240x120-2006-us.gif"
                             alt="ApacheCon US 2006" />
                    </a> -->

                   <!-- regular menu -->

                    
    <!-- ============================================================ -->

                <p class="menuItem"><strong>General</strong></p>
        <ul>
                    <li class="menuItem">    <a href="./index.html">Home</a>
</li>
           
                        
                    <li class="menuItem">    <a href="./license.html">License</a>
</li>
           
                        
                    <li class="menuItem">    <a href="http://www.apache.org/">ASF</a>
</li>
           
                        
        
        </ul>
            <p class="menuItem"><strong>Community</strong></p>
        <ul>
                    <li class="menuItem">    <a href="./contributors.html">Committers</a>
</li>
           
                        
                    <li class="menuItem">    <a href="./mailing.html">Mailing Lists</a>
</li>
           
                        
                    <li class="menuItem">    <a href="./get-involved.html">Get Involved</a>
</li>
           
                        
                    <li class="menuItem">    <a href="http://www.jspwiki.org/">Wiki</a>
</li>
           
                        
        
        </ul>
            <p class="menuItem"><strong>Development</strong></p>
        <ul>
                    <li class="menuItem">    <a href="./svn.html">Source Code</a>
</li>
           
                        
                    <li class="menuItem">    <a href="http://issues.apache.org/jira/browse/JSPWIKI">Issue Tracking</a>
</li>
           
                        
        
        </ul>
            <p class="menuItem"><strong>Documentation</strong></p>
        <ul>
                    <li class="menuItem">    <a href="http://people.apache.org/~metskem/JSPWiki/javadoc/">Javadoc from SVN trunk</a>
</li>
           
                        
                    <li class="menuItem">    <a href="http://doc.jspwiki.org/2.8/">Documentation Wiki</a>
</li>
           
                        
        
        </ul>
                        </td>
                    <td width="80%" valign="top"><a name="top"></a>
                                                                    <h1>
      <a name="Source code access">Source code access</a>
    </h1>
                        <p>You may access the Apache JSPWiki source code from the Apache SVN.</p>
                                <p>The repository address for read-only access is:
</p>
                                <pre>
  <a class="external" href="http://svn.apache.org/repos/asf/incubator/jspwiki/" rel="nofollow">http://svn.apache.org/repos/asf/incubator/jspwiki/</a>
</pre>
                                <p>The repository address for people with commit access is:
</p>
                                <pre>
  https://svn.apache.org/repos/asf/incubator/jspwiki/
</pre>
                                <p>It is strongly recommended you only check out the trunk or the tag you're interested in:
</p>
                                <pre>
  &gt; svn checkout https://svn.apache.org/repos/asf/incubator/jspwiki/trunk JSPWiki
</pre>
                                <p>You can use this url in a web-browser to see what subdirectories are available 
before choosing one to actually check out.
</p>
                <p><a href="#top">Back to top</a></p>
                                                <h1>
      <a name="Branches">Branches</a>
    </h1>
                        <p>JSPWiki branches are named in ALL CAPS, and are named <tt>JSPWIKI_X_Y_BRANCH</tt>.  Whenever
a stable release is cut, the code is branched and named accordingly. For example, you may
access the JSPWiki 2.8 code branch from</p>
                                <pre>
 http://svn.apache.org/repos/asf/incubator/jspwiki/branches/JSPWIKI_2_8_BRANCH/
</pre>
                                <p>Future stable releases are then cut from the stable branch, and have an increasing minor revision
(e.g. 2.8.1, 2.8.2, etc).</p>
                <p><a href="#top">Back to top</a></p>
                                                <h1>
      <a name="Tags">Tags</a>
    </h1>
                        <p>Similarly, all releases are tagged when made.  The naming convention is simple: jspwiki_x_y_z_n,
where x,y and z are revision numbers, and n is a release designator (alpha,beta,incubating).
For example, you may check out the 2.8.2 stable release by using the following URL:</p>
                                <pre>
 http://svn.apache.org/repos/asf/incubator/jspwiki/tags/jspwiki_2_8_2/
</pre>
                <p><a href="#top">Back to top</a></p>
                                                <h1>
      <a name="European mirror">European mirror</a>
    </h1>
                        <p>If you are located in Europe, you are highly encouraged to use the European mirror,
as this will lower the load on the US server, and will also be considerably faster for you.
</p>
                                <p>The mirror is synced every few minutes, so in practice you won't see a difference 
in the repository contents. The only time this might be a problem is if you do an 
"svn update" right after an "svn commit", but a better workflow would be to update 
before committing.
</p>
                                <p>So, you can also grab code from svn repo also from: 
</p>
                                <pre>http://svn.eu.apache.org/repos/asf/incubator/jspwiki/
</pre>
                                <p>or (people with commit access):</p>
                                <pre>https://svn.eu.apache.org/repos/asf/incubator/jspwiki/
</pre>
                <p><a href="#top">Back to top</a></p>
                    
                                                            </td>
                </tr>

                <!-- FOOTER -->
                <tr><td colspan="2">
                    <hr noshade="" size="1"/>
                </td></tr>
                <tr><td colspan="2">
                    <div class="special"><em>
                    Copyright &#169; 2009, The Apache Software Foundation
                    </em></div>
                </td></tr>
            </table>
        </body>
    </html>
<!-- end the processing -->























