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>