Apache Sling JSP Scripting

Support for JSP scripting.

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

This component uses an Apache Maven 3 (http://maven.apache.org/) build
environment. It requires a Java 6 JDK (or higher) and Maven (http://maven.apache.org/)
3.0.5 or later. We recommend to use the latest Maven version.

If you have Maven installed, you can compile and
package the jar using the following command:

    mvn package

See the Maven documentation for other build features.

The latest source code for this component is available in the
Subversion (http://subversion.tigris.org/) source repository of
the Apache Software Foundation. If you have Subversion installed,
you can checkout the latest source using the following command:

    svn checkout http://svn.apache.org/repos/asf/sling/trunk/scripting/jsp

See the Subversion documentation for other source control features.

