#=====================================================================
#  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.
#=====================================================================

Welcome to Apache Geronimo
==========================

To build you will need:

 * JDK 6.0+ (J2SE 1.6.0+) (http://java.sun.com/j2se/1.6.0)
 * Maven 2.0.10+ (http://maven.apache.org)

For detailed instructions please see:

    http://cwiki.apache.org/GMOxDEV/building-apache-geronimo.html


Building Geroniomo
==================

To build all changes incrementally:

    mvn install

To perform clean builds, which are sometimes needed after some changes to the 
source tree:

    mvn clean install


Testing the Build
=================

The end result of a successful build will be a set of functional distributions.
To test the build, simply start the server:

    mvn -Ptools geronimo:start
    ...
    CTRL-C or from another terminal: mvn -Ptools geronimo:stop


Generating a Site
=================

There are several really annoying bugs in the site builds, mostly due to the
maven-clover-plugin.

To build the site you need to first, build as in:

    mvn clean install

And then:

    mvn site -Denv=site

If you attempt to run `mvn clean install site` strange errors are bound to occur
which will drive you crazy and you may start pulling your hairout... so its not
recommended.

It is important to specify `-Denv=site` to limit the modules which are processed,
as many of the configs modules will freak-out.


