Apache Sling Project Archetype

Clone this repo:
  1. e918bc7 SLING-12521 remove hint to other archetypes which are now deprecated by Stefan Seifert · 5 days ago master
  2. 66cd143 Bump commons-io:commons-io from 2.7 to 2.14.0 by dependabot[bot] · 11 days ago
  3. 17fcda5 SLING-12511 Use latest Sling Starter release when creating a new project (#16) by Stefan Seifert · 11 days ago
  4. 6e7c73a SLING-12513 Update to Parent 62 (#17) by Stefan Seifert · 11 days ago
  5. 47b5db4 SLING-12459 - Redirect sonarcloud notifications to commits@apache.sling.org by Robert Munteanu · 6 weeks ago

Apache Sling

Build Status Test Status Sonarcloud Status JavaDoc Maven Central License

Sling Project Template through Maven Archetype

Releases

VersionDescription
1.0.0Initial Release. Do not use anymore as it has issues with handling embedded bundles
1.0.2Fixes for the embedded bundles issue and prevents the interactive mode to fail to ask for certain parameters by having no defaults
1.0.4Updated the Archetype to work with Sling 12
1.0.8Added a launcher module
1.0.12Add Java 17 support

Introduction

This archetype will create a Sling project that can be deployed on the Sling.

The core and ui.apps are empty Maven modules that are ready for you code.

There are also example modules with the extension of .example. Please copy whatever you want from these module into the appropriate module. The example modules are not intended to be installed into Sling. Both type (regular and example) have the same structure and so you can copy them over without any problems.

If this archetype was generated with the optionAll property set to y then an all package will be created that contains both the core and the ui.apps. This enables the developer to easily deploy all modules in that project as a single unit (see below).

If this archetype was generated with the optionAll property set to n then the core bundle will be deployed as embedded bundle of the ui.apps package.

Why a Separate All Package

For a simple project that only contains one or two modules (bundle and content package) this seems like overkill and the same can be accomplished using the ui.apps as single deployment package.

That said for a more serious project where there are multiple bundles and content packages this becomes difficult to handle. Not only needs one Content Package to take the role of the single deployment package which requires it to add the other modules as dependencies. This can be confusing and so the dedicated All content package solves that. It contains the dependencies and the logic how to build and deploy the entire project in one step.

Archetype Properties

NameDescription
groupIdMaven Group Id
artifactIdMaven Artifact Id
versionVersion of your project
artifactNameProject Label used in the Descriptions and Module Name
packageRoot Package of the Java Code
packageGroupName of the Package Folder where the package is installed in (/etc/packages)
appsFolderNameFolder name under /apps where components etc are installed
contentFolderNameFolder name under /content where the content is added to
slingModelSubPackageSub Package where Sling Models should be place in with no trailing dots
slingHostNameHost Name or IP Address of the server where Sling is hosted
slingPortPort to which your Sling instance is bound to
optionAllDetermines if the project is created with an all package or packaged inside the ui.apps mdoule (y/n)
optionExampleDetermines if the example code is kept in separate modules (s), merged together into single modules (m) or example code is deleted (d)

Usage

You can create a project with this archetype using this command:

mvn archetype:generate \
   -DarchetypeGroupId=org.apache.sling \
   -DarchetypeArtifactId=sling-project-archetype \
   -DarchetypeVersion=1.0.4

Maven will then guide you through the configuration process to fill in all the properties and then create the project.

Local Build and Usage

  • Build this project locally with
mvn clean install
  • Go to your folder where you want your generated project to be
  • Generate it with:
mvn archetype:generate -DarchetypeCatalog=local
  • Select this Archetype from a given list
  • Provide the requested properties

Build and Install Integration Test

There is a simple integration test setup with this archetype. This script will build both the Merged All and UI (ui.apps packaging) and install them on the local Sling instance. The resulting pages (from the example code) can be viewed here:

You can run this all of these test projects using the attached Unix shell script:

sh build.run.and.deploy.test.sh

The properties for the integration test can be found under /test/resources/projects/[all/notAll]/archetype.properties.