FELIX-4836: Protect against multiple scr bnd plugin invocations.
Also, fixed the pom.xml for the bnd scr plugin and also for the scrtask plugin, which were still referencing old 
org.apache.felix.scr.annotations 1.9.9-SNAPSHOT versions, while the latest version is 1.9.11-SNAPSHOT version.



git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1669348 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scrplugin/bnd-scr-plugin/pom.xml b/scrplugin/bnd-scr-plugin/pom.xml
index 6de852b..1c7eb17 100644
--- a/scrplugin/bnd-scr-plugin/pom.xml
+++ b/scrplugin/bnd-scr-plugin/pom.xml
@@ -55,7 +55,7 @@
 		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.scr.annotations</artifactId>
-			<version>1.9.9-SNAPSHOT</version>
+			<version>1.9.11-SNAPSHOT</version>
 			<scope>compile</scope>
 		</dependency>
 		<dependency>
diff --git a/scrplugin/bnd-scr-plugin/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java b/scrplugin/bnd-scr-plugin/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java
index b115e02..aab84d9 100644
--- a/scrplugin/bnd-scr-plugin/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java
+++ b/scrplugin/bnd-scr-plugin/src/main/java/org/apache/felix/scrplugin/bnd/SCRDescriptorBndPlugin.java
@@ -29,8 +29,11 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.felix.scrplugin.Options;
 import org.apache.felix.scrplugin.Result;
@@ -200,15 +203,33 @@
 	}
 
 	private void addServiceComponentHeader(Analyzer analyzer, String components) {
-		String oldComponents = analyzer.getProperty("Service-Component");
-		if (oldComponents != null && oldComponents.length() > 0) {
-			StringBuilder sb = new StringBuilder(oldComponents);
-			sb.append(",");
-			sb.append(components);
-			components = sb.toString();
+		Set<String> descriptorsSet = new HashSet<String>();
+		String oldComponents = analyzer.getProperty("Service-Component");		
+		parseComponents(descriptorsSet, oldComponents);
+		parseComponents(descriptorsSet, components);
+		
+		StringBuilder sb = new StringBuilder();
+		Iterator<String> it = descriptorsSet.iterator();
+		while (it.hasNext()) {
+		    sb.append(it.next());
+		    if (it.hasNext()) {
+		        sb.append(",");
+		    }
 		}
-		log.info("Setting Service-Component header: " + components);
-		analyzer.setProperty("Service-Component", components);
+		String comps = sb.toString();
+		log.info("Setting Service-Component header: " + comps);
+		analyzer.setProperty("Service-Component", comps);
+	}
+
+    private void parseComponents(Set<String> descriptorsSet, String components) {
+        if (components != null && components.length() > 0) {
+            for (String comp : components.split(",")) {
+                comp = comp.trim();
+                if (comp.length() > 0) {
+                    descriptorsSet.add(comp);
+                }
+            }
+        }
 	}
 
 	private void init(Analyzer analyzer) {
diff --git a/scrplugin/scrtask/pom.xml b/scrplugin/scrtask/pom.xml
index d055881..e9ff64f 100644
--- a/scrplugin/scrtask/pom.xml
+++ b/scrplugin/scrtask/pom.xml
@@ -60,7 +60,7 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.scr.annotations</artifactId>
-            <version>1.9.9-SNAPSHOT</version>
+            <version>1.9.11-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
         <dependency>