<!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="JSPWiki contributors">JSPWiki contributors</a>
    </h1>
                        <p>
       The current JSPWiki committer list:
    </p>
                                <ul>
       <li>Dirk Frederickx</li>
       <li>Florian Holeczek</li>
       <li>Janne Jalkanen</li>
       <li>Andrew Jaquith</li>
       <li>Harry Metske</li>
       <li>Juan Pablo Santos</li>
       <li>Christoph Sauer</li>
    </ul>
                                <p>As esteemed mentors we have:</p>
                                <ul>
       <li>Craig Russell</li>
    </ul>
                                <p>And, of course, all the fine people of the jspwiki-dev mailing list!</p>
                <p><a href="#top">Back to top</a></p>
                                                <h1>
      <a name="PPMC">PPMC</a>
    </h1>
                        <p>
      The Podling Project Management Committee consists of
   </p>
                                <ul>
       <li>Dirk Frederickx</li>
       <li>Florian Holeczek</li>
       <li>Janne Jalkanen</li>
       <li>Andrew Jaquith</li>
       <li>Harry Metske</li>
       <li>Juan Pablo Santos</li>
       <li>Craig Russell</li>
   </ul>
                <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 -->























