Author: jdcasey
Date: Thu Aug 27 17:01:45 2009
New Revision: 808522

URL: http://svn.apache.org/viewvc?rev=808522&view=rev
Log:
[MRRESOURCES-41] Use the new maven-artifact-resolver API to resolve all 
dependencies for the reactor projects in cases where runOnlyAtExecutionRoot is 
true. Also, adding this new parameter to allow generation of DEPENDENCIES and 
other resource files at the topmost level of a build only, for cases where a 
whole multimodule build will be released at one time.

Modified:
    maven/plugins/trunk/maven-remote-resources-plugin/pom.xml
    
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java

Modified: maven/plugins/trunk/maven-remote-resources-plugin/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/pom.xml?rev=808522&r1=808521&r2=808522&view=diff
==============================================================================
--- maven/plugins/trunk/maven-remote-resources-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-remote-resources-plugin/pom.xml Thu Aug 27 
17:01:45 2009
@@ -57,6 +57,11 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-artifact-resolver</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-project</artifactId>
       <version>2.0.5</version>
@@ -139,6 +144,12 @@
       <version>1.0-beta-1</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven.wagon</groupId>
+      <artifactId>wagon-provider-api</artifactId>
+      <version>1.0-beta-6</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>

Modified: 
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java?rev=808522&r1=808521&r2=808522&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
 Thu Aug 27 17:01:45 2009
@@ -19,39 +19,14 @@
  * under the License.
  */
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
+import org.apache.maven.ProjectDependenciesResolver;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
@@ -67,6 +42,7 @@
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.ProjectUtils;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
 import 
org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException;
 import org.apache.maven.shared.artifact.filter.collection.ArtifactIdFilter;
@@ -88,6 +64,35 @@
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.codehaus.plexus.velocity.VelocityComponent;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
 /**
  * <p>
  * Pull down resourceBundles containing remote resources and process the
@@ -111,6 +116,16 @@
 public class ProcessRemoteResourcesMojo
     extends AbstractMojo
 {
+    
+    /**
+     * If true, only generate resources in the directory of the root project 
in a multimodule build.
+     * Dependencies from all modules will be aggregated before 
resource-generation takes place.
+     * 
+     * @parameter default-value="false"
+     * @since 1.1
+     */
+    private boolean runOnlyAtExecutionRoot;
+    
     /**
      * The local repository taken from Maven's runtime. Typically 
$HOME/.m2/repository.
      *
@@ -366,6 +381,11 @@
      * @parameter expression="${excludeTransitive}" default-value="false"
      */
     protected boolean excludeTransitive;
+    
+    /**
+     * @component role-hint="default"
+     */
+    protected ProjectDependenciesResolver dependencyResolver;
 
     public void execute()
         throws MojoExecutionException
@@ -462,14 +482,25 @@
 
         // add filters in well known order, least specific to most specific
         FilterArtifacts filter = new FilterArtifacts();
+        
+        Set depArtifacts;
+        Set artifacts;
+        if ( runOnlyAtExecutionRoot )
+        {
+            depArtifacts = aggregateProjectDependencyArtifacts();
+            artifacts = resolveProjectArtifacts();
+        }
+        else
+        {
+            depArtifacts = project.getDependencyArtifacts();
+            artifacts = project.getArtifacts();
+        }
 
-        filter.addFilter( new TransitivityFilter( 
project.getDependencyArtifacts(), this.excludeTransitive ) );
+        filter.addFilter( new TransitivityFilter( depArtifacts, 
this.excludeTransitive ) );
         filter.addFilter( new ScopeFilter( this.includeScope, 
this.excludeScope ) );
         filter.addFilter( new GroupIdFilter( this.includeGroupIds, 
this.excludeGroupIds ) );
         filter.addFilter( new ArtifactIdFilter( this.includeArtifactIds, 
this.excludeArtifactIds ) );
 
-        // start with all artifacts.
-        Set artifacts = project.getArtifacts();
         // perform filtering
         try
         {
@@ -552,6 +583,59 @@
         return projects;
     }
 
+    private Set resolveProjectArtifacts()
+        throws MojoExecutionException
+    {
+        List projects = mavenSession.getSortedProjects();
+
+        try
+        {
+            return dependencyResolver.resolve( projects, 
Collections.singleton( Artifact.SCOPE_TEST ), mavenSession );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new MojoExecutionException( "Failed to resolve dependencies 
for one or more projects in the reactor. Reason: "
+                + e.getMessage(), e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            throw new MojoExecutionException( "Failed to resolve dependencies 
for one or more projects in the reactor. Reason: "
+                + e.getMessage(), e );
+        }
+    }
+
+    private Set aggregateProjectDependencyArtifacts()
+        throws MojoExecutionException
+    {
+        Set artifacts = new LinkedHashSet();
+        
+        List projects = mavenSession.getSortedProjects();
+        for ( Iterator it = projects.iterator(); it.hasNext(); )
+        {
+            MavenProject p = (MavenProject) it.next();
+            if ( p.getDependencyArtifacts() == null )
+            {
+                try
+                {
+                    Set depArtifacts = p.createArtifacts( artifactFactory, 
null, null );
+                    p.setDependencyArtifacts( depArtifacts );
+                    
+                    if ( depArtifacts != null && !depArtifacts.isEmpty() )
+                    {
+                        artifacts.addAll( depArtifacts );
+                    }
+                }
+                catch ( InvalidDependencyVersionException e )
+                {
+                    throw new MojoExecutionException( "Failed to create 
dependency artifacts for: " + p.getId() + ". Reason: "
+                        + e.getMessage(), e );
+                }
+            }
+        }
+        
+        return artifacts;
+    }
+
     protected Map getProjectsSortedByOrganization( List projects )
         throws MojoExecutionException
     {


Reply via email to