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
Projects
- groupId: All projects have the same groupId org.apache.sling
- artifactId: The artifactId is fully qualified with the groupId plus a name built from the project folder as listed below with slashes / and dashes - replaced by dots .. See below for exceptions.
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
- The parent project's artifactId is sling
- The artifactId of the projets in the sling folder is just the project name without the parent folder sling, e.g core for the Sling core project.
- The Maven 2 plugin projects in the maven folder follow the naming convention for Maven 2 plugins.
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
- The component-api project defining the old Component API is replaced by the new api project defining the Sling API. Therefore the component-api project is removed.
- The project JSP compiler (Jasper plus Eclipse Java Compiler) project jasper-sling is not a standalone project any more. It has been integrated into the project implementing the SlingScriptingEngine for JSP script/jsp.