Refactoring of karaf-boot
diff --git a/OSGI-INF/karaf-tracker/sample.osgi.service.provider.Activator b/OSGI-INF/karaf-tracker/sample.osgi.service.provider.Activator
new file mode 100644
index 0000000..12b26d7
--- /dev/null
+++ b/OSGI-INF/karaf-tracker/sample.osgi.service.provider.Activator
@@ -0,0 +1 @@
+#Thu Sep 24 22:02:56 CEST 2015
diff --git a/karaf-boot-parent/pom.xml b/karaf-boot-parent/pom.xml
deleted file mode 100644
index 9142128..0000000
--- a/karaf-boot-parent/pom.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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>
-
-    <groupId>org.apache.karaf.boot</groupId>
-    <artifactId>karaf-boot-parent</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
-    <packaging>pom</packaging>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.boot</groupId>
-            <artifactId>karaf-boot</artifactId>
-            <version>1.0.0-SNAPSHOT</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.karaf.boot</groupId>
-                <artifactId>karaf-boot-maven-plugin</artifactId>
-                <version>1.0.0-SNAPSHOT</version>
-                <inherited>true</inherited>
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>generate</goal>
-                        </goals>
-                        <configuration>
-                            <scanPaths>
-                                <scanPath>${project.build.sourceDirectory}</scanPath>
-                            </scanPaths>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.5.4</version>
-                <inherited>true</inherited>
-                <extensions>true</extensions>
-                <configuration>
-                    <supportedProjectTypes>
-                        <supportedProjectType>jar</supportedProjectType>
-                        <supportedProjectType>war</supportedProjectType>
-                    </supportedProjectTypes>
-                </configuration>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>bundle</goal>
-                        </goals>
-                        <configuration>
-                            <instructions>
-                                <Import-Package>
-                                    org.apache.karaf.boot*;resolution:=optional,
-                                    *
-                                </Import-Package>
-                            </instructions>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/karaf-boot-samples/README.md b/karaf-boot-samples/README.md
index 31be07a..d65c349 100644
--- a/karaf-boot-samples/README.md
+++ b/karaf-boot-samples/README.md
@@ -1,9 +1,16 @@
-* karaf-boot-simple
-    Simple bean
-* karaf-boot-service-provider
-    Service provider
-* karaf-boot-service-consumer
-    Service consumer
+* karaf-boot-sample-service-provider-osgi
+   Expose a service using the "native" Karaf OSGi layer (low level)
+* karaf-boot-sample-service-consumer-osgi
+   Use a service using the "native" Karaf OSGi layer (low level)
+
+* karaf-boot-services-osgi
+    Simple services using OSGi
+* karaf-boot-services-blueprint
+    Simple services using blueprint
+* karaf-boot-services-ds
+    Simple services using DS/SCR
+* karaf-boot-services-cdi
+    Simple services using CDI
 * karaf-boot-config-managed
     Managed by configuration (reload)
 * karaf-boot-servlet
@@ -17,4 +24,4 @@
 * karaf-boot-profile
     Build a profile based on karaf-boot definition
 * karaf-boot-starter
-    Package and configure Karaf as a ready to run artifact
\ No newline at end of file
+    Package and configure Karaf as a ready to run artifact
diff --git a/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/README.md b/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/README.md
new file mode 100644
index 0000000..93f69f7
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/README.md
@@ -0,0 +1,33 @@
+== karaf-boot-sample-service-provider-osgi ==
+
+This sample exposes an OSGi service using the Karaf util classe and annotation.
+
+= Design
+
+This artifact uses the hello service provided by another artifact (karaf-boot-sample-service-provider-ds for instance).
+
+It uses the DS annotations to create a bean with a reference (@Reference) to the hello service.
+In the HelloServiceClient bean, we use the @Activate annotation to execute a specific method.
+
+You don't think anything else: karaf-boot will generate all the plumbing for you, and you will directly have a ready
+to use artifact.
+
+= Build
+
+To build, simply do:
+
+  mvn clean install
+
+= Deploy
+
+To deploy in Karaf, you have to enable the DS support first. For that, you have to install the scr feature:
+
+  feature:install scr
+
+Once scr feature installed:
+
+* you can drop the generated jar file (target/karaf-boot-sample-service-consumer-ds-1.0.jar) in the
+Karaf deploy folder
+* in the Karaf shell console, do:
+
+  bundle:install -s mvn:karaf-boot-samples/karaf-boot-sample-service-consumer-ds/1.0
\ No newline at end of file
diff --git a/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/pom.xml b/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/pom.xml
new file mode 100644
index 0000000..c6b85c0
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+    <!--
+
+        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.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.apache.karaf.boot</groupId>
+    <artifactId>karaf-boot-sample-service-consumer-ds</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.boot</groupId>
+            <artifactId>karaf-boot-starter-ds</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.boot</groupId>
+            <artifactId>karaf-boot-sample-service-provider-ds</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.karaf.boot</groupId>
+                <artifactId>karaf-boot-maven-plugin</artifactId>
+                <version>${project.version}</version>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/src/main/java/sample/ds/service/consumer/HelloServiceClient.java b/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/src/main/java/sample/ds/service/consumer/HelloServiceClient.java
new file mode 100644
index 0000000..f70ebf7
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-consumer-ds/src/main/java/sample/ds/service/consumer/HelloServiceClient.java
@@ -0,0 +1,59 @@
+/**
+ *  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 sample.ds.service.consumer;
+
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import sample.ds.service.provider.HelloService;
+
+@Component
+public class HelloServiceClient implements Runnable {
+
+    private HelloService helloService;
+
+    private Thread thread;
+
+    @Activate
+    public void start() {
+        thread = new Thread(this);
+        thread.start();
+    }
+
+    @Deactivate
+    public void stop() {
+        thread.interrupt();
+    }
+
+    public void run() {
+        while (true) {
+            System.out.println(helloService.hello("World"));
+            try {
+                Thread.sleep(5000);
+            } catch (Exception e) {
+                // nothing to do
+            }
+        }
+    }
+
+    @Reference
+    public void setHelloService(HelloService helloService) {
+        this.helloService = helloService;
+    }
+
+}
diff --git a/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/README.md b/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/README.md
new file mode 100644
index 0000000..1684c81
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/README.md
@@ -0,0 +1,28 @@
+== karaf-boot-sample-service-consumer-osgi ==
+
+This sample uses an OSGi service using the Karaf util classe and annotation.
+
+= Design
+
+The service "contract" is exposed by another artifact (the karaf-boot-sample-service-provider-osgi module).
+
+The hello service is retrieved in the Activator of this artifact, and uses it directly.
+
+This Activator overrides the doStart() method, where we retrieve the HelloService using the getTrackedService() method. Karaf
+deals with all service lookup and tracking.
+
+= Build
+
+To build, simply do:
+
+  mvn clean install
+
+= Deploy
+
+To deploy in Karaf:
+
+* you can drop the generated jar file (target/karaf-boot-sample-service-provider-osgi-1.0.jar) in the
+Karaf deploy folder
+* in the Karaf shell console, do:
+
+  bundle:install -s mvn:karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/1.0
\ No newline at end of file
diff --git a/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/pom.xml b/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/pom.xml
new file mode 100644
index 0000000..c26cfbf
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+    <!--
+
+        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.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.apache.karaf.boot</groupId>
+    <artifactId>karaf-boot-sample-service-consumer-osgi</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.boot</groupId>
+            <artifactId>karaf-boot-starter</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf.boot</groupId>
+            <artifactId>karaf-boot-sample-service-provider-osgi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.karaf.boot</groupId>
+                <artifactId>karaf-boot-maven-plugin</artifactId>
+                <version>${project.version}</version>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
\ No newline at end of file
diff --git a/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/src/main/java/sample/osgi/service/consumer/Activator.java b/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/src/main/java/sample/osgi/service/consumer/Activator.java
new file mode 100644
index 0000000..fffd850
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-consumer-osgi/src/main/java/sample/osgi/service/consumer/Activator.java
@@ -0,0 +1,48 @@
+/**
+ *  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 sample.osgi.service.consumer;
+
+import org.apache.karaf.util.tracker.BaseActivator;
+import org.apache.karaf.util.tracker.annotation.RequireService;
+import org.apache.karaf.util.tracker.annotation.Services;
+import sample.osgi.service.provider.HelloService;
+
+/**
+ * Simple activator that retrieve the hello service and use it.
+ */
+@Services(
+        requires = {
+                @RequireService(HelloService.class)
+        }
+)
+public class Activator extends BaseActivator {
+
+    @Override
+    public void doStart() throws Exception {
+        HelloService helloService = getTrackedService(HelloService.class);
+
+        // basic usage, in real life, it could be injected and used in a bean or whatever
+        System.out.println("Hello " + helloService.hello("World"));
+    }
+
+    @Override
+    public void doStop() {
+        super.doStop();
+    }
+
+
+}
diff --git a/karaf-boot-samples/karaf-boot-sample-service-provider-ds/README.md b/karaf-boot-samples/karaf-boot-sample-service-provider-ds/README.md
new file mode 100644
index 0000000..0206a7b
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-ds/README.md
@@ -0,0 +1,35 @@
+== karaf-boot-sample-service-provider-ds ==
+
+This sample exposes an OSGi service using the Karaf util classe and annotation.
+
+= Design
+
+The service "contract" is describe by the Hello interface. It's a very simple service that expose one operation (hello).
+The service client send a message (String) to the hello service and he gets a response.
+
+The HelloServiceImpl is very simple: it prefixes the message with "Hello".
+
+We use the @Component DS annotation on HelloServiceImpl implementation in order to expose the service.
+
+You don't think anything else: karaf-boot will generate all the plumbing for you, and you will directly have a ready
+to use artifact.
+
+= Build
+
+To build, simply do:
+
+  mvn clean install
+
+= Deploy
+
+To deploy in Karaf, you have to enable the DS support first. For that, you have to install the scr feature:
+
+  feature:install scr
+
+Once scr feature installed:
+
+* you can drop the generated jar file (target/karaf-boot-sample-service-provider-ds-1.0.jar) in the
+Karaf deploy folder
+* in the Karaf shell console, do:
+
+  bundle:install -s mvn:karaf-boot-samples/karaf-boot-sample-service-provider-ds/1.0
\ No newline at end of file
diff --git a/karaf-boot-samples/karaf-boot-sample-simple/pom.xml b/karaf-boot-samples/karaf-boot-sample-service-provider-ds/pom.xml
similarity index 63%
rename from karaf-boot-samples/karaf-boot-sample-simple/pom.xml
rename to karaf-boot-samples/karaf-boot-sample-service-provider-ds/pom.xml
index 538503d..854a780 100644
--- a/karaf-boot-samples/karaf-boot-sample-simple/pom.xml
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-ds/pom.xml
@@ -21,13 +21,27 @@
 
     <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.apache.karaf.boot</groupId>
