This section details the customizations we make to the standard Karaf distribution for the Minion container.

Clean Start

We clear the cache on every start by setting karaf.clean.cache = true in order to ensure that only the features listed in the featuresBoot (or installed by the karaf-extender) are installed.

Karaf Extender

The Karaf Extender was developed to make it easier to manage and extend the container using existing packaging tools. It lets packages to register Maven Repositories, Karaf Feature Repositories and Karaf Features to Boot by overlaying additional files, avoiding modifying any of the existing files.

Here’s an overview, used for reference, of the relevant directories that are (currently) present on a default install of the meridian-minion package:

├── .m2
├── etc
│   └── featuresBoot.d
│       └── custom.boot
├── repositories
│   ├── core
│   │   ├── features.uris
│   │   └── features.boot
│   └── default
│       ├── features.uris
│       └── features.boot
└── system

When the karaf-extender feature is installed it will:

  1. Find all of the folders listed under $karaf.home/repositories that do not start with a '.' and sort these by name.

  2. Gather the list of Karaf Feature Repository URIs from the features.uris files in the repositories.

  3. Gather the list of Karaf Feature Names from the features.boot files in the repositories.

  4. Gather the list of Karaf Feature Names form the files under $karaf.etc/featuresBoot.d that do not start with a '.' and sort these by name.

  5. Register the Maven Repositories by updating the org.ops4j.pax.url.mvn.repositories key for the PID org.ops4j.pax.url.mvn.

  6. Wait up to 30 seconds until all of the Karaf Feature URIs are resolvable (the Maven Repositories may take a few moments to update after updating the configuration.)

  7. Install the Karaf Feature Repository URIs.

  8. Install the Karaf Features.

Features listed in the features.boot files of the Maven Repositories will take precedence over those listed in featuresBoot.d.
Any existing repository registered in org.ops4j.pax.url.mvn.repositories will be overwritten.