=============================================================
Welcome to Apache Sanselan  <http://sanselan.apache.org/>
=============================================================

License (see also LICENSE)
==============================

Collective work: Copyright 2007-2008 The Apache Software Foundation.

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.


Getting Started
===============

Mailing Lists
-------------

To get involved with the Apache Sanselan project, start by having a
look at our website (link at top of page) and join our mailing
lists by sending an empty message to

   sanselan-dev-subscribe     :at: incubator.apache.org
and
   sanselan-commits-subscribe :at: incubator.apache.org

and the dev mailing list archives can be found at

   http://incubator.apache.org/mail/sanselan-dev/


Downloading
-----------

The Sanselan source code is available via Subversion at

   https://svn.apache.org/repos/asf/incubator/sanselan/trunk

and anonymous access is available at

   http://svn.apache.org/repos/asf/incubator/sanselan/trunk

or with ViewVC at

   http://svn.apache.org/viewvc/incubator/sanselan/trunk/

To checkout the main Sanselan source tree, run

   svn checkout http://svn.apache.org/repos/asf/incubator/sanselan/trunk/sanselan

Once you have a copy of the source code tree, you can use Apache Maven

   http://maven.apache.org/

to build the project. You should use Maven 2 to build Sanselan.
The minimal command to build, test, and package all the main Sanselan
components is:

   mvn install

For more instructions, please see the documentation at:

   http://sanselan.apache.org/doc/building.html

Credits
=======

See http://sanselan.apache.org/team-list.html for the list of 
Sanselan committers and main contributors.
