Apache Sling
============

Bringing Back the Fun!

Apache Sling is a web framework that uses a Java
Content Repository, such as Apache Jackrabbit, to store and manage content.

Sling applications use either scripts or Java servlets, selected based on
simple name conventions, to process HTTP requests in a RESTful way.

The embedded Apache Felix OSGi framework and console provide a dynamic
runtime environment, where  code and content bundles can be loaded, unloaded
and reconfigured at runtime.

As the first web framework dedicated to JSR-170 Java Content Repositories,
Sling makes it very simple to implement simple applications, while providing
an enterprise-level framework for more complex applications.

See http://sling.apache.org for more information.

Getting started
---------------

You need a Java 5 (or higher) JDK and Maven 2 (http://maven.apache.org/,
version 2.2.1 or higher) to build Sling.

Sling depends on artifacts and plugins available only in the Incubator Maven
repository at Apache. You can make this repository available to Maven by
adding the following profile in your ~/.m2/settings.xml configuration file:

    <?xml version="1.0"?>
    <settings>
      <profiles>
        <profile>
          <id>apache-incubation</id>
          <activation>
            <activeByDefault>true</activeByDefault>
          </activation>
          <repositories>
            <repository>
              <id>apache.incubating</id>
              <name>Apache Incubating Repository</name>
              <url>http://people.apache.org/repo/m2-incubating-repository</url>
            </repository>
          </repositories>
          <pluginRepositories>
            <pluginRepository>
              <id>apache.incubating.plugins</id>
              <name>Apache Incubating Plugin Repository</name>
              <url>http://people.apache.org/repo/m2-incubating-repository</url>
            </pluginRepository>
          </pluginRepositories>
        </profile>
      </profiles>
    </settings>

Once you have everything in place, run

    MAVEN_OPTS="-Xmx256M -XX:MaxPermSize=256M" mvn clean install

in this directory (on 64bit platforms you might want to use 512M instead
of 256M). This will build, test and install the Sling modules in your local
Maven repository.

Some modules might not be listed in the pom.xml found in this directory,
those won't be built by the above command. If you need one of these 
modules, run "mvn clean install" in the directory that contains its
pom.xml file.

To get started with Sling, start the launchpad/builder module,
see README.txt in that module's directory.

