Bug 3656: Fix to take into account the repos installed by karaf framework 49/22849/1
authorEd Warnicke <hagbard@gmail.com>
Wed, 17 Jun 2015 23:57:35 +0000 (17:57 -0600)
committerEd Warnicke <hagbard@gmail.com>
Thu, 18 Jun 2015 00:21:26 +0000 (00:21 +0000)
Change-Id: I954d9ca3abb122c427b9800fd2407586dcf50b96
Signed-off-by: Ed Warnicke <hagbard@gmail.com>
karaf-plugin/src/main/java/org/opendaylight/odlparent/AetherUtil.java
karaf-plugin/src/main/java/org/opendaylight/odlparent/PopulateLocalRepoMojo.java

index 61d9fc75fad3cce5d0183bfb88c36d464b8fbf33..f5ad179b48189cda5526eed2c44f9e201ba083eb 100644 (file)
@@ -6,6 +6,7 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.maven.plugin.logging.Log;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
@@ -36,11 +37,14 @@ public class AetherUtil {
 
     protected File localRepository;
 
-    public AetherUtil(RepositorySystem repoSystem,RepositorySystemSession repoSession,List<RemoteRepository> remoteRepos, File localRepository) {
+    protected Log log;
+
+    public AetherUtil(RepositorySystem repoSystem,RepositorySystemSession repoSession,List<RemoteRepository> remoteRepos, File localRepository,Log log) {
         this.repoSystem = repoSystem;
         this.repoSession = repoSession;
         this.remoteRepos = remoteRepos;
         this.localRepository = localRepository;
+        this.log = log;
     }
 
     public Set<Artifact> resolveDependencies(List<Dependency>dependencies,DependencyFilter filter) throws DependencyResolutionException {
@@ -56,21 +60,30 @@ public class AetherUtil {
         return artifacts;
     }
 
-    public Artifact resolveArtifact(Artifact artifact) throws ArtifactResolutionException {
+    public Artifact resolveArtifact(Artifact artifact) {
         ArtifactRequest request = new ArtifactRequest(artifact, remoteRepos,null);
-        ArtifactResult result = repoSystem.resolveArtifact(repoSession, request);
+        ArtifactResult result;
+        try {
+            result = repoSystem.resolveArtifact(repoSession, request);
+        } catch (ArtifactResolutionException e) {
+            log.warn("Unable to resolve artifact: " + e.getMessage());
+            return null;
+        }
         return result.getArtifact();
     }
 
-    public Artifact resolveArtifact(String coord) throws ArtifactResolutionException {
+    public Artifact resolveArtifact(String coord) {
         DefaultArtifact artifact = new DefaultArtifact(coord);
         return resolveArtifact(artifact);
     }
 
-    public Set<Artifact> resolveArtifacts(Set<String> coords) throws ArtifactResolutionException {
+    public Set<Artifact> resolveArtifacts(Set<String> coords) {
         Set<Artifact> result = new LinkedHashSet<Artifact>();
         for(String coord: coords) {
-            result.add(resolveArtifact(coord));
+            Artifact artifact = resolveArtifact(coord);
+            if (artifact != null) {
+                result.add(artifact);
+            }
         }
         return result;
     }
index a8b4fc97e5e2e7088a2a22490a8db87bf5d562dc..069ab273aaf46a94949477722d4b01cfc45f771e 100644 (file)
@@ -19,43 +19,25 @@ package org.opendaylight.odlparent;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.net.MalformedURLException;
+import java.io.IOException;
 import java.net.URL;
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Properties;
 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;
 import org.apache.karaf.features.internal.model.Features;
-import org.apache.karaf.features.internal.model.JaxbUtil;
 import org.apache.karaf.tooling.url.CustomBundleURLStreamHandlerFactory;
 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.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
-import org.eclipse.aether.artifact.DefaultArtifact;
-import org.eclipse.aether.artifact.DefaultArtifactType;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.collection.DependencyCollectionException;
-import org.eclipse.aether.graph.Dependency;
-import org.eclipse.aether.installation.InstallRequest;
-import org.eclipse.aether.installation.InstallationException;
-import org.eclipse.aether.repository.LocalRepository;
-import org.eclipse.aether.repository.LocalRepositoryManager;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.resolution.ArtifactResolutionException;
-import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.resolution.DependencyRequest;
-import org.eclipse.aether.resolution.DependencyResolutionException;
-import org.eclipse.aether.resolution.DependencyResult;
-import org.ops4j.pax.url.mvn.Parser;
 
 /**
  * @goal populate-local-repo
@@ -107,9 +89,10 @@ public class PopulateLocalRepoMojo
     private AetherUtil aetherUtil;
 
     public void execute() throws MojoExecutionException, MojoFailureException {
-        aetherUtil = new AetherUtil(repoSystem, repoSession, remoteRepos,localRepo);
+
+        aetherUtil = new AetherUtil(repoSystem, repoSession, remoteRepos,localRepo,getLog());
         try {
-            Set<Artifact> featureArtifacts = new LinkedHashSet<Artifact>();
+            Set<Artifact> featureArtifacts = readFeatureCfg();
             featureArtifacts.addAll(aetherUtil.resolveDependencies(MvnToAetherMapper.toAether(project.getDependencies()),
                     new KarafFeaturesDependencyFilter()));
             Set<Features> features = FeatureUtil.readFeatures(featureArtifacts);
@@ -130,4 +113,24 @@ public class PopulateLocalRepoMojo
             throw new MojoExecutionException("Failure: ", e);
         }
     }
+
+    private Set<Artifact> readFeatureCfg() throws ArtifactResolutionException {
+        Set<Artifact> artifacts = new LinkedHashSet<Artifact>();
+        File file = new File(localRepo.getParentFile().toString() + "/etc/org.apache.karaf.features.cfg");
+        Properties prop = new Properties();
+        try {
+            prop.load(new FileInputStream(file));
+            String featuresRepositories = prop.getProperty("featuresRepositories");
+            List<String> result = Arrays.asList(featuresRepositories.split(","));
+            for(String mvnUrl: result) {
+                artifacts.add(aetherUtil.resolveArtifact(FeatureUtil.toCoord(new URL(mvnUrl))));
+            }
+        } catch (FileNotFoundException e) {
+            getLog().info("Could not find properties file: " + file.getAbsolutePath());
+        } catch (IOException e) {
+            getLog().info("Could not read properties file: " + file.getAbsolutePath());
+        }
+
+        return artifacts;
+    }
 }