Bug 6187: Force more maven resolution in karaf-plugin 42/42842/3
authorVratko Polak <vrpolak@cisco.com>
Mon, 1 Aug 2016 13:22:41 +0000 (15:22 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 3 Aug 2016 08:30:03 +0000 (08:30 +0000)
Especially concerning level 1 feature repository dependencies.
This fixed Bug 6187 in my local testing.

+ Improve logging.

Change-Id: Ie973e3669510061afd59a6c9d22f7a9161f0bd13
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
karaf-plugin/src/main/java/org/opendaylight/odlparent/AetherUtil.java
karaf-plugin/src/main/java/org/opendaylight/odlparent/FeatureUtil.java
karaf-plugin/src/main/java/org/opendaylight/odlparent/KarafFeaturesDependencyFilter.java
karaf-plugin/src/main/java/org/opendaylight/odlparent/MvnToAetherMapper.java
karaf-plugin/src/main/java/org/opendaylight/odlparent/PopulateLocalRepoMojo.java

index d0de62184bd34c15e2db88584774cf7dec3f6f5a..293f7588a2ab687223fb350081f40beaec392af7 100644 (file)
@@ -13,7 +13,6 @@ import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
-
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
@@ -82,6 +81,7 @@ public class AetherUtil {
         for (ArtifactResult artifactResult : results.getArtifactResults()) {
             artifacts.add(artifactResult.getArtifact());
         }
+        LOG.trace("resolveDependencies({}) returns {}", dependencies, artifacts);
         return artifacts;
     }
 
@@ -100,6 +100,7 @@ public class AetherUtil {
             LOG.warn("Unable to resolve artifact: {}", e.getMessage(), e);
             return null;
         }
+        LOG.trace("resolveArtifacts({}) returns {}", artifact, result.getArtifact());
         return result.getArtifact();
     }
 
@@ -128,6 +129,7 @@ public class AetherUtil {
                 result.add(artifact);
             }
         }
+        LOG.trace("resolveArtifacts({}) returns {}", coords, result);
         return result;
     }
 
@@ -153,6 +155,7 @@ public class AetherUtil {
         for (String coord : coords) {
             result.add(toDependency(coord));
         }
+        LOG.trace("toDependencies({}) returns {}", coords, result);
         return result;
     }
 
index 0e6ca993d196d88435bcb5f170a77cd72173e1c9..4777d236803e5914ad0ca7daa7f6f8b37b578345 100644 (file)
@@ -17,7 +17,6 @@ import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
-
 import org.apache.karaf.features.internal.model.Bundle;
 import org.apache.karaf.features.internal.model.ConfigFile;
 import org.apache.karaf.features.internal.model.Feature;
@@ -26,8 +25,12 @@ import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.resolution.ArtifactResolutionException;
 import org.ops4j.pax.url.mvn.internal.Parser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public final class FeatureUtil {
+    private static final Logger LOG = LoggerFactory.getLogger(FeatureUtil.class);
+
     private FeatureUtil() {
         throw new UnsupportedOperationException();
     }
@@ -44,6 +47,7 @@ public final class FeatureUtil {
         for (URL url : urls) {
             result.add(toCoord(url));
         }
+        LOG.trace("toCoord({}) returns {}", urls, result);
         return result;
     }
 
@@ -66,6 +70,7 @@ public final class FeatureUtil {
             coord = coord + ":" + parser.getClassifier();
         }
         coord = coord + ":" + parser.getVersion().replaceAll("\\$.*$", "");
+        LOG.trace("toCoord({}) returns {}", url, coord);
         return coord;
     }
 
@@ -81,6 +86,7 @@ public final class FeatureUtil {
         for (String url : repository) {
             result.add(toCoord(new URL(url)));
         }
+        LOG.trace("mvnUrlsToCoord({}) returns {}", repository, result);
         return result;
     }
 
@@ -107,6 +113,7 @@ public final class FeatureUtil {
         for (Features feature : features) {
             result.addAll(featuresRepositoryToCoords(feature));
         }
+        LOG.trace("featuresRepositoryToCoords({}) returns {}", features, result);
         return result;
     }
 
@@ -125,6 +132,7 @@ public final class FeatureUtil {
         if (feature.getConfigfile() != null) {
             result.addAll(configFilesToCoords(feature.getConfigfile()));
         }
+        LOG.trace("featureToCoords({}) returns {}", feature.getName(), result);
         return result;
     }
 
@@ -140,6 +148,7 @@ public final class FeatureUtil {
         for (ConfigFile configFile : configfiles) {
             result.add(toCoord(new URL(configFile.getLocation())));
         }
+        LOG.trace("configFilesToCoords({}) returns {}", configfiles, result);
         return result;
     }
 
@@ -155,6 +164,7 @@ public final class FeatureUtil {
         for (Bundle bundle : bundles) {
             result.add(toCoord(new URL(bundle.getLocation())));
         }
+        LOG.trace("bundlesToCoords({}) returns {}", bundles, result);
         return result;
     }
 
@@ -175,6 +185,7 @@ public final class FeatureUtil {
                 result.addAll(featureToCoords(feature));
             }
         }
+        LOG.trace("featuresToCoords({}) returns {}", features.getName(), result);
         return result;
     }
 
@@ -191,6 +202,7 @@ public final class FeatureUtil {
         for (Features feature : features) {
             result.addAll(featuresToCoords(feature));
         }
+        LOG.trace("featuresToCoords({}) returns {}", features, result);
         return result;
     }
 
@@ -206,6 +218,7 @@ public final class FeatureUtil {
         for (Artifact artifact : featureArtifacts) {
             result.add(readFeature(artifact));
         }
+        LOG.trace("readFeatures({}) returns {}", featureArtifacts, result);
         return result;
     }
 
