
                         Project Maintanance Howto
                         -------------------------
                     
This document introduces newcomers to the management and maintenance of 
java project hosted under xml.apache.org.

Each project is required to use Ant as build tool and to be coherent with the
rest of the build systems of the other projects, so that nightly builds and
distribution creation can be done automatically without per-project scripts.

This implies it is *very* important that properties names are not changed
but kept consistent with the other projects.

Distribution Creation
---------------------

For creating a distribution the following steps must be done:

 1) modify build.xml with the distribution version
 2) run the build script with target "dist-zip" and "dist-tgz"
 3) test the distributions
 4) commit the version change to CVS
 5) tag the release on CVS (cvs rtag <tag> <module>, e.g., 
    cvs rtag 1_0beta2 xml-batik)
 6) connect to xml.apache.org with your account
 7) scp the distributions under /www/xml.apache.org/dist/[project]/
    e.g., scp batik-1.0beta2.zip vhardy@xml.apache.org:/www/xml/apache.org/dist/batik/

Site Creation
-------------

For creation the web site, the following steps must be done:

[Note: due to JVM font-rendering problems, this is best done on a windows machine]

 1) make sure you checked out the module "xml-site" in the same directory
    as your project module
 2) run the build script with target "site"
 3) commit the xml-site/targets/[project] directory
 4) connect to xml.apache.org with your account
 5) execute "cd /www/xml.apache.org/[project]"
 6) execute "cvs update"
 
[NOTE: you must have commit access on xml-site to be able to do this]