Add annotation based requires and provides. Create feature bundle for shell deps
diff --git a/pom.xml b/pom.xml
index 3396c07..14f2212 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,7 +35,7 @@
 	<properties>
 		<reactor.version>3.0.7.RELEASE</reactor.version>
 		<jetty.version>8.1.15.v20140411</jetty.version>
-		<cxf.version>3.1.2</cxf.version>
+		<cxf.version>3.1.12</cxf.version>
 		<bnd.version>3.4.0-SNAPSHOT</bnd.version>
 	</properties>
 
@@ -83,6 +83,12 @@
 			<version>6.0.0</version>
 			<scope>provided</scope>
 		</dependency>
+        <dependency>
+            <groupId>biz.aQute.bnd</groupId>
+            <artifactId>biz.aQute.bndlib</artifactId>
+            <version>3.4.0</version>
+            <scope>provided</scope>
+        </dependency>
 
 		<dependency>
 			<groupId>org.slf4j</groupId>
diff --git a/rcomp-api/pom.xml b/rcomp-api/pom.xml
index a33ff5d..ed83fef 100644
--- a/rcomp-api/pom.xml
+++ b/rcomp-api/pom.xml
@@ -6,4 +6,6 @@
     <version>1.0.0-SNAPSHOT</version>
   </parent>
   <artifactId>rcomp-api</artifactId>
+  
+
 </project>
