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>

Reply via email to