Child pages
  • Sling module descriptor
Skip to end of metadata
Go to start of metadata


We have a number of automated processes which make use of the Git repositories as a source of truth:

  • generating a default.xml manifest for repo checkout
  • generating Jenkins jobs

However, we often have the need to override some of the logic on a per-module basis:

  • building a project with multiple JDKs
  • including certain modules in repo groups or creating special profiles for them

In the future, we may look into other automation, such as

  • automatically maintaining a which points to documentation URLs or the build Job
  • setting GitHub repository topics

Therefore it is proposed to allow the existence of a Sling module descriptor file in the root of each Git repository. If no descriptor exists, the module is processed by various tools in the default manner. If it exists, the tools must inspect it for custom settings and apply them.


The module file will be named .sling-module.json . It is a "dotfile" as it is not usually touched during regular development. The JSON format allows easy consumption from various tools, including the Jenkins scripted pipelines. A previous version of the module descriptor used XML, which also allowed comments, but unfortunately it's not easily readable from Jenkins scripted pipelines.

Rather than listing a specification, a full example is provided below:

.sling-module.json example
  "jenkins": {
    "jdks": [
    "archivePatterns": [
    "mavenGoal": "install",
    "additionalMavenParams": "-Dorg.ops4j.pax.url.mvn.repositories=,",
    "upstreamProjects": [
    "rebuildFrequency": "@weekly",
    "enabled": false,
    "emailRecipients": [
    "branches": {
      "master": {
        "nodeLabel": "git-websites",
        "additionalMavenParams": "-Ppublish-site -Dmsg=\"Automatic website deployment\""
    "sonarQubeEnabled": false,
    "sonarQubeUseAdditionalMavenParams": false
    "sonarQubeAdditionalParams": '-PsonarQubeProfile'


Building with multiple JDK versions

  "jenkins": {
    "jdks": [8, 11, 13]
  • No labels