\ No newline at end of file
diff --git a/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ProvComp.java b/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ProvComp.java
new file mode 100644
index 0000000..18096f4
--- /dev/null
+++ b/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ProvComp.java
@@ -0,0 +1,8 @@
+package org.apache.karaf.rcomp.api;
+
+import aQute.bnd.annotation.headers.ProvideCapability;
+
+@ProvideCapability( ns="rcomp")
+public @interface ProvComp {
+    String name();
+}
diff --git a/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ReqComp.java b/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ReqComp.java
new file mode 100644
index 0000000..49eadf4
--- /dev/null
+++ b/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ReqComp.java
@@ -0,0 +1,27 @@
+/*
+ * 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.karaf.rcomp.api;
+
+import java.lang.annotation.Repeatable;
+
+import aQute.bnd.annotation.headers.RequireCapability;
+
+@RequireCapability( ns="rcomp", filter="(rcomp=${value})")
+@Repeatable(ReqComps.class)
+public @interface ReqComp {
+    String value();
+}
diff --git a/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ReqComps.java b/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ReqComps.java
new file mode 100644
index 0000000..f76979c
--- /dev/null
+++ b/rcomp-api/src/main/java/org/apache/karaf/rcomp/api/ReqComps.java
@@ -0,0 +1,21 @@
+/*
+ * 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.karaf.rcomp.api;
+
+public @interface ReqComps {
+    ReqComp[] value();
+}
diff --git a/rcomp-app/pom.xml b/rcomp-app/pom.xml
index 3fc0c12..011e0f3 100644
--- a/rcomp-app/pom.xml
+++ b/rcomp-app/pom.xml
@@ -1,234 +1,279 @@
 <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.karaf.rcomp</groupId>
-		<artifactId>rcomp-parent</artifactId>
-		<version>1.0.0-SNAPSHOT</version>
-	</parent>
-	<artifactId>rcomp-app</artifactId>
+    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.karaf.rcomp</groupId>
+        <artifactId>rcomp-parent</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>rcomp-app</artifactId>
 
-	<properties>
-		<rcomp.version>${project.version}</rcomp.version>
-		<exam.version>4.11.0</exam.version>
-	</properties>
+    <properties>
+        <rcomp.version>${project.version}</rcomp.version>
+        <exam.version>4.11.0</exam.version>
+    </properties>
 
-	<dependencies>
-		<dependency>
-			<groupId>org.apache.karaf.rcomp</groupId>
-			<artifactId>rcomp-api</artifactId>
-			<version>${rcomp.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.karaf.rcomp</groupId>
-			<artifactId>rcomp-eventadmin</artifactId>
-			<version>${rcomp.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.karaf.rcomp</groupId>
-			<artifactId>rcomp-mail</artifactId>
-			<version>${rcomp.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.karaf.rcomp</groupId>
-			<artifactId>rcomp-mqtt</artifactId>
-			<version>${rcomp.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.karaf.rcomp</groupId>
-			<artifactId>rcomp-examples</artifactId>
-			<version>${rcomp.version}</version>
-		</dependency>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.rcomp</groupId>
+            <artifactId>rcomp-api</artifactId>
+            <version>${rcomp.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.rcomp</groupId>
+            <artifactId>rcomp-eventadmin</artifactId>
+            <version>${rcomp.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.rcomp</groupId>
+            <artifactId>rcomp-mail</artifactId>
+            <version>${rcomp.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.rcomp</groupId>
+            <artifactId>rcomp-mqtt</artifactId>
+            <version>${rcomp.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.rcomp</groupId>
+            <artifactId>rcomp-examples</artifactId>
+            <version>${rcomp.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.rcomp</groupId>
+            <artifactId>rcomp-feature-shell</artifactId>
+            <version>${rcomp.version}</version>
+        </dependency>
 
 		<!-- Basic Felix bundles -->
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.framework</artifactId>
-			<version>5.6.4</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.eventadmin</artifactId>
-			<version>1.4.6</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.configadmin</artifactId>
-			<version>1.8.8</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.metatype</artifactId>
-			<version>1.1.2</version>
-			<exclusions>
-				<exclusion>
-					<artifactId>kxml2</artifactId>
-					<groupId>net.sf.kxml</groupId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.fileinstall</artifactId>
-			<version>3.5.2</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.gogo.command</artifactId>
-			<version>1.0.0</version>
-			<exclusions>
-				<exclusion>
-					<artifactId>org.osgi.core</artifactId>
-					<groupId>org.osgi</groupId>
-				</exclusion>
-				<exclusion>
-					<artifactId>org.osgi.compendium</artifactId>
-					<groupId>org.osgi</groupId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.gogo.jline</artifactId>
-			<version>1.0.6</version>
-		</dependency>
-		<dependency>
-			<groupId>org.jline</groupId>
-			<artifactId>jline</artifactId>
-			<version>3.3.1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.scr</artifactId>
-			<version>2.0.12</version>
-			<exclusions>
-				<exclusion>
-					<artifactId>animal-sniffer-annotations</artifactId>
-					<groupId>org.codehaus.mojo</groupId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.http.jetty</artifactId>
-			<version>3.0.0</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.eclipse.jetty</groupId>
-					<artifactId>jetty-server</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.eclipse.jetty.websocket</groupId>
-					<artifactId>websocket-server</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.apache.felix</groupId>
-					<artifactId>org.apache.felix.http.base</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.framework</artifactId>
+            <version>5.6.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.eventadmin</artifactId>
+            <version>1.4.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.configadmin</artifactId>
+            <version>1.8.8</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.metatype</artifactId>
+            <version>1.1.2</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>kxml2</artifactId>
+                    <groupId>net.sf.kxml</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.fileinstall</artifactId>
+            <version>3.5.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.gogo.command</artifactId>
+            <version>1.0.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>org.osgi.core</artifactId>
+                    <groupId>org.osgi</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>org.osgi.compendium</artifactId>
+                    <groupId>org.osgi</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.gogo.jline</artifactId>
+            <version>1.0.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.jline</groupId>
+            <artifactId>jline</artifactId>
+            <version>3.3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr</artifactId>
+            <version>2.0.12</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>animal-sniffer-annotations</artifactId>
+                    <groupId>org.codehaus.mojo</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.http.jetty</artifactId>
+            <version>3.0.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.eclipse.jetty</groupId>
+                    <artifactId>jetty-server</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.eclipse.jetty.websocket</groupId>
+                    <artifactId>websocket-server</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>org.apache.felix.http.base</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
 
-		<dependency>
-			<groupId>org.ops4j.pax.logging</groupId>
-			<artifactId>pax-logging-service</artifactId>
-			<version>1.8.5</version>
-		</dependency>
+        <dependency>
+            <groupId>org.ops4j.pax.logging</groupId>
+            <artifactId>pax-logging-service</artifactId>
+            <version>1.8.5</version>
+        </dependency>
 
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.bundlerepository</artifactId>
-			<version>2.0.10</version>
-		</dependency>
-		<dependency>
-			<groupId>javax.inject</groupId>
-			<artifactId>javax.inject</artifactId>
-			<version>1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.ops4j.pax.exam</groupId>
-			<artifactId>pax-exam</artifactId>
-			<version>${exam.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.ops4j.pax.exam</groupId>
-			<artifactId>pax-exam-link-assembly</artifactId>
-			<version>${exam.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.ops4j.pax.exam</groupId>
-			<artifactId>pax-exam-container-native</artifactId>
-			<version>${exam.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.ops4j.pax.exam</groupId>
-			<artifactId>pax-exam-junit4</artifactId>
-			<version>${exam.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.12</version>
-			<scope>test</scope>
-		</dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.bundlerepository</artifactId>
+            <version>2.0.10</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <version>1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.ops4j.pax.exam</groupId>
+            <artifactId>pax-exam</artifactId>
+            <version>${exam.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.ops4j.pax.exam</groupId>
+            <artifactId>pax-exam-link-assembly</artifactId>
+            <version>${exam.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.ops4j.pax.exam</groupId>
+            <artifactId>pax-exam-container-native</artifactId>
+            <version>${exam.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.ops4j.pax.exam</groupId>
+            <artifactId>pax-exam-junit4</artifactId>
+            <version>${exam.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
 
+        <dependency>
+            <groupId>biz.aQute.bnd</groupId>
+            <artifactId>biz.aQute.bndlib</artifactId>
+            <version>${bnd.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>biz.aQute.bnd</groupId>
+            <artifactId>biz.aQute.resolve</artifactId>
+            <version>${bnd.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>biz.aQute.bnd</groupId>
+            <artifactId>biz.aQute.repository</artifactId>
+            <version>${bnd.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>biz.aQute.bnd</groupId>
+            <artifactId>bnd-shared-maven-lib</artifactId>
+            <version>${bnd.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <version>3.2.2</version>
+        </dependency>
+<!-- 
 		<dependency>
-			<groupId>biz.aQute.bnd</groupId>
-			<artifactId>biz.aQute.bndlib</artifactId>
-			<version>${bnd.version}</version>
+		    <groupId>org.apache.activemq</groupId>
+		    <artifactId>activemq-osgi</artifactId>
+		    <version>5.15.0</version>
 		</dependency>
 		<dependency>
-			<groupId>biz.aQute.bnd</groupId>
-			<artifactId>biz.aQute.resolve</artifactId>
-			<version>${bnd.version}</version>
+		    <groupId>org.ow2.asm</groupId>
+		    <artifactId>asm-all</artifactId>
+		    <version>5.2</version>
 		</dependency>
 		<dependency>
-			<groupId>biz.aQute.bnd</groupId>
-			<artifactId>biz.aQute.repository</artifactId>
-			<version>${bnd.version}</version>
+		    <groupId>org.apache.aries.blueprint</groupId>
+		    <artifactId>org.apache.aries.blueprint.core</artifactId>
+		    <version>1.8.2</version>
 		</dependency>
-		<dependency>
-			<groupId>biz.aQute.bnd</groupId>
-			<artifactId>bnd-shared-maven-lib</artifactId>
-			<version>${bnd.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>commons-collections</groupId>
-			<artifactId>commons-collections</artifactId>
-			<version>3.2.2</version>
-		</dependency>
-	</dependencies>
+         -->
+    </dependencies>
 
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>biz.aQute.bnd</groupId>
-				<artifactId>bnd-export-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<phase>process-resources</phase>
-					</execution>
-				</executions>
-				<configuration>
-					<bndruns>
-						<bndrun>rcomp-example.bndrun</bndrun>
-					</bndruns>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.servicemix.tooling</groupId>
-				<artifactId>depends-maven-plugin</artifactId>
-				<version>1.4.0</version>
-				<executions>
-					<execution>
-						<goals>
-							<goal>generate-depends-file</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>biz.aQute.bnd</groupId>
+                <artifactId>bnd-indexer-maven-plugin</artifactId>
+                <version>${bnd.version}</version>
+                <configuration>
+                    <localURLs>REQUIRED</localURLs>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>index</id>
+                        <goals>
+                            <goal>index</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>biz.aQute.bnd</groupId>
+                <artifactId>bnd-export-maven-plugin</artifactId>
+                <version>${bnd.version}</version>
+                <configuration>
+                    <resolve>true</resolve>
+                    <failOnChanges>false</failOnChanges>
+                    <bndruns>
+                        <bndrun>rcomp-example.bndrun</bndrun>
+                    </bndruns>
+                    <executions>
+                        <execution>
+                            <goals>
+                                <goal>export</goal>
+                            </goals>
+                        </execution>
+                    </executions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.servicemix.tooling</groupId>
+                <artifactId>depends-maven-plugin</artifactId>
+                <version>1.4.0</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>generate-depends-file</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
 </project>
\ No newline at end of file
diff --git a/rcomp-app/rcomp-example.bndrun b/rcomp-app/rcomp-example.bndrun
index f76f050..d0a1951 100644
--- a/rcomp-app/rcomp-example.bndrun
+++ b/rcomp-app/rcomp-example.bndrun
@@ -1,15 +1,15 @@
-#-standalone: ${.}/target/index.xml
--standalone: true
--plugin.rcomp-index = \
-    aQute.bnd.repository.maven.pom.provider.BndPomRepository; \
-        snapshotUrls=https://oss.sonatype.org/content/repositories/osgi/; \
-        releaseUrls=https://repo1.maven.org/maven2/; \
-        pom=${.}/pom.xml; \
-        name=rcomp
+-standalone: ${.}/target/index.xml
+#-standalone: true
+#-plugin.rcomp-index = \
+#    aQute.bnd.repository.maven.pom.provider.BndPomRepository; \
+#        snapshotUrls=https://oss.sonatype.org/content/repositories/osgi/; \
+#        releaseUrls=https://repo1.maven.org/maven2/; \
+#        pom=${.}/pom.xml; \
+#        name=rcomp
 
 -runsystemcapabilities: ${native_capability}
 
--resolve.effective: active;skip:="osgi.service"
+#-resolve.effective: active;skip:="osgi.service"
 
 -runblacklist: \
 	osgi.identity;filter:='(osgi.identity=slf4j.api)',\
@@ -31,26 +31,23 @@
 	felix.fileinstall.noInitialDelay=true,\
 	felix.fileinstall.enableConfigSave=false
 -runrequires: \
-	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.jline)',\
-	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)',\
-	osgi.identity;filter:='(&(osgi.identity=org.apache.felix.configadmin)(version>=1.8.8))',\
-	osgi.identity;filter:='(osgi.identity=rcomp-mqtt)',\
 	osgi.identity;filter:='(osgi.identity=rcomp-examples)',\
-	osgi.identity;filter:='(osgi.identity=rcomp-eventadmin)'
+	osgi.identity;filter:='(osgi.identity=rcomp-feature-shell)'
 -runbundles: \
 	io.projectreactor.reactor-core;version='[3.0.7,3.0.8)',\
-	org.apache.felix.bundlerepository;version='[2.0.10,2.0.11)',\
-	org.apache.felix.configadmin;version='[1.8.8,1.8.9)',\
 	org.apache.felix.eventadmin;version='[1.4.6,1.4.7)',\
-	org.apache.felix.gogo.command;version='[1.0.0,1.0.1)',\
-	org.apache.felix.gogo.jline;version='[1.0.6,1.0.7)',\
-	org.apache.felix.gogo.runtime;version='[1.0.0,1.0.1)',\
 	org.apache.felix.scr;version='[2.0.12,2.0.13)',\
 	org.eclipse.paho.client.mqttv3;version='[1.1.1,1.1.2)',\
-	org.jline;version='[3.3.1,3.3.2)',\
 	org.ops4j.pax.logging.pax-logging-api;version='[1.8.5,1.8.6)',\
 	org.reactivestreams.reactive-streams;version='[1.0.0,1.0.1)',\
 	rcomp-api;version='[1.0.0,1.0.1)',\
 	rcomp-eventadmin;version='[1.0.0,1.0.1)',\
 	rcomp-examples;version='[1.0.0,1.0.1)',\
-	rcomp-mqtt;version='[1.0.0,1.0.1)'
\ No newline at end of file
+	rcomp-mqtt;version='[1.0.0,1.0.1)',\
+	org.apache.felix.bundlerepository;version='[2.0.10,2.0.11)',\
+	org.apache.felix.configadmin;version='[1.8.8,1.8.9)',\
+	org.apache.felix.gogo.command;version='[1.0.0,1.0.1)',\
+	org.apache.felix.gogo.jline;version='[1.0.6,1.0.7)',\
+	org.apache.felix.gogo.runtime;version='[1.0.0,1.0.1)',\
+	org.jline;version='[3.3.1,3.3.2)',\
+	rcomp-feature-shell;version='[1.0.0,1.0.1)'
\ No newline at end of file
diff --git a/rcomp-app/src/test/java/org/apache/karaf/rcomp/itest/EventAdminTest.java b/rcomp-app/src/test/java/org/apache/karaf/rcomp/itest/EventAdminTest.java
index c8395be..afa5c78 100644
--- a/rcomp-app/src/test/java/org/apache/karaf/rcomp/itest/EventAdminTest.java
+++ b/rcomp-app/src/test/java/org/apache/karaf/rcomp/itest/EventAdminTest.java
@@ -23,6 +23,7 @@
 
 import javax.inject.Inject;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Configuration;
@@ -31,7 +32,7 @@
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 
-@RunWith(PaxExam.class)
+//@RunWith(PaxExam.class)
 public class EventAdminTest {
     @Inject
     EventAdmin eventAdmin;
@@ -42,6 +43,7 @@
     }
 
     @Test
+    @Ignore
     public void test() {
         Map<String, String> properties = new HashMap<>();
         eventAdmin.sendEvent(new Event("eainput", properties));
diff --git a/rcomp-eventadmin/src/main/java/org/apache/karaf/rcomp/eventadmin/EventAdminComponent.java b/rcomp-eventadmin/src/main/java/org/apache/karaf/rcomp/eventadmin/EventAdminComponent.java
index ba2e129..3f3158e 100644
--- a/rcomp-eventadmin/src/main/java/org/apache/karaf/rcomp/eventadmin/EventAdminComponent.java
+++ b/rcomp-eventadmin/src/main/java/org/apache/karaf/rcomp/eventadmin/EventAdminComponent.java
@@ -16,6 +16,7 @@
  */
 package org.apache.karaf.rcomp.eventadmin;
 
