Bug 431942 - <files> does not behave as documented Extended <files> element to support creation of resource collection without need to copy files
Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/cffd129e Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/cffd129e Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/cffd129e Branch: refs/heads/ant-tasks Commit: cffd129eb1c7f55339ddb4d668732a88930c0c3e Parents: 45b5edd Author: Benjamin Bentmann <bentm...@sonatype.com> Authored: Sun May 18 17:46:37 2014 +0200 Committer: Benjamin Bentmann <bentm...@sonatype.com> Committed: Sun May 18 17:46:37 2014 +0200 ---------------------------------------------------------------------- README.md | 6 +-- .../aether/internal/ant/tasks/Resolve.java | 42 ++++++++++++++++---- .../aether/internal/ant/ResolveTest.java | 18 +++++++++ src/test/resources/ant/Resolve/ant.xml | 9 +++++ 4 files changed, 64 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cffd129e/README.md ---------------------------------------------------------------------- diff --git a/README.md b/README.md index d601b80..4316d64 100644 --- a/README.md +++ b/README.md @@ -190,7 +190,7 @@ this id. This task is able to assemble the collected dependencies in three different ways: * Classpath: The `<path>` element defines a classpath with all resolved dependencies. -* Files: `<files>` will assemble a fileset containing all resolved dependencies. +* Files: `<files>` will assemble a resource collection containing all resolved dependencies and/or copy the files to some directory. * Properties: `<properties>` will set properties with the given prefix and the coordinates to the path to the resolved file. These targets may also be mentioned more than once for the same resolve task, @@ -229,8 +229,8 @@ classpath="compile" equals scope="provided,system,compile"). Valid values are <path refid="tp" classpath="test"/> </resolve> -The layout attribute of the `<files>` element recognizes the following placeholders to refer to the coordinates of the -currently processed artifact: +The layout attribute of the `<files>` element is only allowed when the dir attribute is also given and recognizes the +following placeholders to refer to the coordinates of the currently processed artifact: * {groupId}, e.g. "org.eclipse.aether" * {groupIdDirs}, e.g. "org/eclipse/aether" http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cffd129e/src/main/java/org/eclipse/aether/internal/ant/tasks/Resolve.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/eclipse/aether/internal/ant/tasks/Resolve.java b/src/main/java/org/eclipse/aether/internal/ant/tasks/Resolve.java index 48fcaac..047cc54 100644 --- a/src/main/java/org/eclipse/aether/internal/ant/tasks/Resolve.java +++ b/src/main/java/org/eclipse/aether/internal/ant/tasks/Resolve.java @@ -26,6 +26,8 @@ import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectComponent; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Reference; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.types.resources.Resources; import org.apache.tools.ant.util.FileUtils; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; @@ -168,7 +170,7 @@ public class Resolve } } - group.processResults( results ); + group.processResults( results, session ); } } @@ -193,7 +195,7 @@ public class Resolve } - public abstract void process( Artifact artifact ); + public abstract void process( Artifact artifact, RepositorySystemSession session ); public void setScopes( String scopes ) { @@ -272,7 +274,7 @@ public class Resolve } } - public void process( Artifact artifact ) + public void process( Artifact artifact, RepositorySystemSession session ) { if ( path == null ) { @@ -297,10 +299,12 @@ public class Resolve private File dir; - private Layout layout = new Layout( DEFAULT_LAYOUT ); + private Layout layout; private FileSet fileset; + private Resources resources; + public void setRefId( String refId ) { this.refid = refId; @@ -331,6 +335,10 @@ public class Resolve public void setDir( File dir ) { this.dir = dir; + if ( dir != null && layout == null ) + { + layout = new Layout( DEFAULT_LAYOUT ); + } } public void setLayout( String layout ) @@ -345,9 +353,13 @@ public class Resolve throw new BuildException( "You must either specify the 'refid' for the resource collection" + " or a 'dir' to copy the files to" ); } + if ( dir == null && layout != null ) + { + throw new BuildException( "You must not specify a 'layout' unless 'dir' is also specified" ); + } } - public void process( Artifact artifact ) + public void process( Artifact artifact, RepositorySystemSession session ) { if ( dir != null ) { @@ -387,6 +399,20 @@ public class Resolve Resolve.this.log( "Omit to copy " + src + " to " + dst + ", seems unchanged", Project.MSG_VERBOSE ); } } + else + { + if ( resources == null ) + { + resources = new Resources(); + resources.setProject( getProject() ); + getProject().addReference( refid, resources ); + } + + FileResource resource = new FileResource( artifact.getFile() ); + resource.setBaseDir( session.getLocalRepository().getBasedir() ); + resource.setProject( getProject() ); + resources.add( resource ); + } } } @@ -426,7 +452,7 @@ public class Resolve } } - public void process( Artifact artifact ) + public void process( Artifact artifact, RepositorySystemSession session ) { StringBuilder buffer = new StringBuilder( 256 ); if ( prefix != null && prefix.length() > 0 ) @@ -518,7 +544,7 @@ public class Resolve return requests; } - public void processResults( List<ArtifactResult> results ) + public void processResults( List<ArtifactResult> results, RepositorySystemSession session ) { for ( ArtifactResult result : results ) { @@ -531,7 +557,7 @@ public class Resolve if ( consumer.accept( result.getRequest().getDependencyNode(), Collections.<DependencyNode> emptyList() ) ) { - consumer.process( result.getArtifact() ); + consumer.process( result.getArtifact(), session ); } } } http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cffd129e/src/test/java/org/eclipse/aether/internal/ant/ResolveTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/eclipse/aether/internal/ant/ResolveTest.java b/src/test/java/org/eclipse/aether/internal/ant/ResolveTest.java index e68f684..c9547e0 100644 --- a/src/test/java/org/eclipse/aether/internal/ant/ResolveTest.java +++ b/src/test/java/org/eclipse/aether/internal/ant/ResolveTest.java @@ -16,9 +16,12 @@ import static org.hamcrest.Matchers.*; import java.io.File; import java.io.IOException; import java.util.Arrays; +import java.util.Iterator; import java.util.Map; import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.ResourceCollection; +import org.apache.tools.ant.types.resources.FileResource; public class ResolveTest extends AntBuildsTest @@ -120,4 +123,19 @@ public class ResolveTest assertThat( "aether-api was resolved as a property", prop, nullValue() ); } + public void testResolveResourceCollectionOnly() + { + executeTarget( "testResolveResourceCollectionOnly" ); + + ResourceCollection resources = (ResourceCollection) getProject().getReference( "files" ); + assertThat( resources, is( notNullValue() ) ); + assertThat( resources.size(), is( 2 ) ); + assertThat( resources.isFilesystemOnly(), is( true ) ); + Iterator<?> it = resources.iterator(); + FileResource file = (FileResource) it.next(); + assertThat( file.getFile().getName(), is( "aether-spi-0.9.0.v20140226.jar" ) ); + file = (FileResource) it.next(); + assertThat( file.getFile().getName(), is( "aether-api-0.9.0.v20140226.jar" ) ); + } + } http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cffd129e/src/test/resources/ant/Resolve/ant.xml ---------------------------------------------------------------------- diff --git a/src/test/resources/ant/Resolve/ant.xml b/src/test/resources/ant/Resolve/ant.xml index 4ff378f..58db447 100644 --- a/src/test/resources/ant/Resolve/ant.xml +++ b/src/test/resources/ant/Resolve/ant.xml @@ -102,4 +102,13 @@ </repo:resolve> </target> + <target name="testResolveResourceCollectionOnly"> + <repo:resolve> + <dependencies> + <dependency groupid="org.eclipse.aether" artifactid="aether-spi" version="0.9.0.v20140226" /> + </dependencies> + <files refid="files"/> + </repo:resolve> + </target> + </project>