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

Apache Sanselan is an effort undergoing incubation at the Apache Software
Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required
of all newly accepted projects until a further review indicates that the
infrastructure, communications, and decision making process have stabilized in a
manner consistent with other successful ASF projects. While incubation status is
not necessarily a reflection of the completeness or stability of the code, it
does indicate that the project has yet to be fully endorsed by the ASF.


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.