@@ -219,7 +232,9 @@ public final class FeatureUtil {
     public static Features readFeature(Artifact artifact) throws FileNotFoundException {
         File file = artifact.getFile();
         FileInputStream stream = new FileInputStream(file);
-        return JaxbUtil.unmarshal(stream, false);
+        Features result = JaxbUtil.unmarshal(stream, false);
+        LOG.trace("readFeature({}) returns {} without resolving first", artifact, result.getName());
+        return result;
     }
 
     /**
@@ -234,7 +249,9 @@ public final class FeatureUtil {
     public static Features readFeature(AetherUtil aetherUtil, String coords)
             throws ArtifactResolutionException, FileNotFoundException {
         Artifact artifact = aetherUtil.resolveArtifact(coords);
-        return readFeature(artifact);
+        Features result = readFeature(artifact);
+        LOG.trace("readFeature({}) returns {} after resolving first", coords, result.getName());
+        return result;
     }
 
     /**
@@ -251,15 +268,21 @@ public final class FeatureUtil {
     public static Set<Features> findAllFeaturesRecursively(
             AetherUtil aetherUtil, Features features, Set<String> existingCoords)
             throws MalformedURLException, FileNotFoundException, ArtifactResolutionException {
+        LOG.debug("findAllFeaturesRecursively({}) starts", features.getName());
+        LOG.trace("findAllFeaturesRecursively knows about these coords: {}", existingCoords);
         Set<Features> result = new LinkedHashSet<>();
         Set<String> coords = FeatureUtil.featuresRepositoryToCoords(features);
         for (String coord : coords) {
             if (!existingCoords.contains(coord)) {
+                LOG.trace("findAllFeaturesRecursively() going to add {}", coord);
                 existingCoords.add(coord);
                 Features feature = FeatureUtil.readFeature(aetherUtil, coord);
                 result.add(feature);
+                LOG.debug("findAllFeaturesRecursively() added {}", coord);
                 result.addAll(findAllFeaturesRecursively(aetherUtil, FeatureUtil.readFeature(aetherUtil, coord),
                         existingCoords));
+            } else {
+                LOG.trace("findAllFeaturesRecursively() skips known {}", coord);
             }
         }
         return result;
@@ -286,4 +309,19 @@ public final class FeatureUtil {
         return result;
     }
 
+    /**
+     * Unmarshals all the features (including known ones) starting from the given features.
+     *
+     * @param aetherUtil The Aether resolver.
+     * @param features The starting features.
+     * @return The features.
+     * @throws MalformedURLException if a URL is malformed.
+     * @throws FileNotFoundException if a file is missing.
+     * @throws ArtifactResolutionException if artifact coordinates can't be resolved.
+     */
+    public static Set<Features> findAllFeaturesRecursively(AetherUtil aetherUtil, Set<Features> features)
+            throws MalformedURLException, FileNotFoundException, ArtifactResolutionException {
+        return findAllFeaturesRecursively(aetherUtil, features, new LinkedHashSet<String>());
+    }
+
 }
index 6340919966e2c925fecad4720704120dcec5709a..c97011c8d24d6a10fcbc98d56f57b1755c6878c4 100644 (file)
@@ -9,7 +9,6 @@
 package org.opendaylight.odlparent;
 
 import java.util.List;
-
 import org.eclipse.aether.graph.DependencyFilter;
 import org.eclipse.aether.graph.DependencyNode;
 
index 0a2cb84ab0e80e013b224d7bd6b9bc011815b13c..dafbcb6a6a7460b9d8fd221bfcca4dc46e1c6eab 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.odlparent;
 
 import java.util.ArrayList;
 import java.util.List;
-
 import org.eclipse.aether.artifact.DefaultArtifact;
 import org.eclipse.aether.artifact.DefaultArtifactType;
 import org.eclipse.aether.graph.Dependency;
index a77635e3eaccb3f5db24129e90c9b02a212ad3a6..928a1de7f082d905925eb79c501602ca680f2d3a 100644 (file)
@@ -26,7 +26,6 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
-
 import org.apache.karaf.features.internal.model.Features;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -115,16 +114,17 @@ public class PopulateLocalRepoMojo
                     aetherUtil.resolveDependencies(MvnToAetherMapper.toAether(project.getDependencies()),
                             new KarafFeaturesDependencyFilter()));
             Set<Features> features = FeatureUtil.readFeatures(featureArtifacts);
-            features.addAll(FeatureUtil.findAllFeaturesRecursively(aetherUtil, features,
-                    FeatureUtil.featuresRepositoryToCoords(features)));
+            // Do not provide FeatureUtil.featuresRepositoryToCoords(features)) as existingCoords
+            // to findAllFeaturesRecursively, as those coords are not resolved yet, and it would lead to Bug 6187.
+            features.addAll(FeatureUtil.findAllFeaturesRecursively(aetherUtil, features));
             for (Features feature : features) {
-                LOG.info("Features Repos  discovered recursively: {}", feature.getName());
+                LOG.info("Feature repository discovered recursively: {}", feature.getName());
             }
             Set<Artifact> artifacts = aetherUtil.resolveArtifacts(FeatureUtil.featuresToCoords(features));
             artifacts.addAll(featureArtifacts);
 
             for (Artifact artifact : artifacts) {
-                LOG.info("Artifacts to be installed: {}", artifact.toString());
+                LOG.debug("Artifact to be installed: {}", artifact.toString());
             }
             if (localRepo != null) {
                 aetherUtil.installArtifacts(artifacts);