You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:19:41 UTC

[sling-org-apache-sling-testing-paxexam] 01/48: SLING-5809 Provide Sling's Launchpad Karaf Features as Options for Pax Exam

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.testing.paxexam-0.0.2
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-paxexam.git

commit b4440ef4618af04baa8094c62ce09bfc5acc283b
Author: Oliver Lietz <ol...@apache.org>
AuthorDate: Thu Jun 23 14:22:20 2016 +0000

    SLING-5809 Provide Sling's Launchpad Karaf Features as Options for Pax Exam
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/org.apache.sling.testing.paxexam@1749897 13f79535-47bb-0310-9956-ffa450edef68
---
 README.md                                          |   6 +
 pom.xml                                            |  88 +++
 .../apache/sling/testing/paxexam/SlingOptions.java | 770 +++++++++++++++++++++
 .../testing/paxexam/SlingVersionResolver.java      | 209 ++++++
 src/main/resources/templates/SlingOptions.txt      |  85 +++
 .../resources/templates/SlingVersionResolver.txt   |  62 ++
 6 files changed, 1220 insertions(+)

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..97d829b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,6 @@
+Apache Sling Testing Pax Exam
+=============================
+
+**Test support for use with Pax Exam.**
+
+* _Sling's Launchpad Karaf Features_ as `Option`s for Pax Exam (without Karaf)
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..508bd3b
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.sling</groupId>
+    <artifactId>sling</artifactId>
+    <version>27-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <artifactId>org.apache.sling.testing.paxexam</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>bundle</packaging>
+
+  <name>Apache Sling Testing PaxExam</name>
+  <description>Test support for use with Pax Exam.</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <sling.java.version>7</sling.java.version>
+    <org.ops4j.pax.exam.version>4.9.1</org.ops4j.pax.exam.version>
+  </properties>
+
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/testing/org.apache.sling.testing.paxexam</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/testing/org.apache.sling.testing.paxexam</developerConnection>
+    <url>http://svn.apache.org/viewvc/sling/trunk/testing/org.apache.sling.testing.paxexam</url>
+  </scm>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <!-- OSGi -->
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>osgi.core</artifactId>
+      <version>6.0.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>osgi.cmpn</artifactId>
+      <version>6.0.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <!-- Pax Exam -->
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam</artifactId>
+      <version>${org.ops4j.pax.exam.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-cm</artifactId>
+      <version>${org.ops4j.pax.exam.version}</version>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/src/main/java/org/apache/sling/testing/paxexam/SlingOptions.java b/src/main/java/org/apache/sling/testing/paxexam/SlingOptions.java
new file mode 100644
index 0000000..47f850c
--- /dev/null
+++ b/src/main/java/org/apache/sling/testing/paxexam/SlingOptions.java
@@ -0,0 +1,770 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.testing.paxexam;
+
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.options.MavenUrlReference.VersionResolver;
+
+import static org.ops4j.pax.exam.CoreOptions.composite;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
+
+/**
+ * NOTE: This file is generated from Sling's Launchpad Karaf Features
+ */
+public class SlingOptions {
+
+    public static VersionResolver versionResolver = new SlingVersionResolver();
+
+    public static Option config() {
+        return mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.configadmin").version(versionResolver);
+    }
+
+    public static Option eventadmin() {
+        return mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.eventadmin").version(versionResolver);
+    }
+
+    public static Option http() {
+        return composite(
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.http.jetty").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.http.servlet-api").version(versionResolver)
+        );
+    }
+
+    public static Option httpWhiteboard() {
+        return mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.http.whiteboard").version(versionResolver);
+    }
+
+    public static Option management() {
+        return composite(
+            mavenBundle().groupId("org.apache.aries").artifactId("org.apache.aries.util").version(versionResolver),
+            mavenBundle().groupId("org.apache.aries.jmx").artifactId("org.apache.aries.jmx.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.aries.jmx").artifactId("org.apache.aries.jmx.core").version(versionResolver),
+            mavenBundle().groupId("org.apache.aries.jmx").artifactId("org.apache.aries.jmx.whiteboard").version(versionResolver)
+        );
+    }
+
+    public static Option scr() {
+        return composite(
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.metatype").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.scr").version(versionResolver)
+        );
+    }
+
+    public static Option webconsole() {
+        return mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.webconsole").version(versionResolver);
+    }
+
+    public static Option sling() {
+        return composite(
+            config(),
+            eventadmin(),
+            scr(),
+            management(),
+            http(),
+            httpWhiteboard(),
+            slingCommonsClassloader(),
+            slingCommonsScheduler(),
+            slingCommonsThreads(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.auth.core").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.engine").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourceresolver").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.serviceusermapper").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.settings").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.compiler").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.json").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.mime").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.osgi").version(versionResolver),
+            mavenBundle().groupId("javax.jcr").artifactId("jcr").version(versionResolver),
+            mavenBundle().groupId("commons-codec").artifactId("commons-codec").version(versionResolver),
+            mavenBundle().groupId("commons-collections").artifactId("commons-collections").version(versionResolver),
+            mavenBundle().groupId("commons-fileupload").artifactId("commons-fileupload").version(versionResolver),
+            mavenBundle().groupId("commons-io").artifactId("commons-io").version(versionResolver),
+            mavenBundle().groupId("commons-lang").artifactId("commons-lang").version(versionResolver),
+            mavenBundle().groupId("org.apache.commons").artifactId("commons-lang3").version(versionResolver),
+            mavenBundle().groupId("org.apache.commons").artifactId("commons-math").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.bundles").artifactId("json").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-servlet_3.0_spec").version(versionResolver)
+        );
+    }
+
+    public static Option slingAuthForm() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.auth.form").version(versionResolver)
+        );
+    }
+
+    public static Option slingCommonsClassloader() {
+        return composite(
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.classloader").version(versionResolver)
+        );
+    }
+
+    public static Option slingCommonsFsclassloader() {
+        return composite(
+            scr(),
+            webconsole(),
+            slingCommonsClassloader(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.fsclassloader").version(versionResolver),
+            mavenBundle().groupId("commons-io").artifactId("commons-io").version(versionResolver),
+            mavenBundle().groupId("commons-lang").artifactId("commons-lang").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-servlet_3.0_spec").version(versionResolver)
+        );
+    }
+
+    public static Option slingCommonsMessaging() {
+        return composite(
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.messaging").version(versionResolver)
+        );
+    }
+
+    public static Option slingCommonsMessagingMail() {
+        return composite(
+            scr(),
+            slingCommonsMessaging(),
+            slingCommonsThreads(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.messaging.mail").version(versionResolver),
+            mavenBundle().groupId("com.sun.mail").artifactId("javax.mail").version(versionResolver),
+            mavenBundle().groupId("javax.mail").artifactId("javax.mail-api").version(versionResolver),
+            mavenBundle().groupId("org.apache.commons").artifactId("commons-email").version(versionResolver)
+        );
+    }
+
+    public static Option slingCommonsMetrics() {
+        return composite(
+            scr(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.metrics").version(versionResolver),
+            mavenBundle().groupId("io.dropwizard.metrics").artifactId("metrics-core").version(versionResolver)
+        );
+    }
+
+    public static Option slingCommonsScheduler() {
+        return composite(
+            scr(),
+            slingCommonsThreads(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.scheduler").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-jta_1.1_spec").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-servlet_3.0_spec").version(versionResolver)
+        );
+    }
+
+    public static Option slingCommonsThreads() {
+        return composite(
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.threads").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionAdapter() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.adapter").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionBundleresource() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.bundleresource.impl").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionDiscovery() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.discovery.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.discovery.base").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.discovery.commons").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.discovery.support").version(versionResolver),
+            mavenBundle().groupId("org.apache.httpcomponents").artifactId("httpcore-osgi").version(versionResolver),
+            mavenBundle().groupId("org.apache.httpcomponents").artifactId("httpclient-osgi").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionDiscoveryImpl() {
+        return composite(
+            webconsole(),
+            slingExtensionDiscovery(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.discovery.impl").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionDiscoveryOak() {
+        return composite(
+            webconsole(),
+            slingExtensionDiscovery(),
+            slingExtensionHealthcheck(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.discovery.oak").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionDiscoveryStandalone() {
+        return composite(
+            slingExtensionDiscovery(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.discovery.standalone").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionEvent() {
+        return composite(
+            sling(),
+            slingExtensionDiscovery(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.event").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.event.dea").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.inventory").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionExplorer() {
+        return composite(
+            sling(),
+            slingScriptingJavascript(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.extensions.explorer").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionFeatureflags() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.featureflags").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionFsresource() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.fsresource").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionI18n() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.i18n").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionJmxProvider() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jmx.provider").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionModels() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.models.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.models.impl").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionResourceInventory() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resource.inventory").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.inventory").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionThreaddump() {
+        return composite(
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.extensions.threaddump").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionValidation() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.validation.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.validation.core").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionXss() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.xss").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.bundles").artifactId("commons-httpclient").version(versionResolver)
+        );
+    }
+
+    public static Option slingInstaller() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.installer.console").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.installer.core").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.installer.factory.configuration").version(versionResolver)
+        );
+    }
+
+    public static Option slingInstallerProviderFile() {
+        return composite(
+            slingInstaller(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.installer.provider.file").version(versionResolver)
+        );
+    }
+
+    public static Option slingInstallerProviderJcr() {
+        return composite(
+            slingInstaller(),
+            slingJcr(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.installer.provider.jcr").version(versionResolver)
+        );
+    }
+
+    public static Option slingJcr() {
+        return composite(
+            webconsole(),
+            sling(),
+            jackrabbitSling(),
+            tikaSling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.base").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.classloader").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.contentloader").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.davex").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.registration").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.resource").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.webconsole").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.webdav").version(versionResolver)
+        );
+    }
+
+    public static Option slingJcrCompiler() {
+        return composite(
+            sling(),
+            slingJcr(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.compiler").version(versionResolver)
+        );
+    }
+
+    public static Option slingJcrJackrabbitSecurity() {
+        return composite(
+            slingJcr(),
+            slingServlets(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.jackrabbit.accessmanager").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.jackrabbit.usermanager").version(versionResolver)
+        );
+    }
+
+    public static Option slingJcrOak() {
+        return composite(
+            scr(),
+            slingJcr(),
+            jackrabbitSling(),
+            tikaSling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.jcr.oak.server").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("oak-core").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("oak-commons").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("oak-blob").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("oak-jcr").version(versionResolver),
+            mavenBundle().groupId("com.google.guava").artifactId("guava").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.jaas").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("oak-lucene").version(versionResolver)
+        );
+    }
+
+    public static Option slingLaunchpadContent() {
+        return composite(
+            sling(),
+            slingAuthForm(),
+            slingExtensionExplorer(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.launchpad.content").version(versionResolver)
+        );
+    }
+
+    public static Option slingLaunchpadOak() {
+        return composite(
+            webconsole(),
+            sling(),
+            slingServlets(),
+            slingInstaller(),
+            slingExtensionAdapter(),
+            slingExtensionBundleresource(),
+            slingExtensionDiscoveryOak(),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.prefs").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.webconsole.plugins.memoryusage").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.webconsole.plugins.packageadmin").version(versionResolver),
+            newConfiguration("org.apache.sling.resourceresolver.impl.observation.OsgiObservationBridge")
+                .put("resource.change.types", "[\"ADDED\", \"CHANGED\", \"REMOVED\"]")
+                .put("resource.paths", "/")
+                .asOption(),
+            factoryConfiguration("org.apache.felix.jaas.Configuration.factory")
+                .put("jaas.ranking", "I\"300\"")
+                .put("jaas.classname", "org.apache.jackrabbit.oak.spi.security.authentication.GuestLoginModule")
+                .put("jaas.controlFlag", "optional")
+                .asOption(),
+            factoryConfiguration("org.apache.felix.jaas.Configuration.factory")
+                .put("jaas.classname", "org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl")
+                .put("jaas.controlFlag", "required")
+                .asOption(),
+            factoryConfiguration("org.apache.felix.jaas.Configuration.factory")
+                .put("jaas.ranking", "I\"200\"")
+                .put("jaas.classname", "org.apache.jackrabbit.oak.security.authentication.token.TokenLoginModule")
+                .put("jaas.controlFlag", "sufficient")
+                .asOption(),
+            newConfiguration("org.apache.felix.jaas.ConfigurationSpi")
+                .put("jaas.configProviderName", "FelixJaasProvider")
+                .put("jaas.defaultRealmName", "jackrabbit.oak")
+                .asOption(),
+            newConfiguration("org.apache.jackrabbit.oak.security.authentication.AuthenticationConfigurationImpl")
+                .put("org.apache.jackrabbit.oak.authentication.configSpiName", "FelixJaasProvider")
+                .asOption(),
+            newConfiguration("org.apache.jackrabbit.oak.security.user.UserConfigurationImpl")
+                .put("usersPath", "/home/users")
+                .put("importBehavior", "besteffort")
+                .put("defaultDepth", "1")
+                .put("groupsPath", "/home/groups")
+                .asOption(),
+            newConfiguration("org.apache.jackrabbit.oak.spi.security.user.action.DefaultAuthorizableActionProvider")
+                .put("groupPrivilegeNames", "[\"jcr:read\"]")
+                .put("enabledActions", "[\"org.apache.jackrabbit.oak.spi.security.user.action.AccessControlAction\"]")
+                .put("userPrivilegeNames", "[\"jcr:all\"]")
+                .asOption()
+        );
+    }
+
+    public static Option slingLaunchpadOakTar() {
+        return composite(
+            slingJcrOak(),
+            slingLaunchpadOak(),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("oak-segment").version(versionResolver),
+            newConfiguration("org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreService")
+                .put("repository.home", "sling/repository")
+                .put("name", "Default NodeStore")
+                .asOption(),
+            newConfiguration("org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexProviderService")
+                .put("localIndexDir", "sling/repository/index")
+                .asOption()
+        );
+    }
+
+    public static Option slingLaunchpadOakMongo() {
+        return composite(
+            slingJcrOak(),
+            slingLaunchpadOak(),
+            mavenBundle().groupId("org.mongodb").artifactId("mongo-java-driver").version(versionResolver),
+            newConfiguration("org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService")
+                .put("mongouri", "mongodb://localhost:27017")
+                .put("db", "sling")
+                .asOption(),
+            newConfiguration("org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexProviderService")
+                .put("localIndexDir", "sling/repository/index")
+                .asOption()
+        );
+    }
+
+    public static Option slingScripting() {
+        return composite(
+            sling(),
+            webconsole(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.core").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-servlet_3.0_spec").version(versionResolver)
+        );
+    }
+
+    public static Option slingScriptingJavascript() {
+        return composite(
+            slingScripting(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.javascript").version(versionResolver)
+        );
+    }
+
+    public static Option slingScriptingJsp() {
+        return composite(
+            slingScripting(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.jsp").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.jsp.taglib").version(versionResolver)
+        );
+    }
+
+    public static Option slingScriptingSightly() {
+        return composite(
+            sling(),
+            slingJcr(),
+            slingScripting(),
+            slingExtensionI18n(),
+            slingExtensionXss(),
+            slingJcrCompiler(),
+            slingCommonsFsclassloader(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.sightly").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.sightly.js.provider").version(versionResolver),
+            mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.rhino").version(versionResolver)
+        );
+    }
+
+    public static Option slingServlets() {
+        return composite(
+            sling(),
+            slingJcr(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.get").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.post").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").version(versionResolver)
+        );
+    }
+
+    public static Option jackrabbitSling() {
+        return composite(
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("jackrabbit-api").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("jackrabbit-data").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("jackrabbit-jcr-commons").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("jackrabbit-jcr-rmi").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("jackrabbit-spi").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("jackrabbit-spi-commons").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit").artifactId("jackrabbit-webdav").version(versionResolver),
+            mavenBundle().groupId("javax.jcr").artifactId("jcr").version(versionResolver),
+            mavenBundle().groupId("commons-codec").artifactId("commons-codec").version(versionResolver),
+            mavenBundle().groupId("commons-collections").artifactId("commons-collections").version(versionResolver),
+            mavenBundle().groupId("commons-fileupload").artifactId("commons-fileupload").version(versionResolver),
+            mavenBundle().groupId("commons-io").artifactId("commons-io").version(versionResolver),
+            mavenBundle().groupId("commons-lang").artifactId("commons-lang").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.bundles").artifactId("commons-httpclient").version(versionResolver),
+            mavenBundle().groupId("com.google.guava").artifactId("guava").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-atinject_1.0_spec").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-el_2.2_spec").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-interceptor_1.1_spec").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-jcdi_1.0_spec").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-jta_1.1_spec").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-servlet_3.0_spec").version(versionResolver)
+        );
+    }
+
+    public static Option tikaSling() {
+        return composite(
+            mavenBundle().groupId("org.apache.tika").artifactId("tika-core").version(versionResolver),
+            mavenBundle().groupId("org.apache.tika").artifactId("tika-bundle").version(versionResolver)
+        );
+    }
+
+    public static Option slingAuthOpenid() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.auth.openid").version(versionResolver)
+        );
+    }
+
+    public static Option slingAuthSelector() {
+        return composite(
+            slingAuthForm(),
+            slingAuthOpenid(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.auth.selector").version(versionResolver)
+        );
+    }
+
+    public static Option slingCommonsHtml() {
+        return composite(
+            scr(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.html").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionDistribution() {
+        return composite(
+            sling(),
+            slingJcr(),
+            slingExtensionEvent(),
+            slingExtensionHealthcheck(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.distribution.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.distribution.core").version(versionResolver),
+            mavenBundle().groupId("org.apache.httpcomponents").artifactId("httpcore-osgi").version(versionResolver),
+            mavenBundle().groupId("org.apache.httpcomponents").artifactId("httpclient-osgi").version(versionResolver),
+            mavenBundle().groupId("org.apache.jackrabbit.vault").artifactId("org.apache.jackrabbit.vault").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionHealthcheck() {
+        return composite(
+            sling(),
+            slingJcr(),
+            slingScripting(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.hc.core").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.hc.jmx").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.hc.support").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.hc.webconsole").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionQuery() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.query").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionResourcemerger() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourcemerger").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionRewriter() {
+        return composite(
+            sling(),
+            slingCommonsHtml(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.rewriter").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionSecurity() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.security").version(versionResolver)
+        );
+    }
+
+    public static Option slingExtensionUrlrewriter() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.urlrewriter").version(versionResolver),
+            mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.urlrewritefilter").version(versionResolver)
+        );
+    }
+
+    public static Option slingLaunchpadNosqlCouchbase() {
+        return composite(
+            slingNosqlCouchbase(),
+            factoryConfiguration("org.apache.sling.nosql.couchbase.resourceprovider.CouchbaseNoSqlResourceProviderFactory.factory.config")
+                .put("provider.roots", "[\"/\"]")
+                .asOption(),
+            factoryConfiguration("org.apache.sling.nosql.couchbase.client.CouchbaseClient.factory.config")
+                .put("bucketName", "sling")
+                .put("enabled", "B\"true\"")
+                .put("couchbaseHosts", "localhost:8091")
+                .put("clientId", "sling-resourceprovider-couchbase")
+                .asOption()
+        );
+    }
+
+    public static Option slingLaunchpadNosqlMongodb() {
+        return composite(
+            slingNosqlMongodb(),
+            factoryConfiguration("org.apache.sling.nosql.mongodb.resourceprovider.MongoDBNoSqlResourceProviderFactory.factory.config")
+                .put("collection", "resources")
+                .put("database", "sling")
+                .put("connectionString", "localhost:27017")
+                .put("provider.roots", "[\"/\"]")
+                .asOption()
+        );
+    }
+
+    public static Option slingNosqlGeneric() {
+        return composite(
+            sling(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.nosql.generic").version(versionResolver)
+        );
+    }
+
+    public static Option slingNosqlCouchbase() {
+        return composite(
+            slingNosqlGeneric(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.nosql.couchbase-client").version(versionResolver),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.nosql.couchbase-resourceprovider").version(versionResolver),
+            mavenBundle().groupId("io.wcm.osgi.wrapper").artifactId("io.wcm.osgi.wrapper.rxjava").version(versionResolver)
+        );
+    }
+
+    public static Option slingNosqlMongodb() {
+        return composite(
+            slingNosqlGeneric(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.nosql.mongodb-resourceprovider").version(versionResolver),
+            mavenBundle().groupId("org.mongodb").artifactId("mongo-java-driver").version(versionResolver)
+        );
+    }
+
+    public static Option slingScriptingFreemarker() {
+        return composite(
+            sling(),
+            slingScripting(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.freemarker").version(versionResolver)
+        );
+    }
+
+    public static Option slingScriptingGroovy() {
+        return composite(
+            sling(),
+            slingScripting(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.groovy").version(versionResolver),
+            mavenBundle().groupId("org.codehaus.groovy").artifactId("groovy").version(versionResolver),
+            mavenBundle().groupId("org.codehaus.groovy").artifactId("groovy-json").version(versionResolver),
+            mavenBundle().groupId("org.codehaus.groovy").artifactId("groovy-templates").version(versionResolver)
+        );
+    }
+
+    public static Option slingScriptingJava() {
+        return composite(
+            sling(),
+            slingScripting(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.java").version(versionResolver),
+            mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-servlet_3.0_spec").version(versionResolver)
+        );
+    }
+
+    public static Option slingScriptingThymeleaf() {
+        return composite(
+            sling(),
+            slingScripting(),
+            slingExtensionI18n(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.thymeleaf").version(versionResolver),
+            mavenBundle().groupId("org.javassist").artifactId("javassist").version(versionResolver)
+        );
+    }
+
+    public static Option slingSamplesFling() {
+        return composite(
+            sling(),
+            slingScriptingThymeleaf(),
+            slingCommonsMessaging(),
+            slingCommonsMessagingMail(),
+            slingExtensionModels(),
+            slingExtensionQuery(),
+            slingExtensionValidation(),
+            slingAuthForm(),
+            mavenBundle().groupId("org.apache.sling.samples").artifactId("org.apache.sling.samples.fling").version(versionResolver),
+            newConfiguration("org.apache.sling.commons.messaging.mail.internal.SimpleMailBuilder")
+                .put("from", "fling@sling.apache.org")
+                .put("smtpUsername", "sling")
+                .put("smtpPort", "8025")
+                .put("subject", "message from fling")
+                .put("smtpPassword", "fling")
+                .put("smtpHostname", "localhost")
+                .asOption(),
+            newConfiguration("org.apache.sling.samples.fling.internal.WiserSmtpService")
+                .put("smtpPort", "8025")
+                .asOption()
+        );
+    }
+
+    public static Option composumSling() {
+        return composite(
+            sling(),
+            slingJcr(),
+            slingScriptingJsp(),
+            slingExtensionEvent(),
+            mavenBundle().groupId("com.composum.sling.core").artifactId("composum-sling-core-commons").version(versionResolver),
+            mavenBundle().groupId("com.composum.sling.core").artifactId("composum-sling-core-console").version(versionResolver),
+            mavenBundle().groupId("com.composum.sling.core").artifactId("composum-sling-core-jslibs").version(versionResolver)
+        );
+    }
+
+}
diff --git a/src/main/java/org/apache/sling/testing/paxexam/SlingVersionResolver.java b/src/main/java/org/apache/sling/testing/paxexam/SlingVersionResolver.java
new file mode 100644
index 0000000..7d862e3
--- /dev/null
+++ b/src/main/java/org/apache/sling/testing/paxexam/SlingVersionResolver.java
@@ -0,0 +1,209 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.testing.paxexam;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.ops4j.pax.exam.options.MavenUrlReference.VersionResolver;
+
+/**
+ * NOTE: This file is generated from Sling's Launchpad Karaf Features
+ */
+public class SlingVersionResolver implements VersionResolver {
+
+    private final Map<String, String> versions = new HashMap<>();
+
+    public SlingVersionResolver() {
+        versions.put("org.apache.felix:org.apache.felix.configadmin", "1.8.8");
+        versions.put("org.apache.felix:org.apache.felix.eventadmin", "1.4.6");
+        versions.put("org.apache.felix:org.apache.felix.http.jetty", "3.2.0");
+        versions.put("org.apache.felix:org.apache.felix.http.servlet-api", "1.1.2");
+        versions.put("org.apache.felix:org.apache.felix.http.whiteboard", "3.0.0");
+        versions.put("org.apache.aries:org.apache.aries.util", "1.1.1");
+        versions.put("org.apache.aries.jmx:org.apache.aries.jmx.api", "1.1.5");
+        versions.put("org.apache.aries.jmx:org.apache.aries.jmx.core", "1.1.6");
+        versions.put("org.apache.aries.jmx:org.apache.aries.jmx.whiteboard", "1.1.5");
+        versions.put("org.apache.felix:org.apache.felix.metatype", "1.1.2");
+        versions.put("org.apache.felix:org.apache.felix.scr", "2.0.2");
+        versions.put("org.apache.felix:org.apache.felix.webconsole", "4.2.16");
+        versions.put("com.composum.sling.core:composum-sling-core-commons", "1.5.3");
+        versions.put("com.composum.sling.core:composum-sling-core-console", "1.5.3");
+        versions.put("com.composum.sling.core:composum-sling-core-jslibs", "1.5.3");
+        versions.put("com.google.guava:guava", "15.0");
+        versions.put("com.sun.mail:javax.mail", "1.5.5");
+        versions.put("commons-codec:commons-codec", "1.10");
+        versions.put("commons-collections:commons-collections", "3.2.2");
+        versions.put("commons-fileupload:commons-fileupload", "1.3.2");
+        versions.put("commons-io:commons-io", "2.5");
+        versions.put("commons-lang:commons-lang", "2.6");
+        versions.put("io.dropwizard.metrics:metrics-core", "3.1.2");
+        versions.put("io.wcm.osgi.wrapper:io.wcm.osgi.wrapper.rxjava", "1.0.14-0000");
+        versions.put("javax.jcr:jcr", "2.0");
+        versions.put("javax.mail:javax.mail-api", "1.5.5");
+        versions.put("org.apache.commons:commons-email", "1.4");
+        versions.put("org.apache.commons:commons-lang3", "3.4");
+        versions.put("org.apache.commons:commons-math", "2.2");
+        versions.put("org.apache.felix:org.apache.felix.inventory", "1.0.4");
+        versions.put("org.apache.felix:org.apache.felix.jaas", "0.0.4");
+        versions.put("org.apache.felix:org.apache.felix.prefs", "1.0.6");
+        versions.put("org.apache.felix:org.apache.felix.webconsole.plugins.memoryusage", "1.0.6");
+        versions.put("org.apache.felix:org.apache.felix.webconsole.plugins.packageadmin", "1.0.2");
+        versions.put("org.apache.geronimo.bundles:commons-httpclient", "3.1_2");
+        versions.put("org.apache.geronimo.bundles:json", "20090211_1");
+        versions.put("org.apache.geronimo.specs:geronimo-atinject_1.0_spec", "1.0");
+        versions.put("org.apache.geronimo.specs:geronimo-el_2.2_spec", "1.0.4");
+        versions.put("org.apache.geronimo.specs:geronimo-interceptor_1.1_spec", "1.0");
+        versions.put("org.apache.geronimo.specs:geronimo-jcdi_1.0_spec", "1.0");
+        versions.put("org.apache.geronimo.specs:geronimo-jta_1.1_spec", "1.1.1");
+        versions.put("org.apache.geronimo.specs:geronimo-servlet_3.0_spec", "1.0");
+        versions.put("org.apache.httpcomponents:httpclient-osgi", "4.5.2");
+        versions.put("org.apache.httpcomponents:httpcore-osgi", "4.4.5");
+        versions.put("org.apache.jackrabbit:jackrabbit-api", "2.12.1");
+        versions.put("org.apache.jackrabbit:jackrabbit-data", "2.12.1");
+        versions.put("org.apache.jackrabbit:jackrabbit-jcr-commons", "2.12.1");
+        versions.put("org.apache.jackrabbit:jackrabbit-jcr-rmi", "2.12.1");
+        versions.put("org.apache.jackrabbit:jackrabbit-spi", "2.12.1");
+        versions.put("org.apache.jackrabbit:jackrabbit-spi-commons", "2.12.1");
+        versions.put("org.apache.jackrabbit:jackrabbit-webdav", "2.12.1");
+        versions.put("org.apache.jackrabbit:oak-blob", "1.5.3");
+        versions.put("org.apache.jackrabbit:oak-commons", "1.5.3");
+        versions.put("org.apache.jackrabbit:oak-core", "1.5.3");
+        versions.put("org.apache.jackrabbit:oak-jcr", "1.5.3");
+        versions.put("org.apache.jackrabbit:oak-lucene", "1.5.3");
+        versions.put("org.apache.jackrabbit:oak-segment", "1.5.3");
+        versions.put("org.apache.jackrabbit.vault:org.apache.jackrabbit.vault", "3.1.26");
+        versions.put("org.apache.servicemix.bundles:org.apache.servicemix.bundles.rhino", "1.7.7.1_1");
+        versions.put("org.apache.servicemix.bundles:org.apache.servicemix.bundles.urlrewritefilter", "4.0.4_1");
+        versions.put("org.apache.sling:org.apache.sling.adapter", "2.1.6");
+        versions.put("org.apache.sling:org.apache.sling.api", "2.11.1-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.auth.core", "1.3.14");
+        versions.put("org.apache.sling:org.apache.sling.auth.form", "1.0.8");
+        versions.put("org.apache.sling:org.apache.sling.auth.openid", "1.0.4");
+        versions.put("org.apache.sling:org.apache.sling.auth.selector", "1.0.6");
+        versions.put("org.apache.sling:org.apache.sling.bundleresource.impl", "2.2.0");
+        versions.put("org.apache.sling:org.apache.sling.commons.classloader", "1.3.2");
+        versions.put("org.apache.sling:org.apache.sling.commons.compiler", "2.3.0");
+        versions.put("org.apache.sling:org.apache.sling.commons.fsclassloader", "1.0.2");
+        versions.put("org.apache.sling:org.apache.sling.commons.html", "1.0.0");
+        versions.put("org.apache.sling:org.apache.sling.commons.json", "2.0.18");
+        versions.put("org.apache.sling:org.apache.sling.commons.messaging", "0.0.1-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.commons.messaging.mail", "0.0.1-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.commons.metrics", "1.0.0");
+        versions.put("org.apache.sling:org.apache.sling.commons.mime", "2.1.8");
+        versions.put("org.apache.sling:org.apache.sling.commons.osgi", "2.4.0");
+        versions.put("org.apache.sling:org.apache.sling.commons.scheduler", "2.4.14");
+        versions.put("org.apache.sling:org.apache.sling.commons.threads", "3.2.6");
+        versions.put("org.apache.sling:org.apache.sling.discovery.api", "1.0.4");
+        versions.put("org.apache.sling:org.apache.sling.discovery.base", "1.1.3-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.discovery.commons", "1.0.12");
+        versions.put("org.apache.sling:org.apache.sling.discovery.impl", "1.2.7-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.discovery.oak", "1.2.7-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.discovery.standalone", "1.0.2");
+        versions.put("org.apache.sling:org.apache.sling.discovery.support", "1.0.0");
+        versions.put("org.apache.sling:org.apache.sling.distribution.api", "0.3.0");
+        versions.put("org.apache.sling:org.apache.sling.distribution.core", "0.1.18");
+        versions.put("org.apache.sling:org.apache.sling.engine", "2.4.6");
+        versions.put("org.apache.sling:org.apache.sling.event", "4.0.2");
+        versions.put("org.apache.sling:org.apache.sling.event.dea", "1.0.4");
+        versions.put("org.apache.sling:org.apache.sling.extensions.explorer", "1.0.4");
+        versions.put("org.apache.sling:org.apache.sling.extensions.threaddump", "0.2.2");
+        versions.put("org.apache.sling:org.apache.sling.featureflags", "1.0.2");
+        versions.put("org.apache.sling:org.apache.sling.fsresource", "1.1.4");
+        versions.put("org.apache.sling:org.apache.sling.hc.core", "1.2.5-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.hc.jmx", "1.0.6");
+        versions.put("org.apache.sling:org.apache.sling.hc.support", "1.0.4");
+        versions.put("org.apache.sling:org.apache.sling.hc.webconsole", "1.1.2");
+        versions.put("org.apache.sling:org.apache.sling.i18n", "2.4.6");
+        versions.put("org.apache.sling:org.apache.sling.installer.console", "1.0.0");
+        versions.put("org.apache.sling:org.apache.sling.installer.core", "3.6.8");
+        versions.put("org.apache.sling:org.apache.sling.installer.factory.configuration", "1.1.2");
+        versions.put("org.apache.sling:org.apache.sling.installer.provider.file", "1.1.0");
+        versions.put("org.apache.sling:org.apache.sling.installer.provider.jcr", "3.1.18");
+        versions.put("org.apache.sling:org.apache.sling.jcr.api", "2.3.1-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.jcr.base", "2.3.3-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.jcr.classloader", "3.2.2");
+        versions.put("org.apache.sling:org.apache.sling.jcr.compiler", "2.1.0");
+        versions.put("org.apache.sling:org.apache.sling.jcr.contentloader", "2.1.10");
+        versions.put("org.apache.sling:org.apache.sling.jcr.davex", "1.3.4");
+        versions.put("org.apache.sling:org.apache.sling.jcr.jackrabbit.accessmanager", "2.1.2");
+        versions.put("org.apache.sling:org.apache.sling.jcr.jackrabbit.usermanager", "2.2.4");
+        versions.put("org.apache.sling:org.apache.sling.jcr.oak.server", "1.0.1-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.jcr.registration", "1.0.2");
+        versions.put("org.apache.sling:org.apache.sling.jcr.resource", "2.8.0");
+        versions.put("org.apache.sling:org.apache.sling.jcr.webconsole", "1.0.2");
+        versions.put("org.apache.sling:org.apache.sling.jcr.webdav", "2.3.4");
+        versions.put("org.apache.sling:org.apache.sling.jmx.provider", "1.0.2");
+        versions.put("org.apache.sling:org.apache.sling.launchpad.content", "2.0.8");
+        versions.put("org.apache.sling:org.apache.sling.models.api", "1.2.2");
+        versions.put("org.apache.sling:org.apache.sling.models.impl", "1.2.8");
+        versions.put("org.apache.sling:org.apache.sling.nosql.couchbase-client", "1.0.2");
+        versions.put("org.apache.sling:org.apache.sling.nosql.couchbase-resourceprovider", "1.1.0");
+        versions.put("org.apache.sling:org.apache.sling.nosql.generic", "1.1.0");
+        versions.put("org.apache.sling:org.apache.sling.nosql.mongodb-resourceprovider", "1.1.0");
+        versions.put("org.apache.sling:org.apache.sling.query", "3.0.0");
+        versions.put("org.apache.sling:org.apache.sling.resource.inventory", "1.0.4");
+        versions.put("org.apache.sling:org.apache.sling.resourcemerger", "1.3.0");
+        versions.put("org.apache.sling:org.apache.sling.resourceresolver", "1.4.12");
+        versions.put("org.apache.sling:org.apache.sling.rewriter", "1.1.2");
+        versions.put("org.apache.sling:org.apache.sling.scripting.api", "2.1.8");
+        versions.put("org.apache.sling:org.apache.sling.scripting.core", "2.0.37-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.scripting.freemarker", "1.0.0-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.scripting.groovy", "1.0.2");
+        versions.put("org.apache.sling:org.apache.sling.scripting.java", "2.0.14");
+        versions.put("org.apache.sling:org.apache.sling.scripting.javascript", "2.0.30");
+        versions.put("org.apache.sling:org.apache.sling.scripting.jsp", "2.1.8");
+        versions.put("org.apache.sling:org.apache.sling.scripting.jsp.taglib", "2.2.6");
+        versions.put("org.apache.sling:org.apache.sling.scripting.sightly", "1.0.18");
+        versions.put("org.apache.sling:org.apache.sling.scripting.sightly.js.provider", "1.0.10");
+        versions.put("org.apache.sling:org.apache.sling.scripting.thymeleaf", "0.1.7-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.security", "1.0.18");
+        versions.put("org.apache.sling:org.apache.sling.serviceusermapper", "1.2.2");
+        versions.put("org.apache.sling:org.apache.sling.servlets.get", "2.1.14");
+        versions.put("org.apache.sling:org.apache.sling.servlets.post", "2.3.12");
+        versions.put("org.apache.sling:org.apache.sling.servlets.resolver", "2.4.3-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.settings", "1.3.8");
+        versions.put("org.apache.sling:org.apache.sling.urlrewriter", "0.0.2");
+        versions.put("org.apache.sling:org.apache.sling.validation.api", "1.0.0-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.validation.core", "1.0.0-SNAPSHOT");
+        versions.put("org.apache.sling:org.apache.sling.xss", "1.0.8");
+        versions.put("org.apache.sling.samples:org.apache.sling.samples.fling", "0.0.1-SNAPSHOT");
+        versions.put("org.apache.tika:tika-bundle", "1.13");
+        versions.put("org.apache.tika:tika-core", "1.13");
+        versions.put("org.codehaus.groovy:groovy", "2.4.7");
+        versions.put("org.codehaus.groovy:groovy-json", "2.4.7");
+        versions.put("org.codehaus.groovy:groovy-templates", "2.4.7");
+        versions.put("org.javassist:javassist", "3.20.0-GA");
+        versions.put("org.mongodb:mongo-java-driver", "2.14.2");
+    }
+
+    private String key(final String groupId, final String artifactId) {
+        return String.format("%s:%s", groupId, artifactId);
+    }
+
+    public String setVersion(final String groupId, final String artifactId, final String version) {
+        return versions.put(key(groupId, artifactId), version);
+    }
+
+    @Override
+    public String getVersion(final String groupId, final String artifactId) {
+        return versions.get(key(groupId, artifactId));
+    }
+
+}
diff --git a/src/main/resources/templates/SlingOptions.txt b/src/main/resources/templates/SlingOptions.txt
new file mode 100644
index 0000000..7bef485
--- /dev/null
+++ b/src/main/resources/templates/SlingOptions.txt
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.testing.paxexam;
+
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.options.MavenUrlReference.VersionResolver;
+
+import static org.ops4j.pax.exam.CoreOptions.composite;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
+
+/**
+ * NOTE: This file is generated from Sling's Launchpad Karaf Features
+ */
+public class SlingOptions {
+
+    public static VersionResolver versionResolver = new SlingVersionResolver();
+
+    public static Option config() {
+        return mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.configadmin").version(versionResolver);
+    }
+
+    public static Option eventadmin() {
+        return mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.eventadmin").version(versionResolver);
+    }
+
+    public static Option http() {
+        return composite(
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.http.jetty").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.http.servlet-api").version(versionResolver)
+        );
+    }
+
+    public static Option httpWhiteboard() {
+        return mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.http.whiteboard").version(versionResolver);
+    }
+
+    public static Option management() {
+        return composite(
+            mavenBundle().groupId("org.apache.aries").artifactId("org.apache.aries.util").version(versionResolver),
+            mavenBundle().groupId("org.apache.aries.jmx").artifactId("org.apache.aries.jmx.api").version(versionResolver),
+            mavenBundle().groupId("org.apache.aries.jmx").artifactId("org.apache.aries.jmx.core").version(versionResolver),
+            mavenBundle().groupId("org.apache.aries.jmx").artifactId("org.apache.aries.jmx.whiteboard").version(versionResolver)
+        );
+    }
+
+    public static Option scr() {
+        return composite(
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.metatype").version(versionResolver),
+            mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.scr").version(versionResolver)
+        );
+    }
+
+    public static Option webconsole() {
+        return mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.webconsole").version(versionResolver);
+    }
+[# th:each="feature : ${features}"]
+    public static Option [(${feature.javaName})]() {
+        return composite([# th:each="fc,fcsStatus : ${feature.getFeatures()}"]
+            [(${fc})]()[# th:unless="${fcsStatus.last}"],[/][/][# th:if="${not #lists.isEmpty(feature.getFeatures())}"][# th:if="${not #lists.isEmpty(feature.getBundles())}"],[/][/][# th:each="bundle,bundlesStatus : ${feature.getBundles()}"]
+            mavenBundle().groupId("[(${bundle.groupId})]").artifactId("[(${bundle.artifactId})]").version(versionResolver)[# th:unless="${bundlesStatus.last}"],[/][/][# th:if="${not #lists.isEmpty(feature.getConfigurations())}"],[/][# th:each="configuration,configurationsStatus : ${feature.getConfigurations()}"]
+            [# th:if="${configuration.isFactory()}"]factoryConfiguration[/][# th:unless="${configuration.isFactory()}"]newConfiguration[/]("[(${configuration.pid})]")    [# th:each="entry,entriesStatus : ${configuration.getEntries()}"]
+                .put("[(${entry.key})]", "[(${entry.value})]")[/]
+                .asOption()[# th:unless="${configurationsStatus.last}"],[/][/]
+        );
+    }
+
+[/]}
diff --git a/src/main/resources/templates/SlingVersionResolver.txt b/src/main/resources/templates/SlingVersionResolver.txt
new file mode 100644
index 0000000..8611187
--- /dev/null
+++ b/src/main/resources/templates/SlingVersionResolver.txt
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.testing.paxexam;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.ops4j.pax.exam.options.MavenUrlReference.VersionResolver;
+
+/**
+ * NOTE: This file is generated from Sling's Launchpad Karaf Features
+ */
+public class SlingVersionResolver implements VersionResolver {
+
+    private final Map<String, String> versions = new HashMap<>();
+
+    public SlingVersionResolver() {
+        versions.put("org.apache.felix:org.apache.felix.configadmin", "1.8.8");
+        versions.put("org.apache.felix:org.apache.felix.eventadmin", "1.4.6");
+        versions.put("org.apache.felix:org.apache.felix.http.jetty", "3.2.0");
+        versions.put("org.apache.felix:org.apache.felix.http.servlet-api", "1.1.2");
+        versions.put("org.apache.felix:org.apache.felix.http.whiteboard", "3.0.0");
+        versions.put("org.apache.aries:org.apache.aries.util", "1.1.1");
+        versions.put("org.apache.aries.jmx:org.apache.aries.jmx.api", "1.1.5");
+        versions.put("org.apache.aries.jmx:org.apache.aries.jmx.core", "1.1.6");
+        versions.put("org.apache.aries.jmx:org.apache.aries.jmx.whiteboard", "1.1.5");
+        versions.put("org.apache.felix:org.apache.felix.metatype", "1.1.2");
+        versions.put("org.apache.felix:org.apache.felix.scr", "2.0.2");
+        versions.put("org.apache.felix:org.apache.felix.webconsole", "4.2.16");[# th:each="bundle : ${bundles}"]
+        versions.put("[(${bundle.groupId})]:[(${bundle.artifactId})]", "[(${bundle.version})]");
+[/]    }
+
+    private String key(final String groupId, final String artifactId) {
+        return String.format("%s:%s", groupId, artifactId);
+    }
+
+    public String setVersion(final String groupId, final String artifactId, final String version) {
+        return versions.put(key(groupId, artifactId), version);
+    }
+
+    @Override
+    public String getVersion(final String groupId, final String artifactId) {
+        return versions.get(key(groupId, artifactId));
+    }
+
+}

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.