This is an old version of the Sling website, see the site conversion page for more info.
Apache Incubator

In issue SLING-83 Betrand proposes to improve our project layout to make it easier to developers to find their way through the projects making up Sling. On this page, I would like to propose a new structure for further discussion.

[ Naming Conventions ] [ Top Level Projects ] [ Sling Commons Projects ] [ JCR Related Projects ] [ Sling Launcher Projects ] [ Maven Plugin Projects ] [ microsling Projects ] [ OSGi Projects ] [ Scripting Engine Projects ] [ Sling Main Projects ] [ Removed and Replaced Projects ]

Naming Conventions

Projects

The final artifact name - pom.build.finalName - is the Maven 2 default consisting of the artifactId and the version. The Bundle-SymbolicName is defined in the parent pom as being just the artifactId.

Exceptions to artifactId rule

Java Packages

Each project consists of a series of Java Packages. To prevent collision between projects with respect to Java Packages, each project has a root Java Package which is the fully qualified Maven 2 project name consisting of the artifactId such that the Bundle symbolic name and the root Java Package are the same.

Top Level Projects

Status Who Folder Artifact ID Description
OK fmeschbe parent org.apache.sling.sling Parent Project
OK fmeschbe api org.apache.sling.api Core API

The Sling parent project and the Sling API projects are the only remaining projects at the top level of the repository.

Sling Commons Projects

Status Who Folder Artifact ID Description
OK fmeschbe commons/json org.apache.sling.commons.json JSON support from json.org
OK fmeschbe commons/mime org.apache.sling.commons.mime Generalized MIME type mapping service

These projects in the commons folder contain common functionality used by multiple other projects and may be either referred to by way of OSGi package import or by inlining the respective packages/classes into the bundle.

JCR Related Projects

Status Who Folder Artifact ID Description
OK fmeschbe jcr/api org.apache.sling.jcr.api Bundle-ized JCR/Jackrabbit API + Session Pooling
OK fmeschbe jcr/resource org.apache.sling.jcr.resource JCR based ResourceResolver, Mapping (formerly the sling-content-jcr bundle in the content folder)
OK fmeschbe jcr/classloader org.apache.sling.jcr.classloader JCR based ClassLoader
OK fmeschbe jcr/jackrabbit-client org.apache.sling.jcr.jackrabbit.client Access existing JCR Repository
OK fmeschbe jcr/jackrabbit-server org.apache.sling.jcr.jackrabbit.server Embedded JCR Repository
OK fmeschbe jcr/jackrabbit-extractor org.apache.sling.jcr.jackrabbit.extractor Jackrabbit Query Extensions

The projects in the jcr folder are related to JCR.

Sling Launcher Projects

Status Who Folder Artifact ID Description
OK fmeschbe launcher/app org.apache.sling.launcher.app Command line Sling launcher (embedded Jetty) (formerly the sling-app project)
OK fmeschbe launcher/webapp org.apache.sling.launcher.webapp Sling launcher Web Application (formerly the sling-servlet project)

Launchers for Sling are located in the launcher folder. Two projects currently exist. The app project which launches Sling from the command line and the webapp project which is a web application which launches Sling as a web application in a servlet container.

Maven Plugin Projects

Status Who Folder Artifact ID Description
OK cziegeler maven/maven-jcrocm-plugin org.apache.sling.maven-jcrocm-plugin JavaDoc Tag support for JCR OCM Mapping
OK fmeschbe maven/maven-jspc-plugin org.apache.sling.maven-jspc-plugin JSP Compiler for bundled JSPs
OK cziegeler maven/maven-sling-plugin org.apache.sling.maven-sling-plugin Various helper goals

The maven folder contains Maven 2 plugin projects which simplify development of Sling itself as well as applications extending Sling.

microsling Projects

Status Who Folder Artifact ID Description
OK fmeschbe microsling Container for microsling
microsling/core org.apache.sling.microsling.core microsling Core Implementation
microsling/webapp org.apache.sling.microsling.webapp microsling Web Application

The microsling folder contains the microsling projects which is a very simple implementation of the Sling API. microsling is only statically extensible (as opposed to Sling, which is extensible dynamically at run time).

OSGi Projects

Status Who Folder Artifact ID Description
OK fmeschbe osgi/log org.apache.sling.osgi.log LogService impl and Log API provider
OK fmeschbe osgi/assembly org.apache.sling.osgi.assembly Assembly packaging (this project will be removed in the future because it provides a subset of the functionality of the new Deployment Package Service contained in the OSGi Compendium Service Specification R 4.1)
OK fmeschbe osgi/obr org.apache.sling.osgi.obr OSGi Bundle Repository server
OK fmeschbe osgi/console-web org.apache.sling.osgi.onsole.web Web Based OSGi management console

The projects in the osgi folder are used to extend the functionality of an OSGi framework. These projects are used to implement running Sling instances but do not directly influence Sling itself.

Scripting Engine Projects

Status Who Folder Artifact ID Description
In Progress fmeschbe scripting/resolver org.apache.sling.scripting.resolver ScriptResolver implementation and Engine support
OK fmeschbe scripting/jsp org.apache.sling.scripting.jsp JSP (includes Jasper)
OK cziegeler/fmeschbe scripting/jsp-taglib org.apache.sling.scripting.jsp.taglib JSP TagLib for Sling
OK cziegeler scripting/javascript org.apache.sling.scripting.javascript JavaScript using Rhino (includes ESP support)
OK cziegeler scripting/velocity org.apache.sling.scripting.velocity Velocity Templating
OK cziegeler scripting/freemarker org.apache.sling.scripting.freemarker Freemarker Templating
OK cziegeler scripting/ruby org.apache.sling.scripting.ruby Ruby Templating
scripting/??? org.apache.sling.scripting.??? more scripting engines, e.g. JSR-223

One of the most notable extensions of the Sling API compared to the Component API is the better definition of implementing scripting. Formerly scripting was supported as just a special way of a Component requiring more or less complex setup in the repository. The projects in the scripting folder implement the new SlingScriptingEngine interface for various script languages. The resolver project implements the SlingScriptResolver interface for Sling.

Sling Main Projects

Status Who Folder Artifact ID Description
OK fmeschbe sling/core org.apache.sling.core The Core Sling engine. See note below.
sling/cache org.apache.sling.cache Output caching of response data (currently empty)
OK cziegeler sling/event org.apache.sling.event Distributed Eventing using JCR
OK fmeschbe sling/sample org.apache.sling.sample Sample Servlets and JSPs
OK cziegeler sling/scheduler org.apache.sling.scheduler Quartz-based Scheduler for Sling
OK fmeschbe sling/servlets-standard org.apache.sling.servlets.standard Standard Servlets, e.g. nt:file, nt:folder

The projects in the sling folder are the core Sling API implementation projects. In addition added value projects such as scheduling and distributed eventing projects are also located in this folder.

Note on sling/core: The core project is currently almost a complete implementation of the Sling framework. Only the JCR Repository access and Object Content Mapping functionality is not part of the core. This project should be broken apart such that only the bare minimum of the functionality is contained. This is to be further analyzed.

Removed and Replaced Projects