You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2009/08/27 19:01:46 UTC

svn commit: r808522 - in /maven/plugins/trunk/maven-remote-resources-plugin: pom.xml src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java

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
     {