How to build and publish the website:

 1. Install Apache Maven 2.0.6+ and make its binary 'mvn' available on your PATH.
 2. run "mvn -U -Plocal,parent clean install site:stage -DstagingDirectory={path}".
    - the -U will force mvn to update plugins (check new installed skin when building
      the project site.
    - the -Plocal will force mvn to not lookup remote maven repositories for standard
      dependencies.
    - the -Pparent will add the local "stage" repository to the build (this is needed
      so that the site generation for the parent folder will find the default maven
      skin (this is only a workaround: the default skin is not used).
    - install is needed because the site generated in the project module will search
      for an installed skin.
 3. Test the built site in your browser from the {path} folder
 4. If everything looks OK, copy the {path} folder to the checkout of james/site/trunk/www
    folder.
 5. If you are on windows make sure endlines are LF only
    hint: running "ant" from james/site/trunk/ will do this (this will take a lot).
 6. Commit changes to SVN
 7. Review generated pages on svn.apache.org/repos/asf/james/site/trunk/www
 8. svn-up on minotaur
 9. Wait for the changes to replicate to the Apache web server or setup 140.211.11.10:80 as 
    a proxy to review the changes (described here: http://www.apache.org/dev/project-site.html) 

The logical tree of the poms is the following

james-parent (parent/pom.xml) is the main parent.
|- maven-skin (maven-skin/pom.xml) is our skin
'- james-project (pom.xml)
   '- james-server-root (server/pom.xml) is the parent pom for JAMES server.
      '- james-server-2.2.0 (server/2.2.0/pom.xml) is the static website for old 2.2.0 documentation.

The "james-parent" artifact is needed because "james-project" uses the maven-skin but they needed
to share some common data so they cannot depend on each-other but on a third "parent" pom.