-        <artifactId>karaf-boot-parent</artifactId>
-        <version>1.0.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>karaf-boot-sample-simple</artifactId>
+    <groupId>org.apache.karaf.boot</groupId>
+    <artifactId>karaf-boot-sample-service-provider-ds</artifactId>
     <version>1.0.0-SNAPSHOT</version>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.boot</groupId>
+            <artifactId>karaf-boot-starter-ds</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.karaf.boot</groupId>
+                <artifactId>karaf-boot-maven-plugin</artifactId>
+                <version>${project.version}</version>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
\ No newline at end of file
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java b/karaf-boot-samples/karaf-boot-sample-service-provider-ds/src/main/java/sample/ds/service/provider/HelloService.java
similarity index 71%
copy from karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java
copy to karaf-boot-samples/karaf-boot-sample-service-provider-ds/src/main/java/sample/ds/service/provider/HelloService.java
index 725a220..50c2d30 100644
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-ds/src/main/java/sample/ds/service/provider/HelloService.java
@@ -14,15 +14,13 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.karaf.boot;
+package sample.ds.service.provider;
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+/**
+ * Simple hello service contract.
+ */
+public interface HelloService {
 
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ReferenceListener {
-    String ref() default "";
+    public String hello(String message);
+
 }
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java b/karaf-boot-samples/karaf-boot-sample-service-provider-ds/src/main/java/sample/ds/service/provider/HelloServiceImpl.java
similarity index 71%
copy from karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java
copy to karaf-boot-samples/karaf-boot-sample-service-provider-ds/src/main/java/sample/ds/service/provider/HelloServiceImpl.java
index 725a220..5319a47 100644
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-ds/src/main/java/sample/ds/service/provider/HelloServiceImpl.java
@@ -14,15 +14,18 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.karaf.boot;
+package sample.ds.service.provider;
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+import org.osgi.service.component.annotations.Component;
 
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ReferenceListener {
-    String ref() default "";
+/**
+ * Simple implementation of the hello service..
+ */
+@Component
+public class HelloServiceImpl implements HelloService {
+
+    public String hello(String message) {
+        return "Hello " + message + " !";
+    }
+
 }
diff --git a/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/README.md b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/README.md
new file mode 100644
index 0000000..3cd81c6
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/README.md
@@ -0,0 +1,33 @@
+== karaf-boot-sample-service-provider-osgi ==
+
+This sample exposes an OSGi service using the Karaf util classe and annotation.
+
+= Design
+
+The service "contract" is describe by the Hello interface. It's a very simple service that expose one operation (hello).
+The service client send a message (String) to the hello service and he gets a response.
+
+The HelloServiceImpl is very simple: it prefixes the message with "Hello".
+
+In order to expose this service, we create an Activator, extending Karaf util BaseActivator.
+Our activator contains the @Services annotation describing the provided services (@ProvideService annotation).
+
+In this activator, we override the doStart() method, where we instantiate the HelloServiceImpl bean and register the
+HelloService service using the register() method (provided by Karaf). The Karaf BaseActivator manages the service
+registration, so you don't have to take care about the unregistration of the service, etc.
+
+= Build
+
+To build, simply do:
+
+  mvn clean install
+
+= Deploy
+
+To deploy in Karaf:
+
+* you can drop the generated jar file (target/karaf-boot-sample-service-provider-osgi-1.0.jar) in the
+Karaf deploy folder
+* in the Karaf shell console, do:
+
+  bundle:install -s mvn:karaf-boot-samples/karaf-boot-sample-service-provider-osgi/1.0
\ No newline at end of file
diff --git a/karaf-boot-samples/karaf-boot-sample-simple/pom.xml b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/pom.xml
similarity index 63%
copy from karaf-boot-samples/karaf-boot-sample-simple/pom.xml
copy to karaf-boot-samples/karaf-boot-sample-service-provider-osgi/pom.xml
index 538503d..d1bb116 100644
--- a/karaf-boot-samples/karaf-boot-sample-simple/pom.xml
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/pom.xml
@@ -21,13 +21,27 @@
 
     <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.apache.karaf.boot</groupId>
-        <artifactId>karaf-boot-parent</artifactId>
-        <version>1.0.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>karaf-boot-sample-simple</artifactId>
+    <groupId>org.apache.karaf.boot</groupId>
+    <artifactId>karaf-boot-sample-service-provider-osgi</artifactId>
     <version>1.0.0-SNAPSHOT</version>
 
-</project>
\ No newline at end of file
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.boot</groupId>
+            <artifactId>karaf-boot-starter</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.karaf.boot</groupId>
+                <artifactId>karaf-boot-maven-plugin</artifactId>
+                <version>${project.version}</version>
+                <extensions>true</extensions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/Activator.java b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/Activator.java
new file mode 100644
index 0000000..9bc9b20
--- /dev/null
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/Activator.java
@@ -0,0 +1,41 @@
+/**
+ *  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 sample.osgi.service.provider;
+
+import org.apache.karaf.util.tracker.BaseActivator;
+import org.apache.karaf.util.tracker.annotation.ProvideService;
+import org.apache.karaf.util.tracker.annotation.Services;
+
+/**
+ * Simple activator registering the hello service.
+ */
+@Services(
+        provides = {
+                @ProvideService(HelloService.class)
+        }
+)
+public class Activator extends BaseActivator {
+
+    @Override
+    public void doStart() throws Exception {
+        // create hello service bean
+        HelloServiceImpl bean = new HelloServiceImpl();
+        // register the hello service
+        register(HelloService.class, bean);
+    }
+
+}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/HelloService.java
similarity index 71%
copy from karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java
copy to karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/HelloService.java
index 725a220..fc0a357 100644
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/HelloService.java
@@ -14,15 +14,13 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.karaf.boot;
+package sample.osgi.service.provider;
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+/**
+ * Simple hello service contract.
+ */
+public interface HelloService {
 
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ReferenceListener {
-    String ref() default "";
+    public String hello(String message);
+
 }
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/HelloServiceImpl.java
similarity index 71%
rename from karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java
rename to karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/HelloServiceImpl.java
index 725a220..c212205 100644
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceListener.java
+++ b/karaf-boot-samples/karaf-boot-sample-service-provider-osgi/src/main/java/sample/osgi/service/provider/HelloServiceImpl.java
@@ -14,15 +14,15 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.karaf.boot;
+package sample.osgi.service.provider;
 
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+/**
+ * Simple implementation of the hello service..
+ */
+public class HelloServiceImpl implements HelloService {
 
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ReferenceListener {
-    String ref() default "";
+    public String hello(String message) {
+        return "Hello " + message + " !";
+    }
+
 }
diff --git a/karaf-boot-samples/karaf-boot-sample-simple/src/main/java/org/apache/karaf/boot/sample/simple/SimpleBean.java b/karaf-boot-samples/karaf-boot-sample-simple/src/main/java/org/apache/karaf/boot/sample/simple/SimpleBean.java
deleted file mode 100644
index b89f733..0000000
--- a/karaf-boot-samples/karaf-boot-sample-simple/src/main/java/org/apache/karaf/boot/sample/simple/SimpleBean.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.apache.karaf.boot.sample.simple;
-
-import org.apache.karaf.boot.Bean;
-import org.apache.karaf.boot.Init;
-
-@Bean(id = "simple-bean")
-public class SimpleBean {
-
-    @Init
-    public void simple() {
-        System.out.println("Hello world");
-    }
-
-}
diff --git a/karaf-boot-starter/README.md b/karaf-boot-starter/README.md
deleted file mode 100644
index 43dc8e3..0000000
--- a/karaf-boot-starter/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-Karaf Boot Starter
-------------------
-Karaf Boot Starter provides a convenient way to create a ready to execute artifact, embedding Karaf.
-
-You just have to extend the KarafApplication class. In the config() method, you can define:
-- the configuration
-- the bundles
-- the features
-of your embedded Karaf instance.
-
-The Karaf Boot Starter Maven plugin will create the "key turn" jar that you can execute directly, on any machine.
\ No newline at end of file
diff --git a/karaf-boot-starter/pom.xml b/karaf-boot-starters/karaf-boot-starter-ds/pom.xml
similarity index 80%
copy from karaf-boot-starter/pom.xml
copy to karaf-boot-starters/karaf-boot-starter-ds/pom.xml
index 20fd28e..9add66a 100644
--- a/karaf-boot-starter/pom.xml
+++ b/karaf-boot-starters/karaf-boot-starter-ds/pom.xml
@@ -23,12 +23,19 @@
 
     <parent>
         <groupId>org.apache.karaf.boot</groupId>
-        <artifactId>karaf-boot-build</artifactId>
+        <artifactId>karaf-boot-starters</artifactId>
         <version>1.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>karaf-boot-starter</artifactId>
-    <packaging>pom</packaging>
+    <artifactId>karaf-boot-starter-ds</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <version>5.0.0</version>
+        </dependency>
+    </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/karaf-boot-starter/pom.xml b/karaf-boot-starters/karaf-boot-starter/pom.xml
similarity index 74%
copy from karaf-boot-starter/pom.xml
copy to karaf-boot-starters/karaf-boot-starter/pom.xml
index 20fd28e..21c0d07 100644
--- a/karaf-boot-starter/pom.xml
+++ b/karaf-boot-starters/karaf-boot-starter/pom.xml
@@ -23,12 +23,24 @@
 
     <parent>
         <groupId>org.apache.karaf.boot</groupId>
-        <artifactId>karaf-boot-build</artifactId>
+        <artifactId>karaf-boot-starters</artifactId>
         <version>1.0.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
 
     <artifactId>karaf-boot-starter</artifactId>
-    <packaging>pom</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <version>${osgi.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.karaf</groupId>
+            <artifactId>org.apache.karaf.util</artifactId>
+            <version>${karaf.version}</version>
+        </dependency>
+    </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/karaf-boot-starter/pom.xml b/karaf-boot-starters/pom.xml
similarity index 89%
rename from karaf-boot-starter/pom.xml
rename to karaf-boot-starters/pom.xml
index 20fd28e..04f6ff4 100644
--- a/karaf-boot-starter/pom.xml
+++ b/karaf-boot-starters/pom.xml
@@ -28,7 +28,12 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>karaf-boot-starter</artifactId>
+    <artifactId>karaf-boot-starters</artifactId>
     <packaging>pom</packaging>
 
+    <modules>
+        <module>karaf-boot-starter</module>
+        <module>karaf-boot-starter-ds</module>
+    </modules>
+
 </project>
\ No newline at end of file
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/pom.xml b/karaf-boot-tools/karaf-boot-maven-plugin/pom.xml
index 19bb184..8897be1 100644
--- a/karaf-boot-tools/karaf-boot-maven-plugin/pom.xml
+++ b/karaf-boot-tools/karaf-boot-maven-plugin/pom.xml
@@ -1,6 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <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">
 
+    <!--
+
+        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.
+    -->
+
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -15,63 +33,53 @@
 
     <dependencies>
         <dependency>
-            <groupId>javax.inject</groupId>
-            <artifactId>javax.inject</artifactId>
-            <version>1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.xbean</groupId>
-            <artifactId>xbean-finder-shaded</artifactId>
-            <version>4.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>4.1.0.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-tx</artifactId>
-            <version>4.1.0.RELEASE</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.persistence</groupId>
-            <artifactId>persistence-api</artifactId>
-            <version>1.0.2</version>
-        </dependency>
-        <dependency>
-            <groupId>javax.transaction</groupId>
-            <artifactId>javax.transaction-api</artifactId>
-            <version>1.2</version>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.cdi</groupId>
-            <artifactId>pax-cdi-api</artifactId>
-            <version>0.9.0</version>
-        </dependency>
-        <dependency>
             <groupId>org.apache.maven</groupId>
             <artifactId>maven-plugin-api</artifactId>
             <version>3.1.1</version>
         </dependency>
         <dependency>
+            <groupId>org.apache.maven.plugin-tools</groupId>
+            <artifactId>maven-plugin-annotations</artifactId>
+            <version>3.3</version>
+        </dependency>
+        <dependency>
             <groupId>org.apache.maven</groupId>
             <artifactId>maven-core</artifactId>
             <version>3.1.1</version>
         </dependency>
-
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.12</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.4</version>
-            <scope>test</scope>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-model</artifactId>
+            <version>3.2.1</version>
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-plugin-plugin</artifactId>
+                <version>3.3</version>
+                <configuration>
+                    <goalPrefix>karaf-boot</goalPrefix>
+                    <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>generate-descriptor</id>
+                        <goals>
+                            <goal>descriptor</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>generate-helpmojo</id>
+                        <goals>
+                            <goal>helpmojo</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
\ No newline at end of file
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/maven/GenerateMojo.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/maven/GenerateMojo.java
new file mode 100644
index 0000000..da9414d
--- /dev/null
+++ b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/maven/GenerateMojo.java
@@ -0,0 +1,87 @@
+package org.apache.karaf.boot.maven;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.descriptor.*;
+import org.apache.maven.plugins.annotations.*;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+
+import java.io.ByteArrayInputStream;
+
+@Mojo(name = "generate", threadSafe = true, defaultPhase = LifecyclePhase.PROCESS_CLASSES, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, inheritByDefault = false)
+public class GenerateMojo extends AbstractMojo {
+
+    @Parameter(defaultValue = "${project}", required = true, readonly = true)
+    private MavenProject mavenProject;
+
+    @Parameter(defaultValue = "${session}", required = true, readonly = true)
+    private MavenSession mavenSession;
+
+    @Component
+    private BuildPluginManager pluginManager;
+
+    public void execute() throws MojoExecutionException {
+        try {
+            // invoke Karaf services plugin
+            getLog().info("Invoking karaf-services-maven-plugin");
+            Plugin karafServicesPlugin = new Plugin();
+            karafServicesPlugin.setGroupId("org.apache.karaf.tooling");
+            karafServicesPlugin.setArtifactId("karaf-services-maven-plugin");
+            karafServicesPlugin.setVersion("4.0.1");
+            karafServicesPlugin.setInherited(false);
+            karafServicesPlugin.setExtensions(true);
+            Xpp3Dom configuration = Xpp3DomBuilder.build(new ByteArrayInputStream(("<configuration>" +
+                    "<project>${project}</project>" +
+                    "<activatorProperty>BNDExtension-Bundle-Activator</activatorProperty>" +
+                    "<requirementsProperty>BNDExtension-Require-Capability</requirementsProperty>" +
+                    "<capabilitiesProperty>BNDExtension-Provide-Capability</capabilitiesProperty>" +
+                    "<outputDirectory>${project.build.directory}/generated/karaf-tracker</outputDirectory>" +
+                    "<classLoader>project</classLoader>" +
+                    "</configuration>").getBytes()), "UTF-8");
+            PluginDescriptor karafServicesPluginDescriptor = pluginManager.loadPlugin(karafServicesPlugin, mavenProject.getRemotePluginRepositories(), mavenSession.getRepositorySession());
+            MojoDescriptor karafServicesMojoDescriptor = karafServicesPluginDescriptor.getMojo("service-metadata-generate");
+            MojoExecution execution = new MojoExecution(karafServicesMojoDescriptor, configuration);
+            pluginManager.executeMojo(mavenSession, execution);
+
+            // invoke Felix bundle plugin
+            getLog().info("Invoking maven-bundle-plugin");
+            Plugin felixBundlePlugin = new Plugin();
+            felixBundlePlugin.setGroupId("org.apache.felix");
+            felixBundlePlugin.setArtifactId("maven-bundle-plugin");
+            felixBundlePlugin.setVersion("3.0.0");
+            felixBundlePlugin.setInherited(true);
+            felixBundlePlugin.setExtensions(true);
+            // TODO if jpa-start is provided as persistence.xml location
+            configuration = Xpp3DomBuilder.build(new ByteArrayInputStream(("<configuration>" +
+                    "<finalName>${project.build.finalName}</finalName>" +
+                    "<outputDirectory>${project.build.outputDirectory}</outputDirectory>" +
+                    "<m_mavenSession>${session}</m_mavenSession>" +
+                    "<project>${project}</project>" +
+                    "<buildDirectory>${project.build.directory}</buildDirectory>" +
+                    "<supportedProjectTypes>" +
+                    "<supportedProjectType>jar</supportedProjectType>" +
+                    "<supportedProjectType>bundle</supportedProjectType>" +
+                    "<supportedProjectType>war</supportedProjectType>" +
+                    "</supportedProjectTypes>" +
+                    "<instructions>" +
+                    "<Private-Package>org.apache.karaf.util.tracker</Private-Package>" +
+                    "<_dsannotations>*</_dsannotations>" +
+                    "</instructions>" +
+                    "</configuration>").getBytes()), "UTF-8");
+            PluginDescriptor felixBundlePluginDescriptor = pluginManager.loadPlugin(felixBundlePlugin, mavenProject.getRemotePluginRepositories(), mavenSession.getRepositorySession());
+            MojoDescriptor felixBundleMojoDescriptor = felixBundlePluginDescriptor.getMojo("bundle");
+            execution = new MojoExecution(felixBundleMojoDescriptor, configuration);
+            pluginManager.executeMojo(mavenSession, execution);
+        } catch (Exception e) {
+            throw new MojoExecutionException("karaf-boot-maven-plugin failed", e);
+        }
+    }
+
+}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/FilteredClassFinder.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/FilteredClassFinder.java
deleted file mode 100644
index 7ba607b..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/FilteredClassFinder.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.inject.Singleton;
-
-import org.apache.xbean.finder.ClassFinder;
-import org.springframework.stereotype.Component;
-
-public class FilteredClassFinder {
-    
-    @SuppressWarnings("unchecked")
-    public static Set<Class<?>> findClasses(ClassFinder finder, Collection<String> packageNames) {
-        return findClasses(finder, packageNames, new Class[]{Singleton.class, Component.class});
-    }
-
-    public static Set<Class<?>> findClasses(ClassFinder finder, Collection<String> packageNames, Class<? extends Annotation>[] annotations) {
-        Set<Class<?>> rawClasses = new HashSet<Class<?>>();
-        for (Class<? extends Annotation> annotation : annotations) {
-            rawClasses.addAll(finder.findAnnotatedClasses(annotation));
-        }
-        return filterByBasePackages(rawClasses, packageNames);
-    }
-    
-    private static Set<Class<?>> filterByBasePackages(Set<Class<?>> rawClasses, Collection<String> packageNames) {
-        Set<Class<?>> filteredClasses = new HashSet<Class<?>>();
-        for (Class<?> clazz : rawClasses) {
-            for (String packageName : packageNames) {
-                if (clazz.getPackage().getName().startsWith(packageName)) {
-                    filteredClasses.add(clazz);
-                    continue;
-                }
-            }
-        }
-        //System.out.println("Raw: " + rawClasses);
-        //System.out.println("Filtered: " + beanClasses);
-        return filteredClasses;
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/GenerateMojo.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/GenerateMojo.java
deleted file mode 100644
index 72d5f28..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/GenerateMojo.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.karaf.boot.tools.maven.plugin.model.Context;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
-import org.apache.xbean.finder.ClassFinder;
-
-/**
- * Generates blueprint from spring annotations
- * @goal generate
- * @phase process-classes
- * @requiresDependencyResolution compile
- * @inheritByDefault false
- * @description Generates artifact using karaf-boot annotations and supporting spring annotations @Component, @Autowire and @Value
- */
-public class GenerateMojo extends AbstractMojo {
-
-    /**
-     * The maven project.
-     *
-     * @parameter default-value="${project}"
-     * @required
-     */
-    protected MavenProject project;
-
-    /**
-     * @parameter
-     * @required
-     */
-    protected List<String> scanPaths;
-    
-    /**
-     * true: Purely annotated mode (needs jpa 2.1.0 and transaction-blueprint 1.1.0)
-     * false: XML based mode for JPA 1.x and transaction-blueprint < 1.1.0
-     * @parameter default-value="true"
-     * @required
-     */
-    protected boolean persistenceAnnotated;
-
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        try {
-            String buildDir = project.getBuild().getDirectory();
-            String generatedDir = buildDir + "/generated-resources";
-            Resource resource = new Resource();
-            resource.setDirectory(generatedDir);
-            project.addResource(resource);
-            ClassFinder finder = createProjectScopeFinder();
-            
-            File file = new File(generatedDir, "OSGI-INF/blueprint/autowire.xml");
-            file.getParentFile().mkdirs();
-            System.out.println("Generating blueprint to " + file);
-            Set<Class<?>> classes = FilteredClassFinder.findClasses(finder, scanPaths);
-            Context context = new Context(classes);
-            context.resolve();
-            new Generator(context, new FileOutputStream(file), persistenceAnnotated).generate();
-        } catch (Exception e) {
-            throw new MojoExecutionException("Error building commands help", e);
-        }
-    }
-
-    private ClassFinder createProjectScopeFinder() throws MalformedURLException {
-        List<URL> urls = new ArrayList<URL>();
-
-        urls.add( new File(project.getBuild().getOutputDirectory()).toURI().toURL() );
-        for ( Object artifactO : project.getArtifacts() ) {
-            Artifact artifact = (Artifact)artifactO;
-            File file = artifact.getFile();
-            if ( file != null ) {
-                urls.add( file.toURI().toURL() );
-            }
-        }
-        ClassLoader loader = new URLClassLoader(urls.toArray(new URL[urls.size()]), getClass().getClassLoader());
-        return new ClassFinder(loader, urls);
-    }
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/Generator.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/Generator.java
deleted file mode 100644
index 8806d05..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/Generator.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin;
-
-import java.io.OutputStream;
-import java.lang.reflect.Field;
-
-import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceUnit;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.karaf.boot.tools.maven.plugin.model.Bean;
-import org.apache.karaf.boot.tools.maven.plugin.model.Context;
-import org.apache.karaf.boot.tools.maven.plugin.model.OsgiServiceRef;
-import org.apache.karaf.boot.tools.maven.plugin.model.ProducedBean;
-import org.apache.karaf.boot.tools.maven.plugin.model.Property;
-import org.apache.karaf.boot.tools.maven.plugin.model.PropertyWriter;
-import org.apache.karaf.boot.tools.maven.plugin.model.TransactionalDef;
-
-public class Generator implements PropertyWriter {
-    private static final String NS_BLUEPRINT = "http://www.osgi.org/xmlns/blueprint/v1.0.0";
-    private static final String NS_EXT = "http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0";
-    private static final String NS_JPA = "http://aries.apache.org/xmlns/jpa/v1.1.0";
-    private static final String NS_JPA2 = "http://aries.apache.org/xmlns/jpan/v1.0.0";
-    private static final String NS_TX = "http://aries.apache.org/xmlns/transactions/v1.2.0";
-
-    private Context context;
-    private XMLStreamWriter writer;
-    private boolean persistenceAnnotated;
-
-    public Generator(Context context, OutputStream os, boolean persistenceAnnotated) throws XMLStreamException {
-        this.context = context;
-        this.persistenceAnnotated = persistenceAnnotated;
-        
-        XMLOutputFactory factory = XMLOutputFactory.newInstance();
-        writer = factory.createXMLStreamWriter(os);
-    }
-
-    public void generate() {
-        try {
-            writer.writeStartDocument();
-            writer.writeCharacters("\n");
-            writeBlueprint();
-            
-            if (persistenceAnnotated) {
-                if (isJpaUsed()) {
-                    writer.writeEmptyElement(NS_JPA2, "enable");
-                    writer.writeCharacters("\n");
-                }
-                writer.writeEmptyElement(NS_TX, "enable-annotations");
-                writer.writeCharacters("\n");
-                //if (isJtaUsed()) {
-//                    writer.writeEmptyElement(NS_TX, "enable-annotations");
-                //}
-            }
-            for (Bean bean : context.getBeans()) {
-                writeBeanStart(bean);
-                bean.writeProperties(this);
-                writer.writeEndElement();
-                writer.writeCharacters("\n");
-            }
-            
-            writeServiceRefs();
-            new OsgiServiceProviderWriter(writer).write(context.getBeans());
-            
-            writer.writeEndElement();
-            writer.writeCharacters("\n");
-            writer.writeEndDocument();
-            writer.writeCharacters("\n");
-            writer.close();
-        } catch (XMLStreamException e) {
-            throw new RuntimeException(e.getMessage(), e);
-        }
-    }
-
-    private boolean isJpaUsed() {
-        boolean jpaUsed = false;
-        for (Bean bean : context.getBeans()) {
-        if (bean.persistenceFields.length > 0) {
-            jpaUsed = true;
-        }
-        }
-        return jpaUsed;
-    }
-
-    private boolean isJtaUsed() {
-        boolean jtaUsed = false;
-        for (Bean bean : context.getBeans()) {
-            if (bean.transactionDef != null) {
-                jtaUsed = true;
-            }
-
-        }
-        return jtaUsed;
-    }
-
-    private void writeBlueprint() throws XMLStreamException {
-        writer.writeStartElement("blueprint");
-        writer.writeDefaultNamespace(NS_BLUEPRINT);
-        writer.writeNamespace("ext", NS_EXT);
-        if (persistenceAnnotated) {
-            writer.writeNamespace("jpa", NS_JPA2);
-        } else {
-            writer.writeNamespace("jpa", NS_JPA);
-        }
-        writer.writeNamespace("tx", NS_TX);
-    }
-    
-    public void writeBeanStart(Bean bean) throws XMLStreamException {
-        writer.writeStartElement("bean");
-        writer.writeAttribute("id", bean.id);
-        writer.writeAttribute("class", bean.clazz.getName());
-        writer.writeAttribute("ext", NS_EXT, "field-injection", "true");
-        if (bean instanceof ProducedBean) {
-            writeFactory((ProducedBean)bean);
-        }
-        if (bean.initMethod != null) {
-            writer.writeAttribute("init-method", bean.initMethod);
-        }
-        if (bean.destroyMethod != null) {
-            writer.writeAttribute("destroy-method", bean.destroyMethod);
-        }
-        writer.writeCharacters("\n");
-        
-        if (!persistenceAnnotated) {
-            writeTransactional(bean.transactionDef);
-            writePersistenceFields(bean.persistenceFields);
-        }
-    }
-    
-    private void writeFactory(ProducedBean bean) throws XMLStreamException {
-        writer.writeAttribute("factory-ref", bean.factoryBeanId);
-        writer.writeAttribute("factory-method", bean.factoryMethod);
-    }
-
-    private void writeTransactional(TransactionalDef transactionDef)
-            throws XMLStreamException {
-        if (transactionDef != null) {
-            writer.writeCharacters("    ");
-            writer.writeEmptyElement("tx", "transaction", NS_TX);
-            writer.writeAttribute("method", transactionDef.getMethod());
-            writer.writeAttribute("value", transactionDef.getType());
-            writer.writeCharacters("\n");
-        }
-    }
-
-    
-    private void writePersistenceFields(Field[] fields) throws XMLStreamException {
-        for (Field field : fields) {
-            writePersistenceField(field);
-        }
-    }
-
-    private void writePersistenceField(Field field) throws XMLStreamException {
-        PersistenceContext persistenceContext = field.getAnnotation(PersistenceContext.class);
-        if (persistenceContext != null) {
-            writer.writeCharacters("    ");
-            writer.writeEmptyElement("jpa", "context", NS_JPA);
-            writer.writeAttribute("unitname", persistenceContext.unitName());
-            writer.writeAttribute("property", field.getName());
-            writer.writeCharacters("\n");
-        }
-        PersistenceUnit persistenceUnit = field.getAnnotation(PersistenceUnit.class);
-        if (persistenceUnit != null) {
-            writer.writeCharacters("    ");
-            writer.writeEmptyElement("jpa", "unit", NS_JPA);
-            writer.writeAttribute("unitname", persistenceUnit.unitName());
-            writer.writeAttribute("property", field.getName());
-            writer.writeCharacters("\n");
-        }
-    }
-
-    private void writeServiceRefs() throws XMLStreamException {
-        for (OsgiServiceRef serviceBean : context.getServiceRefs()) {
-            writeServiceRef(serviceBean);
-        }
-    }
-
-    private void writeServiceRef(OsgiServiceRef serviceBean) throws XMLStreamException {
-        writer.writeEmptyElement("reference");
-        writer.writeAttribute("id", serviceBean.id);
-        writer.writeAttribute("interface", serviceBean.clazz.getName());
-        if (serviceBean.filter != null && !"".equals(serviceBean.filter)) {
-            writer.writeAttribute("filter", serviceBean.filter);
-        }
-        writer.writeCharacters("\n");
-    }
-
-    public void writeProperty(Property property) {
-        try {
-            writer.writeCharacters("    ");
-            writer.writeEmptyElement("property");
-            writer.writeAttribute("name", property.name);
-            if (property.ref != null) {
-                writer.writeAttribute("ref", property.ref);
-            } else if (property.value != null) {
-                writer.writeAttribute("value", property.value);
-            }
-            writer.writeCharacters("\n");
-        } catch (XMLStreamException e) {
-            throw new RuntimeException(e.getMessage(), e);
-        }
-    }
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/OsgiServiceProviderWriter.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/OsgiServiceProviderWriter.java
deleted file mode 100644
index 95d57df..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/OsgiServiceProviderWriter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin;
-
-import java.util.Collection;
-
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-
-import org.apache.karaf.boot.tools.maven.plugin.model.Bean;
-import org.ops4j.pax.cdi.api.OsgiServiceProvider;
-import org.ops4j.pax.cdi.api.Properties;
-import org.ops4j.pax.cdi.api.Property;
-
-public class OsgiServiceProviderWriter {
-    private XMLStreamWriter writer;
-
-    public OsgiServiceProviderWriter(XMLStreamWriter writer) {
-        this.writer = writer;
-    }
-
-    public void write(Collection<Bean> beans) throws XMLStreamException {
-        for (Bean bean : beans) {
-            write(bean);
-        }
-    }
-    
-    public void write(Bean bean) throws XMLStreamException {
-        OsgiServiceProvider serviceProvider = bean.clazz.getAnnotation(OsgiServiceProvider.class);
-        if (serviceProvider == null) {
-            return;
-        }
-        if (serviceProvider.classes().length == 0) {
-            throw new IllegalArgumentException("Need to provide the interface class in the @OsgiServiceProvider(classes={...}) annotation on " + bean.clazz);
-        }
-        Properties properties = bean.clazz.getAnnotation(Properties.class);
-        if (properties == null) {
-            writer.writeEmptyElement("service");
-        } else {
-            writer.writeStartElement("service");
-        }
-        writer.writeAttribute("ref", bean.id);
-        Class<?> serviceIf = serviceProvider.classes()[0];
-        writer.writeAttribute("interface", serviceIf.getName());
-        writer.writeCharacters("\n");
-        if (properties != null) {
-            writeProperties(properties);
-            writer.writeEndElement();
-            writer.writeCharacters("\n");
-        }
-    }
-
-    private void writeProperties(Properties properties) throws XMLStreamException {
-        writer.writeCharacters("    ");
-        writer.writeStartElement("service-properties");
-        writer.writeCharacters("\n");
-        for (Property property : properties.value()) {
-            writer.writeCharacters("        ");
-            writer.writeEmptyElement("entry");
-            writer.writeAttribute("key", property.name());
-            writer.writeAttribute("value", property.value());
-            writer.writeCharacters("\n");
-        }
-        writer.writeCharacters("    ");
-        writer.writeEndElement();
-        writer.writeCharacters("\n");
-    }
-
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Bean.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Bean.java
deleted file mode 100644
index 995649c..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Bean.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceUnit;
-
-public class Bean extends BeanRef {
-    public String initMethod;
-    public String destroyMethod;
-    public SortedSet<Property> properties;
-    public Field[] persistenceFields;
-    public TransactionalDef transactionDef;
-
-    public Bean(Class<?> clazz) {
-        super(clazz);
-
-        for (Method method : clazz.getDeclaredMethods()) {
-            PostConstruct postConstruct = getEffectiveAnnotation(method, PostConstruct.class);
-            if (postConstruct != null) {
-                this.initMethod = method.getName();
-            }
-            PreDestroy preDestroy = getEffectiveAnnotation(method, PreDestroy.class);
-            if (preDestroy != null) {
-                this.destroyMethod = method.getName();
-            }
-        }
-        this.persistenceFields = getPersistenceFields();
-        this.transactionDef = new JavaxTransactionFactory().create(clazz);
-        if (this.transactionDef == null) {
-            this.transactionDef = new SpringTransactionFactory().create(clazz);
-        }
-        properties = new TreeSet<Property>();
-    }
-
-    private Field[] getPersistenceFields() {
-        List<Field> persistenceFields = new ArrayList<Field>();
-        Field[] fields = clazz.getDeclaredFields();
-        for (Field field : fields) {
-            PersistenceContext persistenceContext = field.getAnnotation(PersistenceContext.class);
-            PersistenceUnit persistenceUnit = field.getAnnotation(PersistenceUnit.class);
-            if (persistenceContext !=null || persistenceUnit != null) {
-                 persistenceFields.add(field);
-            }
-        }
-        return persistenceFields.toArray(new Field[]{});
-    }
-    
-    public void resolve(Matcher matcher) {
-        Class<?> curClass = this.clazz;
-        while (curClass != null && curClass != Object.class) {
-            resolveProperties(matcher, curClass);
-            curClass = curClass.getSuperclass();
-        }
-    }
-    
-    private void resolveProperties(Matcher matcher, Class<?> curClass) {
-        for (Field field : curClass.getDeclaredFields()) {
-            Property prop = Property.create(matcher, field);
-            if (prop != null) {
-                properties.add(prop);
-            }
-        }
-    }
-
-    private static <T extends Annotation> T getEffectiveAnnotation(Method method, Class<T> annotationClass) {
-        final Class<?> methodClass = method.getDeclaringClass();
-        final String name = method.getName();
-        final Class<?>[] params = method.getParameterTypes();
-
-        // 1. Current class
-        final T rootAnnotation = method.getAnnotation(annotationClass);
-        if (rootAnnotation != null) {
-            return rootAnnotation;
-        }
-
-        // 2. Superclass
-        final Class<?> superclass = methodClass.getSuperclass();
-        if (superclass != null) {
-            final T annotation = getMethodAnnotation(superclass, name, params, annotationClass);
-            if (annotation != null)
-                return annotation;
-        }
-
-        // 3. Interfaces
-        for (final Class<?> intfs : methodClass.getInterfaces()) {
-            final T annotation = getMethodAnnotation(intfs, name, params, annotationClass);
-            if (annotation != null)
-                return annotation;
-        }
-
-        return null;
-    }
-
-    private static <T extends Annotation> T getMethodAnnotation(Class<?> searchClass, String name, Class<?>[] params,
-            Class<T> annotationClass) {
-        try {
-            Method method = searchClass.getMethod(name, params);
-            return getEffectiveAnnotation(method, annotationClass);
-        } catch (NoSuchMethodException e) {
-            return null;
-        }
-    }
-
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((clazz == null) ? 0 : clazz.getName().hashCode());
-        result = prime * result + ((id == null) ? 0 : id.hashCode());
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        return clazz.getName();
-    }
-
-    public void writeProperties(PropertyWriter writer) {
-        for (Property property : properties) {
-            writer.writeProperty(property);
-        }
-    }
-    
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/BeanRef.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/BeanRef.java
deleted file mode 100644
index ba67f33..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/BeanRef.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.apache.karaf.boot.tools.maven.plugin.model;
-
-import java.lang.reflect.Field;
-
-import javax.inject.Named;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Component;
-
-public class BeanRef implements Comparable<BeanRef> {
-    public String id;
-    public Class<?> clazz;
-    
-    /**
-     * 
-     * @param clazz interface or implementation class
-     */
-    public BeanRef(Class<?> clazz) {
-        this.clazz = clazz;
-        this.id = getBeanName(clazz);
-    }
-    
-    public BeanRef(Class<?> type, String id) {
-        this.clazz = type;
-        this.id = id;
-    }
-
-    public BeanRef(Field field) {
-        this(field.getType(), getDestinationId(field));
-    }
-
-    private static String getDestinationId(Field field) {
-        Named named = field.getAnnotation(Named.class);
-        if (named != null) {
-            return named.value();
-        }
-        Qualifier qualifier = field.getAnnotation(Qualifier.class);
-        if (qualifier != null) {
-            return qualifier.value();
-        }
-        return null;
-    }
-
-    public static String getBeanName(Class<?> clazz) {
-        Component component = clazz.getAnnotation(Component.class);
-        Named named = clazz.getAnnotation(Named.class);
-        if (component != null && !"".equals(component.value())) {
-            return component.value();
-        } else if (named != null && !"".equals(named.value())) {
-            return named.value();    
-        } else {
-            String name = clazz.getSimpleName();
-            return getBeanNameFromSimpleName(name);
-        }
-    }
-
-    private static String getBeanNameFromSimpleName(String name) {
-        return name.substring(0, 1).toLowerCase() + name.substring(1, name.length());
-    }
-    
-    public boolean matches(BeanRef template) {
-        boolean assignable = template.clazz.isAssignableFrom(this.clazz);
-        return assignable && ((template.id == null) || id.equals(template.id));
-    }
-
-    public int compareTo(BeanRef other) {
-        return this.id.compareTo(other.id);
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Context.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Context.java
deleted file mode 100644
index 442bc6e..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Context.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import javax.enterprise.inject.Produces;
-
-import org.ops4j.pax.cdi.api.OsgiService;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.blueprint.container.BlueprintContainer;
-import org.osgi.service.blueprint.container.Converter;
-
-public class Context implements Matcher {
-
-    SortedSet<Bean> beans;
-    SortedSet<OsgiServiceRef> serviceRefs;
-
-    public Context(Class<?>... beanClasses) {
-        this(Arrays.asList(beanClasses));
-    }
-
-    public Context(Collection<Class<?>> beanClasses) {
-        this.beans = new TreeSet<Bean>();
-        this.serviceRefs = new TreeSet<OsgiServiceRef>();
-        addBeans(beanClasses);
-    }
-
-    private void addBeans(Collection<Class<?>> beanClasses) {
-        for (Class<?> clazz : beanClasses) {
-            Bean bean = new Bean(clazz);
-            beans.add(bean);
-            addServiceRefs(clazz);
-            addProducedBeans(clazz, bean.id);
-        }
-    }
-
-    private void addProducedBeans(Class<?> clazz, String factoryBeanId) {
-        for (Method method : clazz.getMethods()) {
-            Produces produces = method.getAnnotation(Produces.class);
-            if (produces != null) {
-                Class<?> producedClass = method.getReturnType();
-                ProducedBean producedBean = new ProducedBean(producedClass, factoryBeanId, method.getName());
-                beans.add(producedBean);
-            }
-        }
-    }
-
-    private void addServiceRefs(Class<?> clazz) {
-        for (Field field : clazz.getDeclaredFields()) {
-            OsgiService osgiService = field.getAnnotation(OsgiService.class);
-            if (osgiService != null) {
-                serviceRefs.add(new OsgiServiceRef(field));
-            }
-        }
-    }
-
-    public void resolve() {
-        for (Bean bean : beans) {
-            bean.resolve(this);
-        }
-    }
-    
-    public BeanRef getMatching(BeanRef template) {
-        for (Bean bean : beans) {
-            if (bean.matches(template)) {
-                return bean;
-            }
-        }
-        for (BeanRef bean : serviceRefs) {
-            if (bean.matches(template)) {
-                return bean;
-            }
-        }
-        if (template.clazz == BundleContext.class) {
-            return new BeanRef(BundleContext.class, "blueprintBundleContext");
-        }
-        if (template.clazz == Bundle.class) {
-            return new BeanRef(Bundle.class, "blueprintBundle");
-        }
-        if (template.clazz == BlueprintContainer.class) {
-            return new BeanRef(BlueprintContainer.class, "blueprintContainer");
-        }
-        if (template.clazz == Converter.class) {
-            return new BeanRef(Converter.class, "blueprintConverter");
-        }
-        
-        return null;
-    }
-
-    public SortedSet<Bean> getBeans() {
-        return beans;
-    }
-
-    public SortedSet<OsgiServiceRef> getServiceRefs() {
-        return serviceRefs;
-    }
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/JavaxTransactionFactory.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/JavaxTransactionFactory.java
deleted file mode 100644
index c00a54c..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/JavaxTransactionFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import java.util.HashMap;
-
-import javax.transaction.Transactional;
-import javax.transaction.Transactional.TxType;
-
-public class JavaxTransactionFactory {
-    private static HashMap<TxType, String> txTypeNames;
-
-    static {
-        txTypeNames = new HashMap<TxType, String>();
-        txTypeNames.put(TxType.REQUIRED, TransactionalDef.TYPE_REQUIRED);
-        txTypeNames.put(TxType.REQUIRES_NEW, TransactionalDef.TYPE_REQUIRES_NEW);
-    }
-    
-    TransactionalDef create(Class<?> clazz) {
-        Transactional transactional = clazz.getAnnotation(Transactional.class);
-        return transactional != null ? 
-                new TransactionalDef("*", txTypeNames.get(transactional.value())) : null;
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Matcher.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Matcher.java
deleted file mode 100644
index f703ed1..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Matcher.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-public interface Matcher {
-    BeanRef getMatching(BeanRef template);
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/OsgiServiceRef.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/OsgiServiceRef.java
deleted file mode 100644
index 5069663..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/OsgiServiceRef.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import java.lang.reflect.Field;
-
-import org.ops4j.pax.cdi.api.OsgiService;
-
-/**
- * Synthetic bean that refers to an OSGi service
- */
-public class OsgiServiceRef extends BeanRef {
-
-    public String filter;
-
-    public OsgiServiceRef(Field field) {
-        super(field);
-        if (id == null) {
-            id = getBeanName(clazz);
-        }
-        OsgiService osgiService = field.getAnnotation(OsgiService.class);
-        filter = osgiService.filter();
-    }
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/ProducedBean.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/ProducedBean.java
deleted file mode 100644
index b5e8b11..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/ProducedBean.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.apache.karaf.boot.tools.maven.plugin.model;
-
-public class ProducedBean extends Bean {
-    public String factoryMethod;
-    public String factoryBeanId;
-    
-    public ProducedBean(Class<?> clazz, String factoryBeanId, String factoryMethod) {
-        super(clazz);
-        this.factoryBeanId = factoryBeanId;
-        this.factoryMethod = factoryMethod;
-    }
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Property.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Property.java
deleted file mode 100644
index 4ec7e5a..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/Property.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import java.lang.reflect.Field;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
-
-public class Property implements Comparable<Property> {
-    public String name;
-    public String ref;
-    public String value;
-
-    public Property(String name, String ref, String value) {
-        this.name = name;
-        this.ref = ref;
-        this.value = value;
-    }
-
-    public static Property create(Matcher matcher, Field field) {
-        Value value = field.getAnnotation(Value.class);
-        if (needsInject(field)) {
-            BeanRef matching = matcher.getMatching(new BeanRef(field));
-            String ref = (matching == null) ? getRefName(field) : matching.id;
-            return new Property(field.getName(), ref, null);
-        } else if (value != null){
-            return new Property(field.getName(), null, cleanValue(value.value()));
-        } else {
-            // Field is not a property
-            return null;
-        }
-    }
-
-    /**
-     * Assume it is defined in another manually created blueprint context with default name
-     * @param field
-     * @return
-     */
-    private static String getRefName(Field field) {
-        Named named = field.getAnnotation(Named.class);
-        if (named != null) {
-        	return named.value();
-        }
-    	Qualifier qualifier = field.getAnnotation(Qualifier.class);
-        if (qualifier != null) {
-        	return qualifier.value();
-        }
-        return Bean.getBeanName(field.getType());
-    }
-
-    private static boolean needsInject(Field field) {
-        return field.getAnnotation(Autowired.class) != null || field.getAnnotation(Inject.class) != null;
-    }
-
-    /**
-     * Remove default value definition
-     * 
-     * @param value
-     * @return
-     */
-    private static String cleanValue(String value) {
-        return value.replaceAll("\\:.*\\}", "}");
-    }
-
-    public int compareTo(Property other) {
-        return name.compareTo(other.name);
-    }
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/PropertyWriter.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/PropertyWriter.java
deleted file mode 100644
index e8e6bda..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/PropertyWriter.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-public interface PropertyWriter {
-    void writeProperty(Property property);
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/SpringTransactionFactory.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/SpringTransactionFactory.java
deleted file mode 100644
index 4d65261..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/SpringTransactionFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import java.util.HashMap;
-
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-public class SpringTransactionFactory {
-    private static HashMap<Propagation, String> txTypeNames;
-
-    static {
-        txTypeNames = new HashMap<Propagation, String>();
-        txTypeNames.put(Propagation.REQUIRED, TransactionalDef.TYPE_REQUIRED);
-        txTypeNames.put(Propagation.REQUIRES_NEW, TransactionalDef.TYPE_REQUIRES_NEW);
-    }
-
-    TransactionalDef create(Class<?> clazz) {
-        Transactional transactional = clazz.getAnnotation(Transactional.class);
-        return transactional != null ? 
-                new TransactionalDef("*", txTypeNames.get(transactional.propagation())) : null;
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/TransactionalDef.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/TransactionalDef.java
deleted file mode 100644
index 7be6a67..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/java/org/apache/karaf/boot/tools/maven/plugin/model/TransactionalDef.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-public class TransactionalDef {
-    public static final String TYPE_REQUIRED = "Required";
-    public static final String TYPE_REQUIRES_NEW = "RequiresNew";
-    private String method;
-    private String type;
-    
-    public TransactionalDef(String method, String type) {
-        this.method = method;
-        this.type = type;
-    }
-
-    public String getMethod() {
-        return method;
-    }
-    
-    public String getType() {
-        return type;
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/main/resources/META-INF/plexus/components.xml b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/resources/META-INF/plexus/components.xml
new file mode 100644
index 0000000..6fa2eeb
--- /dev/null
+++ b/karaf-boot-tools/karaf-boot-maven-plugin/src/main/resources/META-INF/plexus/components.xml
@@ -0,0 +1,61 @@
+<!--
+ 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.
+-->
+<component-set>
+    <components>
+        <component>
+            <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+            <role-hint>jar</role-hint>
+            <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+            <configuration>
+                <lifecycles>
+                    <lifecycle>
+                        <id>default</id>
+                        <phases>
+                            <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
+                            <compile>org.apache.maven.plugins:maven-compiler-plugin:compile</compile>
+                            <process-classes>org.apache.karaf.boot:karaf-boot-maven-plugin:generate</process-classes>
+                            <process-test-resources>org.apache.maven.plugins:maven-resources-plugin:testResources</process-test-resources>
+                            <test-compile>org.apache.maven.plugins:maven-compiler-plugin:testCompile</test-compile>
+                            <test>org.apache.maven.plugins:maven-surefire-plugin:test</test>
+                            <install>
+                                org.apache.maven.plugins:maven-install-plugin:install
+                            </install>
+                            <deploy>
+                                org.apache.maven.plugins:maven-deploy-plugin:deploy
+                            </deploy>
+                        </phases>
+                    </lifecycle>
+                </lifecycles>
+            </configuration>
+        </component>
+        <component>
+            <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+            <role-hint>bundle</role-hint>
+            <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+            <configuration>
+                <type>jar</type>
+                <includesDependencies>false</includesDependencies>
+                <language>java</language>
+                <extension>jar</extension>
+                <addedToClasspath>true</addedToClasspath>
+                <packaging>jar</packaging>
+            </configuration>
+        </component>
+    </components>
+</component-set>
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/GeneratorTest.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/GeneratorTest.java
deleted file mode 100644
index ff009b3..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/GeneratorTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin;
-
-import static java.util.Arrays.asList;
-import static org.apache.karaf.boot.tools.maven.plugin.FilteredClassFinder.findClasses;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Set;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathFactory;
-
-import org.apache.karaf.boot.tools.maven.plugin.model.Context;
-import org.apache.karaf.boot.tools.maven.plugin.test.MyBean1;
-import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.xbean.finder.ClassFinder;
-import org.junit.Assert;
-import org.junit.Test;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
-
-public class GeneratorTest {
-
-    private XPath xpath;
-    private Document document;
-
-    @Test
-    public void testGenerate() throws Exception {
-        ClassFinder classFinder = new ClassFinder(this.getClass().getClassLoader());
-        String packageName = MyBean1.class.getPackage().getName();
-        Set<Class<?>> beanClasses = findClasses(classFinder, asList(packageName));
-        Context context = new Context(beanClasses);
-        context.resolve();
-        ByteArrayOutputStream os = new ByteArrayOutputStream();
-        new Generator(context, os, false).generate();
-        System.out.println(os.toString("UTF-8"));
-
-        document = readToDocument(os);
-        xpath = XPathFactory.newInstance().newXPath();
-        //xpath.setNamespaceContext(new NameSpaces(document));
-        Node bean1 = (Node) xpath.evaluate("/blueprint/bean[@id='myBean1']", document, XPathConstants.NODE);
-
-        // Bean
-        Assert.assertEquals(MyBean1.class.getName(), xpath.evaluate("@class", bean1));
-        Assert.assertEquals("init", xpath.evaluate("@init-method", bean1));
-        Assert.assertEquals("destroy", xpath.evaluate("@destroy-method", bean1));
-        Assert.assertEquals("true", xpath.evaluate("@field-injection", bean1));
-        
-        // @Transactional
-        Assert.assertEquals("*", xpath.evaluate("transaction/@method", bean1));
-        Assert.assertEquals("Required", xpath.evaluate("transaction/@value", bean1));
-
-        // @PersistenceContext
-        Assert.assertEquals("person", xpath.evaluate("context/@unitname", bean1));
-        Assert.assertEquals("em", xpath.evaluate("context/@property", bean1));
-        
-        // @PersistenceUnit
-        Assert.assertEquals("person", xpath.evaluate("unit/@unitname", bean1));
-        Assert.assertEquals("emf", xpath.evaluate("unit/@property", bean1));
-        
-        // @Autowired
-        Assert.assertEquals("my1", xpath.evaluate("property[@name='bean2']/@ref", bean1));
-
-
-    }
-
-    private Document readToDocument(ByteArrayOutputStream os) throws ParserConfigurationException,
-        SAXException, IOException {
-        InputStream is = new ByteArrayInputStream(os.toByteArray());
-        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
-        DocumentBuilder builder = builderFactory.newDocumentBuilder();
-        return builder.parse(is);
-    }
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/Namespaces.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/Namespaces.java
deleted file mode 100644
index c4224ce..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/Namespaces.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin;
-
-import java.util.Iterator;
-
-import javax.xml.XMLConstants;
-import javax.xml.namespace.NamespaceContext;
-
-import org.w3c.dom.Document;
-
-
-public class Namespaces implements NamespaceContext {
-    private Document doc;
-
-    public Namespaces(Document doc) {
-        this.doc = doc;
-    }
-
-    @Override
-    public String getNamespaceURI(String prefix) {
-        if (prefix.equals(XMLConstants.DEFAULT_NS_PREFIX)) {
-            return doc.lookupNamespaceURI(null);
-        } else {
-            return doc.lookupNamespaceURI(prefix);
-        }
-    }
-
-    @Override
-    public String getPrefix(String namespaceURI) {
-        return doc.lookupPrefix(namespaceURI);
-    }
-
-    @Override
-    public Iterator<String> getPrefixes(String namespaceURI) {
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/BeanTest.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/BeanTest.java
deleted file mode 100644
index 9f6470f..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/BeanTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import javax.inject.Named;
-
-import org.apache.karaf.boot.tools.maven.plugin.test.MyBean1;
-import org.apache.karaf.boot.tools.maven.plugin.test.MyBean3;
-import org.apache.karaf.boot.tools.maven.plugin.test.MyBean4;
-import org.apache.karaf.boot.tools.maven.plugin.test.ServiceAImpl1;
-import org.junit.Assert;
-import org.junit.Test;
-
-
-public class BeanTest {
-    
-    @Test
-    public void testParseMyBean1() {
-        Bean bean = new Bean(MyBean1.class);
-        bean.resolve(new Context());
-        assertEquals(MyBean1.class, bean.clazz);
-        assertEquals("myBean1", bean.id); // Name derived from class name
-        assertEquals("init", bean.initMethod);
-        assertEquals("destroy", bean.destroyMethod);
-        Assert.assertEquals(2, bean.persistenceFields.length);
-        assertEquals("em", bean.persistenceFields[0].getName());
-        assertEquals("emf", bean.persistenceFields[1].getName());
-        assertEquals("*", bean.transactionDef.getMethod());
-        assertEquals("Required", bean.transactionDef.getType());
-        assertEquals(1, bean.properties.size());
-        Property prop = bean.properties.iterator().next();
-        assertEquals("bean2", prop.name);
-        assertEquals("serviceA", prop.ref);
-    }
-    
-    @Test
-    public void testParseMyBean3() {
-        Bean bean = new Bean(MyBean3.class);
-        bean.resolve(new Context());
-        assertEquals(MyBean3.class, bean.clazz);
-        assertEquals("myBean3", bean.id); // Name derived from class name
-        assertNull("There should be no initMethod", bean.initMethod);
-        assertNull("There should be no destroyMethod", bean.destroyMethod);
-        assertEquals("There should be no persistence fields", 0, bean.persistenceFields.length);
-        assertEquals("*", bean.transactionDef.getMethod());
-        assertEquals("RequiresNew", bean.transactionDef.getType());
-        assertEquals(5, bean.properties.size());
-    }
-    
-    @Test
-    public void testParseNamedBean() {
-        Bean bean = new Bean(ServiceAImpl1.class);
-        bean.resolve(new Context());
-        String definedName = ServiceAImpl1.class.getAnnotation(Named.class).value();
-        assertEquals("my1", definedName);
-        assertEquals("Name should be defined using @Named", definedName, bean.id);
-        assertNull("There should be no initMethod", bean.initMethod);
-        assertNull("There should be no destroyMethod", bean.destroyMethod);
-        assertEquals("There should be no persistence fields", 0, bean.persistenceFields.length);
-        assertNull("There should be no transaction definition", bean.transactionDef);
-        assertEquals("There should be no properties", 0, bean.properties.size());
-    }
-    
-    @Test
-    public void testBlueprintBundleContext() {
-        Bean bean = new Bean(MyBean4.class);
-        bean.resolve(new Context());
-        Property bcProp = bean.properties.iterator().next();
-        assertEquals("bundleContext", bcProp.name);
-        assertEquals("blueprintBundleContext", bcProp.ref);
-    }
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/ContextTest.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/ContextTest.java
deleted file mode 100644
index e9a1d12..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/ContextTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import static org.junit.Assert.assertEquals;
-
-import org.apache.karaf.boot.tools.maven.plugin.test.MyBean3;
-import org.apache.karaf.boot.tools.maven.plugin.test.MyFactoryBean;
-import org.apache.karaf.boot.tools.maven.plugin.test.MyProduced;
-import org.apache.karaf.boot.tools.maven.plugin.test.ServiceB;
-import org.apache.karaf.boot.tools.maven.plugin.test.ServiceReferences;
-import org.junit.Assert;
-import org.junit.Test;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.service.blueprint.container.BlueprintContainer;
-import org.osgi.service.blueprint.container.Converter;
-
-public class ContextTest {
-
-    @Test
-    public void testLists()  {
-        Context context = new Context(MyBean3.class);
-        Assert.assertEquals(1, context.getBeans().size());
-        Assert.assertEquals(0, context.getServiceRefs().size());
-    }
-    
-    @Test
-    public void testLists2()  {
-        Context context = new Context(ServiceReferences.class);
-        Assert.assertEquals(1, context.getBeans().size());
-        Assert.assertEquals(2, context.getServiceRefs().size());
-    }
-    
-    @Test
-    public void testMatching() throws NoSuchFieldException, SecurityException  {
-        Context context = new Context(ServiceReferences.class);
-        BeanRef matching = context.getMatching(new BeanRef(ServiceB.class));
-        Assert.assertEquals(OsgiServiceRef.class, matching.getClass());
-        Assert.assertEquals(ServiceB.class, matching.clazz);
-        Assert.assertEquals("serviceB", matching.id);
-    }
-    
-    private void assertSpecialRef(String expectedId, Class<?> clazz) {
-        Context context = new Context();
-        BeanRef ref = context.getMatching(new BeanRef(clazz));
-        assertEquals(expectedId, ref.id);
-    }
-    
-    @Test
-    public void testSpecialRefs() {
-        assertSpecialRef("blueprintBundleContext", BundleContext.class);
-        assertSpecialRef("blueprintBundle", Bundle.class);
-        assertSpecialRef("blueprintContainer", BlueprintContainer.class);
-        assertSpecialRef("blueprintConverter", Converter.class);
-    }
-    
-    @Test
-    public void testProduced() throws NoSuchFieldException, SecurityException  {
-        Context context = new Context(MyFactoryBean.class);
-        
-        ProducedBean matching = (ProducedBean)context.getMatching(new BeanRef(MyProduced.class));
-        Assert.assertEquals(MyProduced.class, matching.clazz);
-        Assert.assertEquals("myFactoryBean", matching.factoryBeanId);
-        Assert.assertEquals("create", matching.factoryMethod);
-    }
-    
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/PropertyTest.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/PropertyTest.java
deleted file mode 100644
index 772af11..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/PropertyTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import java.lang.reflect.Field;
-
-import javax.xml.stream.XMLStreamException;
-
-import org.apache.karaf.boot.tools.maven.plugin.test.ServiceAImpl1;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class PropertyTest {
-    @Test
-    public void testRefInject() throws XMLStreamException {
-        Field field = TestBeanForRef.class.getDeclaredFields()[0];
-        Matcher matcher = new Matcher() {
-            public Bean getMatching(BeanRef template) {
-                return new Bean(ServiceAImpl1.class);
-            }
-        };
-        Property property = Property.create(matcher, field);
-        Assert.assertEquals("serviceA", property.name);
-        Assert.assertNull("Value should be null", property.value);
-        Assert.assertEquals("my1", property.ref);
-    }
-    
-    @Test
-    public void testRefAutowired() throws XMLStreamException {
-        Field field = TestBeanForRef.class.getDeclaredFields()[1];
-        Matcher matcher = new Matcher() {
-            public Bean getMatching(BeanRef template) {
-                return null;
-            }
-        };
-        Property property = Property.create(matcher, field);
-        Assert.assertEquals("serviceB", property.name);
-        Assert.assertNull("Value should be null", property.value);
-        Assert.assertEquals("Should be default name as no match is found", "serviceB", property.ref);
-    }
-
-    @Test
-    public void testValue() throws XMLStreamException {
-        Field field = TestBeanForRef.class.getDeclaredFields()[2];
-        Property property = Property.create(null, field);
-        Assert.assertEquals("name", property.name);
-        Assert.assertEquals("${name}", property.value);
-        Assert.assertNull("Ref should be null", property.ref);
-    }
-    
-    @Test
-    public void testNoProperty() throws XMLStreamException {
-        Field field = TestBeanForRef.class.getDeclaredFields()[3];
-        Property property = Property.create(null, field);
-        Assert.assertNull("Should not be a property", property);
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/TestBeanForRef.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/TestBeanForRef.java
deleted file mode 100644
index 2a96d05..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/model/TestBeanForRef.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.model;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceUnit;
-
-import org.apache.karaf.boot.tools.maven.plugin.test.ServiceA;
-import org.apache.karaf.boot.tools.maven.plugin.test.ServiceB;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-
-@Singleton
-public class TestBeanForRef {
-    @Inject
-    ServiceA serviceA;
-    @Autowired
-    ServiceB serviceB;
-    @Value("${name:default}") String name;
-    @PersistenceUnit(unitName="myunit") EntityManager em;
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean1.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean1.java
deleted file mode 100644
index 248578a..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean1.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.test;
-
-import javax.inject.Singleton;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceUnit;
-import javax.transaction.Transactional;
-import javax.transaction.Transactional.TxType;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-@Singleton
-@Transactional(value=TxType.REQUIRED)
-public class MyBean1 extends ParentBean {
-
-    @Autowired
-    ServiceA bean2;
-    
-    @PersistenceContext(unitName="person")
-    EntityManager em;
-    
-    @PersistenceUnit(unitName="person")
-    EntityManager emf;
-    
-    public void init() {
-    }
-    
-    public void destroy() {
-    }
-
-    public void saveData() {
-        
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean3.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean3.java
deleted file mode 100644
index d96f6c6..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean3.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.test;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-@Singleton
-@Transactional(propagation=Propagation.REQUIRES_NEW)
-public class MyBean3 {
-
-    @Inject
-    @Named("my1")
-    ServiceA serviceA1;
-
-    @Inject
-    @Qualifier("my2")
-    ServiceA serviceA2;
-
-    @Inject
-    ServiceB serviceB;
-    
-    @Inject
-    @Named("serviceB2Id")
-    ServiceB serviceB2;
-    
-    @Inject
-    MyProduced myProduced;
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean4.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean4.java
deleted file mode 100644
index 83a2244..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyBean4.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.apache.karaf.boot.tools.maven.plugin.test;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.osgi.framework.BundleContext;
-
-@Singleton
-public class MyBean4 {
-
-    @Inject
-    BundleContext bundleContext;
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyFactoryBean.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyFactoryBean.java
deleted file mode 100644
index 6442100..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyFactoryBean.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.apache.karaf.boot.tools.maven.plugin.test;
-
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-public class MyFactoryBean {
-    
-    @Inject
-    ServiceB serviceB;
-
-    @Produces
-    public MyProduced create() {
-        return new MyProduced("My message");
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyProduced.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyProduced.java
deleted file mode 100644
index 9426aea..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/MyProduced.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.apache.karaf.boot.tools.maven.plugin.test;
-
-import javax.inject.Inject;
-
-public class MyProduced {
-    private String message;
-    
-    @Inject
-    ServiceA serviceA;
-
-    public MyProduced(String message) {
-        this.message = message;
-    }
-    
-    public String getMessage() {
-        return message;
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ParentBean.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ParentBean.java
deleted file mode 100644
index dc8f515..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ParentBean.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.test;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
-public class ParentBean {
-
-    @PostConstruct
-    public void init() {
-    }
-    
-    @PreDestroy
-    public void destroy() {
-    }
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceA.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceA.java
deleted file mode 100644
index 1897163..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceA.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.test;
-
-public interface ServiceA {
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceAImpl1.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceAImpl1.java
deleted file mode 100644
index 7b6f405..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceAImpl1.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.test;
-
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-@Singleton
-@Named("my1")
-public class ServiceAImpl1 implements ServiceA {
-    
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceAImpl2.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceAImpl2.java
deleted file mode 100644
index 5c17339..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceAImpl2.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.test;
-
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.ops4j.pax.cdi.api.OsgiServiceProvider;
-import org.springframework.beans.factory.annotation.Value;
-
-@Singleton
-@Named("my2")
-@OsgiServiceProvider(classes={ServiceA.class})
-public class ServiceAImpl2 implements ServiceA {
-    @Value("${url:http://default}")
-    String url;
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceB.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceB.java
deleted file mode 100644
index e931307..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceB.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.boot.tools.maven.plugin.test;
-
-public interface ServiceB {
-
-}
diff --git a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceReferences.java b/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceReferences.java
deleted file mode 100644
index 4824bcb..0000000
--- a/karaf-boot-tools/karaf-boot-maven-plugin/src/test/java/org/apache/karaf/boot/tools/maven/plugin/test/ServiceReferences.java
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/**
- * 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.boot.tools.maven.plugin.test;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.ops4j.pax.cdi.api.OsgiService;
-import org.springframework.stereotype.Component;
-
-@Component
-public class ServiceReferences {
-    @Inject @OsgiService ServiceB serviceB;
-    
-    @Named("serviceB2Id") @Inject @OsgiService ServiceB serviceB2;
-}
diff --git a/karaf-boot/README.md b/karaf-boot/README.md
deleted file mode 100644
index d428147..0000000
--- a/karaf-boot/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Karaf Boot Annotations
------------------------
-
-Karaf Boot provides annotations allowing you to focus on your business code, and let Karaf Boot deals with all the
-plumbing for you.
\ No newline at end of file
diff --git a/karaf-boot/pom.xml b/karaf-boot/pom.xml
deleted file mode 100644
index 22421fa..0000000
--- a/karaf-boot/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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">
-
-    <!--
-
-        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.
-    -->
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.apache.karaf.boot</groupId>
-        <artifactId>karaf-boot-build</artifactId>
-        <version>1.0.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>karaf-boot</artifactId>
-
-</project>
\ No newline at end of file
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Arg.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Arg.java
deleted file mode 100644
index 89e7d0f..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Arg.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- *  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.boot;
-
-
-/**
- * used to describe argument of the bean constructor
- * or the argument of the factory method for the bean
- * 
- * this is mapped to Targument for the Tbean
- *
- */
-public @interface Arg {
-
-    /**
-     * the value of the argument
-     */
-    String value() default "";
-    
-    /**
-     * the value of the ref attribute of the argument
-     */
-    String ref() default "";
-    
-    /**
-     * the description of the argument
-     */
-    String description() default "";
-    
-    /**
-     *  the zero-based index into the parameter list of the factory method
-     *  or constructor to be invoked for this argument. This is determined by
-     *  specifying the <code>index</code> attribute for the bean. If not
-     *  explicitly set, this will return -1 and the initial ordering is defined
-     *  by its position in the args[] list.
-     */
-    int index() default -1;
-    
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Bean.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Bean.java
deleted file mode 100644
index 0a6ebbf..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Bean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/*
- * To annotate a bean as a blueprint bean, use @Bean
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Bean {
-    
-    /**
-     * id, activation, dependsOn comes from Tcomponent
-     * the id property for the bean
-     * should this be auto generated if none is specified?
-     */
-    String id();
-    
-    /**
-     * the activation property for the bean
-     * This can either be "eager" or "lazy".  If not specified, it
-     * defaults to default-activation attribute of the enclosing
-     * <blueprint> element.
-     */
-    String activation() default "";
-    
-    /**
-     *  the components that the bean depends on
-     */
-    String[] dependsOn() default ""; 
-
-    /**
-     * the description property for the bean
-     */
-    String description() default "";
-    
-    /**
-     * the scope property for the bean. value can be prototype or singleton
-     */
-    String scope() default "";
-
-    /**
-     * the reference to the factory component on which to invoke the
-     * factory method for the bean.
-     */
-    String factoryRef() default "";
-    
-    /**
-     * the factory method in the factoryRef referred factory component
-     * @return
-     */
-    String factoryMethod() default "";
-    
-    /**
-     * arguments for the bean constructor or the factory method of the bean
-     * @return
-     */
-    Arg[] args() default {};
-  
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Bind.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Bind.java
deleted file mode 100644
index f7a3938..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Bind.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * used to annotation bind-method in blueprint reference listeners
- *
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Bind {
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Destroy.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Destroy.java
deleted file mode 100644
index a8e1258..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Destroy.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * used to annotation destroy-method in blueprint beans
- *
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Destroy {
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Element.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Element.java
deleted file mode 100644
index 3259c80..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Element.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * used to annotate the element of the list.
- *
- */
-@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Element {
-    ElementType type() default ElementType.STRING;
-    String value() default "";
-    
-    public enum ElementType {
-        STRING,
-        LONG,
-        BYTE,
-        BOOLEAN,
-        INT,
-        SHORT
-    }
-
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Init.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Init.java
deleted file mode 100644
index 437ca8c..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Init.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * used to annotation init-method in blueprint beans
- *
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Init {
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Inject.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Inject.java
deleted file mode 100644
index e0a0bd7..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Inject.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Inject {
-    String value() default "";
-    String name() default "";
-    String description() default "";
-    String ref() default "";
-    String[] values() default {};
-}
\ No newline at end of file
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/List.java b/karaf-boot/src/main/java/org/apache/karaf/boot/List.java
deleted file mode 100644
index f171908..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/List.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * used to annotate list value in property
- * I am not convinced that we want to support this via annotation
- *
- */
-@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface List {
-    
-    // the element of the list
-    public Element[] value();
-  
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Reference.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Reference.java
deleted file mode 100644
index ee8d474..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Reference.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.FIELD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Reference
-{    
-    /**
-     * the description property of the service reference
-     */
-    String description() default "";
-    
-    /**
-     * the interface type that a matching service must support.
-     */
-    Class<?> serviceInterface() default Object.class;
-    
-    /**
-     * the filter expression that a matching service must match.
-     */
-    String filter() default "";
-    
-    /**
-     * the <code>component-name</code> attribute of the service reference.
-     */
-    String componentName() default "";
-    
-    /**
-     * whether or not a matching service is required at all times.  either optional or mandatory.
-     */
-    String availability() default "";
-    
-    /**
-     * the reference listeners for the service reference, to receive bind and unbind events.
-     */
-    ReferenceListener[] referenceListeners() default {};
-
-    /**
-     * the timeout property.  If the timeout is not specified,
-     * the default-timeout value is inherited from the encapsulating
-     * <code><blueprint></code> definition.
-     */
-    int timeout() default 0;
-    
-    /**
-     * the id for the reference
-     */
-    String id() default "";
-}
\ No newline at end of file
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceList.java b/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceList.java
deleted file mode 100644
index 9c1378a..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/ReferenceList.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.FIELD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ReferenceList
-{    
-    /**
-     * the description property of the service reference
-     */
-    String description() default "";
-    
-    /**
-     * the interface type that a matching service must support.
-     */
-    Class<?> serviceInterface() default Object.class;
-    
-    /**
-     * the filter expression that a matching service must match.
-     */
-    String filter() default "";
-    
-    /**
-     * the <code>component-name</code> attribute of the service reference.
-     */
-    String componentName() default "";
-    
-    /**
-     * whether or not a matching service is required at all times.  either optional or mandatory.
-     */
-    String availability() default "";
-    
-    /**
-     * the reference listeners for the service reference, to receive bind and unbind events.
-     */
-    ReferenceListener[] referenceListeners() default {};
-    
-    /**
-     * the value of the memberType property.
-     */
-    String memberType() default "service-object";
-    
-    /**
-     * the id for the referencelist
-     */
-    String id() default "";
-}
\ No newline at end of file
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Register.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Register.java
deleted file mode 100644
index 41bb50d..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Register.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * used to annotation register-method in blueprint registration listeners
- *
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Register {
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/RegistrationListener.java b/karaf-boot/src/main/java/org/apache/karaf/boot/RegistrationListener.java
deleted file mode 100644
index 793e2dd..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/RegistrationListener.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface RegistrationListener {
-
-    String ref() default "";
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Service.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Service.java
deleted file mode 100644
index 09b6293..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Service.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Service {
-    
-    /**
-     * the registration listeners to be notified when the service is
-     * registered and unregistered with the framework.
-     */
-    RegistrationListener[] registerationListeners() default {};
-    
-    /**
-     *  the ranking value to use when advertising the service.  If the
-     *  ranking value is zero, the service must be registered without a
-     *  <code>service.ranking</code> service property. 
-     */
-    int ranking() default 0;
-    
-    /**
-     *  the auto-export mode for the service.  
-     *  possible values are disabled, interfaces, class_hierarchy, all_classes
-     */
-    String autoExport() default "";
-    
-    /**
-     *  the interfaces that the service should be advertised as supporting.
-     */
-    Class<?>[] interfaces() default {};
-    
-    /**
-     * the user declared properties to be advertised with the service.
-     */
-    ServiceProperty[] serviceProperties() default {};
-}
\ No newline at end of file
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/ServiceProperty.java b/karaf-boot/src/main/java/org/apache/karaf/boot/ServiceProperty.java
deleted file mode 100644
index a6ca33d..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/ServiceProperty.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ServiceProperty {
-    /**
-     * the key of the property
-     */
-    String key() default "";
-    
-    /**
-     * the value of the property
-     */
-    String value() default "";
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Unbind.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Unbind.java
deleted file mode 100644
index dbe15d1..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Unbind.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * used to annotation unbind-method in blueprint reference listeners
- *
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Unbind {
-}
diff --git a/karaf-boot/src/main/java/org/apache/karaf/boot/Unregister.java b/karaf-boot/src/main/java/org/apache/karaf/boot/Unregister.java
deleted file mode 100644
index 04ea698..0000000
--- a/karaf-boot/src/main/java/org/apache/karaf/boot/Unregister.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *  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.boot;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * used to annotation unregister-method in blueprint registration listeners
- *
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Unregister {
-}
diff --git a/pom.xml b/pom.xml
index 2c7f8ac..3650256 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,15 +29,31 @@
         Apache Karaf Boot provides a simple way to create artifacts ready to be deployed in Karaf.
     </description>
 
+    <properties>
+        <karaf.version>4.0.1</karaf.version>
+        <osgi.version>6.0.0</osgi.version>
+    </properties>
+
     <modules>
-        <module>karaf-boot</module>
-        <module>karaf-boot-starter</module>
+        <module>karaf-boot-starters</module>
         <module>karaf-boot-tools</module>
 
-        <module>karaf-boot-parent</module>
+        <!-- TODO reuse @Services & @Reference shell annotations for generic use cases -->
 
         <!-- Samples -->
-        <module>karaf-boot-samples/karaf-boot-sample-simple</module>
+        <module>karaf-boot-samples/karaf-boot-sample-service-provider-osgi</module>
+        <module>karaf-boot-samples/karaf-boot-sample-service-consumer-osgi</module>
+        <module>karaf-boot-samples/karaf-boot-sample-service-provider-ds</module>
+        <module>karaf-boot-samples/karaf-boot-sample-service-consumer-ds</module>
+        <!-- blueprint -->
+        <!-- cdi -->
+        <!-- shell -->
+        <!-- config -->
+        <!-- jpa -->
+        <!-- servlet -->
+        <!-- test -->
+        <!-- rest & soap -->
+        <!-- camel -->
     </modules>
 
 </project>