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 {