SLING-4880 apply resolved dependencies to raw model instead of attaching effective model
add new optional parameter "allowUnresolvedPomDependencies" (default: false)

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1690902 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java b/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
index 766e434..769e525 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
@@ -60,6 +60,13 @@
     @Parameter(defaultValue="false")
     protected boolean usePomDependencies;
         
+    /**
+     * If set to true, an exception is throws when "usePomDependencies" is set to true and some
+     * dependency version could not be resolved in the Maven POM.
+     */
+    @Parameter(defaultValue="false")
+    protected boolean allowUnresolvedPomDependencies;
+        
     protected File getTmpDir() {
         return new File(this.project.getBuild().getDirectory(), "slingstart-tmp");
     }
diff --git a/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java b/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
index d6eac24..331adf8 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
@@ -49,7 +49,7 @@
             model = ModelUtility.applyVariables(model, new PomVariableResolver(project));
         }
         if (usePomDependencies) {
-            // TODO: implement applyDependencies
+            model = ModelUtility.applyArtifactVersions(model, new PomArtifactVersionResolver(project, allowUnresolvedPomDependencies));
         }
 
         // write the model
diff --git a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
index 0e58a18..172e3ed 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -152,7 +152,8 @@
             resolverOptions.variableResolver(new PomVariableResolver(info.project));
         }
         if (nodeBooleanValue(info.plugin, "usePomDependencies", false)) {
-            resolverOptions.artifactVersionResolver(new PomArtifactVersionResolver(info.project));
+            resolverOptions.artifactVersionResolver(new PomArtifactVersionResolver(info.project,
+                    nodeBooleanValue(info.plugin, "allowUnresolvedPomDependencies", false)));
         }
 
         // we have to create an effective model to add the dependencies
diff --git a/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java b/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java
index 3c0a6d5..8fa941f 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/PomArtifactVersionResolver.java
@@ -33,12 +33,15 @@
 public class PomArtifactVersionResolver implements ArtifactVersionResolver {
 
     private final MavenProject project;
+    private final boolean allowUnresolvedPomDependencies;
     
     /**
      * @param project Maven project
+     * @param allowUnresolvedPomDependencies If true, no exception is thrown when resolving is not possible
      */
-    public PomArtifactVersionResolver(MavenProject project) {
+    public PomArtifactVersionResolver(MavenProject project, boolean allowUnresolvedPomDependencies) {
         this.project = project;
+        this.allowUnresolvedPomDependencies = allowUnresolvedPomDependencies;
     }
     
     @Override
@@ -53,7 +56,12 @@
                 return version;
             }
         }
-        return null;
+        if (allowUnresolvedPomDependencies) {
+            return null;
+        }
+        else {
+            throw new IllegalArgumentException("Unable to resolve dependency: " + artifact.toMvnUrl());
+        }
     }
     
     private String findVersion(List<Dependency> dependencies, Artifact artifact) {
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 677398f..a5967af 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
@@ -108,7 +108,7 @@
             options.variableResolver(new PomVariableResolver(project));
         }
         if (usePomDependencies) {
-            options.artifactVersionResolver(new PomArtifactVersionResolver(project));
+            options.artifactVersionResolver(new PomArtifactVersionResolver(project, allowUnresolvedPomDependencies));
         }
         return options;
     }