Get artifacts from repositor if overlayed with a different version

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1630130 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/maven/slingstart/ModelUtils.java b/src/main/java/org/apache/sling/maven/slingstart/ModelUtils.java
index 4290fe7..cb079c9 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/ModelUtils.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/ModelUtils.java
@@ -29,6 +29,12 @@
 
 import org.apache.commons.io.IOUtils;
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.project.MavenProject;
@@ -178,6 +184,9 @@
      * @throws MojoExecutionException
      */
     public static Artifact getArtifact(final MavenProject project,
+            final MavenSession session,
+            final ArtifactHandlerManager artifactHandlerManager,
+            final ArtifactResolver resolver,
             final String groupId, final String artifactId, final String version, final String type, final String classifier)
     throws MojoExecutionException {
         final Set<Artifact> artifacts = project.getDependencyArtifacts();
@@ -190,7 +199,21 @@
                 return artifact;
             }
         }
-        return null;
+        final Artifact prjArtifact = new DefaultArtifact(groupId,
+                artifactId,
+                VersionRange.createFromVersion(version),
+                Artifact.SCOPE_PROVIDED,
+                type,
+                classifier,
+                artifactHandlerManager.getArtifactHandler(type));
+        try {
+            resolver.resolve(prjArtifact, project.getRemoteArtifactRepositories(), session.getLocalRepository());
+        } catch (final ArtifactResolutionException e) {
+            throw new MojoExecutionException("Unable to get artifact for " + groupId + ":" + artifactId + ":" + version, e);
+        } catch (final ArtifactNotFoundException e) {
+            throw new MojoExecutionException("Unable to get artifact for " + groupId + ":" + artifactId + ":" + version, e);
+        }
+        return prjArtifact;
     }
 
     private static final String RAW_MODEL_TXT = Model.class.getName() + "/raw.txt";
diff --git a/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java b/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
index 1da050e..e29620f 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
@@ -29,6 +29,8 @@
 import org.apache.commons.io.IOUtils;
 import org.apache.felix.cm.file.ConfigurationHandler;
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
@@ -76,6 +78,16 @@
     @Component
     private ArchiverManager archiverManager;
 
+    @Component
+    private ArtifactHandlerManager artifactHandlerManager;
+
+    /**
+     * Used to look up Artifacts in the remote repository.
+     *
+     */
+    @Component
+    private ArtifactResolver resolver;
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         final Model model = ModelUtils.getEffectiveModel(this.project);
@@ -183,7 +195,7 @@
     throws MojoExecutionException{
         for(final ArtifactGroup group : runMode.getArtifactGroups()) {
             for(final org.apache.sling.provisioning.model.Artifact a : group) {
-                final Artifact artifact = ModelUtils.getArtifact(this.project, a.getGroupId(), a.getArtifactId(), a.getVersion(), a.getType(), a.getClassifier());
+                final Artifact artifact = ModelUtils.getArtifact(this.project, this.mavenSession, this.artifactHandlerManager, this.resolver, a.getGroupId(), a.getArtifactId(), a.getVersion(), a.getType(), a.getClassifier());
                 final File artifactFile = artifact.getFile();
                 contentsMap.put(getPathForArtifact(group.getStartLevel(), artifactFile.getName(), runMode, isBoot), artifactFile);
             }
@@ -309,7 +321,8 @@
     private Artifact getBaseArtifact(final Model model, final String classifier, final String type) throws MojoExecutionException {
         final org.apache.sling.provisioning.model.Artifact baseArtifact = ModelUtils.getBaseArtifact(model);
 
-        final Artifact a = ModelUtils.getArtifact(this.project, baseArtifact.getGroupId(),
+        final Artifact a = ModelUtils.getArtifact(this.project,  this.mavenSession, this.artifactHandlerManager, this.resolver,
+                baseArtifact.getGroupId(),
                 baseArtifact.getArtifactId(),
                 baseArtifact.getVersion(),
                 type,