+import org.apache.karaf.rcomp.api.ProvComp;
 import org.apache.karaf.rcomp.api.RComponent;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.component.annotations.Activate;
@@ -26,6 +27,7 @@
 import org.reactivestreams.Publisher;
 import org.reactivestreams.Subscriber;
 
+@ProvComp(name="eventAdmin")
 @Component(property="name=eventAdmin")
 public class EventAdminComponent implements RComponent {
     
diff --git a/rcomp-examples/kafka-appender/src/main/java/net/lr/reactive/components/appender/kafka/KafkaAppender.java b/rcomp-examples/kafka-appender/src/main/java/net/lr/reactive/components/appender/kafka/KafkaAppender.java
index baf86ff..967fa3d 100644
--- a/rcomp-examples/kafka-appender/src/main/java/net/lr/reactive/components/appender/kafka/KafkaAppender.java
+++ b/rcomp-examples/kafka-appender/src/main/java/net/lr/reactive/components/appender/kafka/KafkaAppender.java
@@ -21,6 +21,7 @@
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.karaf.decanter.api.marshaller.Marshaller;
 import org.apache.karaf.rcomp.api.RComponent;
+import org.apache.karaf.rcomp.api.ReqComp;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -35,6 +36,7 @@
 
 import reactor.core.publisher.Flux;
 
+@ReqComp("kafka")
 @Component(
     name = "appender.kafka",
     immediate = true,
diff --git a/rcomp-examples/pom.xml b/rcomp-examples/pom.xml
index de0c807..d16d652 100644
--- a/rcomp-examples/pom.xml
+++ b/rcomp-examples/pom.xml
@@ -13,5 +13,6 @@
     <modules>
         <module>rcomp-examples</module>
         <module>kafka-appender</module>
+        <module>rcomp-feature-shell</module>
     </modules>
 </project>
\ No newline at end of file
diff --git a/rcomp-examples/rcomp-examples/bnd.bnd b/rcomp-examples/rcomp-examples/bnd.bnd
index 6b034bd..5d220e0 100644
--- a/rcomp-examples/rcomp-examples/bnd.bnd
+++ b/rcomp-examples/rcomp-examples/bnd.bnd
@@ -1,2 +1,2 @@
 Web-ContextPath:/rcomp-examples
-Private-Package: reactor.math
\ No newline at end of file
+Private-Package: reactor.math
diff --git a/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/EventAdminExample.java b/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/EventAdminExample.java
index 7cbd11f..a309631 100644
--- a/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/EventAdminExample.java
+++ b/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/EventAdminExample.java
@@ -19,6 +19,7 @@
 import java.util.Map;
 
 import org.apache.karaf.rcomp.api.RComponent;
+import org.apache.karaf.rcomp.api.ReqComp;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
@@ -29,6 +30,7 @@
 
 import reactor.core.publisher.Flux;
 
+@ReqComp("eventAdmin")
 @Component(immediate=true)
 public class EventAdminExample {
     Logger LOG = LoggerFactory.getLogger(EventAdminExample.class);
diff --git a/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttEmitter.java b/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttEmitter.java
index 2896a80..14f8dbf 100644
--- a/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttEmitter.java
+++ b/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttEmitter.java
@@ -19,6 +19,7 @@
 import java.time.Duration;
 
 import org.apache.karaf.rcomp.api.RComponent;
+import org.apache.karaf.rcomp.api.ReqComp;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
@@ -29,6 +30,7 @@
 
 import reactor.core.publisher.Flux;
 
+@ReqComp("mqtt")
 @Component(immediate=true)
 public class MqttEmitter {
     Logger LOG = LoggerFactory.getLogger(MqttEmitter.class);
diff --git a/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttExample.java b/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttExample.java
index 7faaa98..3698317 100644
--- a/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttExample.java
+++ b/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttExample.java
@@ -17,6 +17,7 @@
 package org.apache.karaf.rcomp.examples.mqtt;
 
 import org.apache.karaf.rcomp.api.RComponent;
+import org.apache.karaf.rcomp.api.ReqComp;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
@@ -28,6 +29,7 @@
 import reactor.core.publisher.Flux;
 import reactor.math.MathFlux;
 
+@ReqComp("mqtt")
 @Component(immediate=true)
 public class MqttExample {
     Logger LOG = LoggerFactory.getLogger(MqttExample.class);
diff --git a/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttReceiver.java b/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttReceiver.java
index 44b9853..03eca67 100644
--- a/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttReceiver.java
+++ b/rcomp-examples/rcomp-examples/src/main/java/org/apache/karaf/rcomp/examples/mqtt/MqttReceiver.java
@@ -19,6 +19,7 @@
 import java.util.function.Consumer;
 
 import org.apache.karaf.rcomp.api.RComponent;
+import org.apache.karaf.rcomp.api.ReqComp;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
@@ -30,6 +31,7 @@
 import reactor.core.Disposable;
 import reactor.core.publisher.Flux;
 
+@ReqComp("mqtt")
 @Component(immediate=true)
 public class MqttReceiver implements Consumer<Double>{
     Logger LOG = LoggerFactory.getLogger(MqttReceiver.class);
diff --git a/rcomp-examples/rcomp-feature-shell/bnd.bnd b/rcomp-examples/rcomp-feature-shell/bnd.bnd
new file mode 100644
index 0000000..bb47985
--- /dev/null
+++ b/rcomp-examples/rcomp-feature-shell/bnd.bnd
@@ -0,0 +1,4 @@
+Require-Capability:\
+	osgi.identity;filter:='(osgi.identity=org.apache.felix.configadmin)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)',\
+	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.jline)'
diff --git a/rcomp-examples/rcomp-feature-shell/pom.xml b/rcomp-examples/rcomp-feature-shell/pom.xml
new file mode 100644
index 0000000..be1453c
--- /dev/null
+++ b/rcomp-examples/rcomp-feature-shell/pom.xml
@@ -0,0 +1,55 @@
+<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.karaf.rcomp</groupId>
+        <artifactId>rcomp-parent</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+    <artifactId>rcomp-feature-shell</artifactId>
+    <!-- <repositories> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> 
+        <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> 
+        </snapshots> </repository> </repositories> -->
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.rcomp</groupId>
+            <artifactId>rcomp-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.projectreactor</groupId>
+            <artifactId>reactor-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.projectreactor.addons</groupId>
+            <artifactId>reactor-extra</artifactId>
+            <version>${reactor.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.projectreactor.addons</groupId>
+            <artifactId>reactor-adapter</artifactId>
+            <version>${reactor.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-rs-client</artifactId>
+            <version>${cxf.version}</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlet</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+    </dependencies>
+</project>
\ No newline at end of file
diff --git a/rcomp-kafka/src/main/java/org/apache/karaf/rcomp/kafka/KafkaComponent.java b/rcomp-kafka/src/main/java/org/apache/karaf/rcomp/kafka/KafkaComponent.java
index c06c454..476f68b 100644
--- a/rcomp-kafka/src/main/java/org/apache/karaf/rcomp/kafka/KafkaComponent.java
+++ b/rcomp-kafka/src/main/java/org/apache/karaf/rcomp/kafka/KafkaComponent.java
@@ -18,6 +18,7 @@
 
 import java.util.Dictionary;
 
+import org.apache.karaf.rcomp.api.ProvComp;
 import org.apache.karaf.rcomp.api.RComponent;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
@@ -27,6 +28,7 @@
 import org.reactivestreams.Publisher;
 import org.reactivestreams.Subscriber;
 
+@ProvComp(name="kafka")
 @Component(immediate = true, 
     configurationPolicy = ConfigurationPolicy.REQUIRE,
     property = "name=kafka"
diff --git a/rcomp-mail/src/main/java/org/apache/karaf/rcomp/mail/MailComponent.java b/rcomp-mail/src/main/java/org/apache/karaf/rcomp/mail/MailComponent.java
index a12328b..89c41d1 100644
--- a/rcomp-mail/src/main/java/org/apache/karaf/rcomp/mail/MailComponent.java
+++ b/rcomp-mail/src/main/java/org/apache/karaf/rcomp/mail/MailComponent.java
@@ -18,12 +18,14 @@
 
 import javax.mail.Session;
 
+import org.apache.karaf.rcomp.api.ProvComp;
 import org.apache.karaf.rcomp.api.RComponent;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.reactivestreams.Publisher;
 import org.reactivestreams.Subscriber;
 
+@ProvComp(name="mail")
 @Component(property="name=mail")
 public class MailComponent implements RComponent {
     
diff --git a/rcomp-mqtt/src/main/java/org/apache/karaf/rcomp/mqtt/MqttComponent.java b/rcomp-mqtt/src/main/java/org/apache/karaf/rcomp/mqtt/MqttComponent.java
index 2227921..6fd5f22 100644
--- a/rcomp-mqtt/src/main/java/org/apache/karaf/rcomp/mqtt/MqttComponent.java
+++ b/rcomp-mqtt/src/main/java/org/apache/karaf/rcomp/mqtt/MqttComponent.java
@@ -19,6 +19,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import org.apache.karaf.rcomp.api.ProvComp;
 import org.apache.karaf.rcomp.api.RComponent;
 import org.eclipse.paho.client.mqttv3.MqttClient;
 import org.eclipse.paho.client.mqttv3.MqttException;
@@ -30,6 +31,7 @@
 import org.reactivestreams.Publisher;
 import org.reactivestreams.Subscriber;
 
+@ProvComp(name="mqtt")
 @Component(property="name=mqtt")
 public class MqttComponent implements RComponent {