Apache Sling Resource Editor 

The Apache Sling Resource Editor allows to edit Apache Sling content based on the Sling API. 

++ Deploy Binaries ++
o Install Apache Sling (see http://sling.apache.org/site/getting-and-building-sling.html)
o Navigate to the OSGi Repository page of the management console within your running Sling instance (/system/console/obr)
o If the OSGi Repository page is not there, install `http://search.maven.org/#artifactdetails|org.apache.felix|org.apache.felix.webconsole.plugins.obr|1.0.2|bundle` at `system/console/bundles` to make it available.
o Add the OSGi repository URL (http://www.jcrbrowser.org/sling/obr/repository.xml). 
o Search for the "Apache Sling Resource Editor" resource and navigate to the latest version.
o Click "Deploy and Start".
o At /system/console/bundles you will see that the Resource Editor bundle is active.
o Open "/.reseditor.html" at your server to see the web application.

++ Build the Sling Resource Editor ++
o Deploy the binaries as described above. 
o Download and install Git from http://www.git-scm.com/download
o Call `git clone git://github.com/sandroboehme/resourceeditor.git` in a shell. It will create the resourceeditor subfolder containing the source. 
o Change to the resourceeditor subdirectory and call `mvn clean package` there to install the sources into the running Sling instance.

++ Develop with the Sling Resource Editor ++
o Use `mvn install` to deploy changes of Java classes
o To have frontend changes automatically deployed call `mvn install`
o To have the less sources automatically compiled call `mvn lesscss:compile -Dlesscss.watch=true`

