Warn on duplicate feature dependencies 91/79191/4
authorStephen Kitt <skitt@redhat.com>
Thu, 3 Jan 2019 16:26:07 +0000 (17:26 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 4 Jan 2019 11:26:05 +0000 (12:26 +0100)
When PopulateLocalRepoMojo encounters multiple versions for the
dependencies pulled in through features, it now warns about them.

JIRA: ODLPARENT-189
Change-Id: I916e3dc47e109da9f727eff27b530796649a0218
Signed-off-by: Stephen Kitt <skitt@redhat.com>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
karaf-plugin/src/main/java/org/opendaylight/odlparent/Gace.java [new file with mode: 0644]
karaf-plugin/src/main/java/org/opendaylight/odlparent/PopulateLocalRepoMojo.java

diff --git a/karaf-plugin/src/main/java/org/opendaylight/odlparent/Gace.java b/karaf-plugin/src/main/java/org/opendaylight/odlparent/Gace.java
new file mode 100644 (file)
index 0000000..aa77601
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright © 2019 Red Hat, Inc. and others.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.odlparent;
+
+import java.util.Objects;
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * Group, artifact, classifier, extension.
+ */
+final class Gace {
+    private final String groupId;
+    private final String artifactId;
+    private final String classifier;
+    private final String extension;
+
+    Gace(Artifact artifact) {
+        groupId = artifact.getGroupId();
+        artifactId = artifact.getArtifactId();
+        classifier = artifact.getClassifier();
+        extension = artifact.getExtension();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (!(obj instanceof Gace)) {
+            return false;
+        }
+        Gace gace = (Gace) obj;
+        return Objects.equals(groupId, gace.groupId)
+            && Objects.equals(artifactId, gace.artifactId)
+            && Objects.equals(classifier, gace.classifier)
+            && Objects.equals(extension, gace.extension);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(groupId, artifactId, classifier, extension);
+    }
+
+    @Override
+    public String toString() {
+        return groupId + ":" + artifactId + ":" + classifier + ":" + extension;
+    }
+}
index 39c1c2d64adc0089dfde96efad3169305f9ec2e0..d173a7302e152af370e4633771989df2cc188ae0 100644 (file)
@@ -24,8 +24,10 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 import org.apache.karaf.features.internal.model.Features;
@@ -121,8 +123,14 @@ public class PopulateLocalRepoMojo
             Set<Artifact> artifacts = aetherUtil.resolveArtifacts(FeatureUtil.featuresToCoords(features));
             artifacts.addAll(featureArtifacts);
 
+            Map<Gace, String> gaceVersions = new HashMap<>();
             for (Artifact artifact : artifacts) {
                 LOG.debug("Artifact to be installed: {}", artifact.toString());
+                Gace gace = new Gace(artifact);
+                String duplicate = gaceVersions.putIfAbsent(gace, artifact.getVersion());
+                if (duplicate != null && !duplicate.equals(artifact.getVersion())) {
+                    LOG.warn("Duplicate versions for {}, {} and {}", gace, duplicate, artifact.getVersion());
+                }
             }
             if (localRepo != null) {
                 aetherUtil.installArtifacts(artifacts);