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 2007/07/13 06:02:41 UTC

svn commit: r555865 - in /maven/plugins/trunk/maven-assembly-plugin: ./ maven-assembly-artifact-types/ maven-assembly-artifact-types/src/ maven-assembly-artifact-types/src/main/ maven-assembly-artifact-types/src/main/resources/ maven-assembly-artifact-...

Author: jdcasey
Date: Thu Jul 12 21:02:39 2007
New Revision: 555865

URL: http://svn.apache.org/viewvc?view=rev&rev=555865
Log:
All ITs run, and I'm including a new feature to allow assembly descriptors and assembly-components to be deployed then resolved again as artifacts. This enables reuse of standard assembly descriptors/components. There is a new IT to test it, and all other ITs pass, including the repository-assembly now (due to fixes in the maven-repository-builder).

Added:
    maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/
    maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/
    maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/
    maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/
    maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/
    maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/plexus/
    maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/plexus/components.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/a.properties   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/assemble/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/assemble/bin.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/a/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/a/file.txt   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/b/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/b/file.txt   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/resources/
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/resources/assembly-descriptor.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/goals.txt   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/verify.bsh
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/PrefixedClasspathLocatorStrategy.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/RelativeFileLocatorStrategy.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachAssemblyDescriptorMojo.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachComponentDescriptorMojo.java   (with props)
Modified:
    maven/plugins/trunk/maven-assembly-plugin/pom.xml
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml
    maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilterTest.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java

Added: maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/pom.xml?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/pom.xml Thu Jul 12 21:02:39 2007
@@ -0,0 +1,85 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <artifactId>maven-plugins</artifactId>
+    <groupId>org.apache.maven.plugins</groupId>
+    <version>8</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>maven-assembly-artifact-types</artifactId>
+  <name>Maven Assembly Plugin Artifact Handlers</name>
+  <version>2.2-beta-2-SNAPSHOT</version>
+  <prerequisites>
+    <maven>2.0.4</maven>
+  </prerequisites>
+  <repositories>
+    <repository>
+      <id>codehaus.org</id>
+      <url>http://snapshots.repository.codehaus.org</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+    </repository>
+  </repositories>
+  <pluginRepositories>
+    <pluginRepository>
+      <id>codehaus.snapshots</id>
+      <url>http://snapshots.repository.codehaus.org</url>
+    </pluginRepository>
+  </pluginRepositories>
+  <issueManagement>
+    <system>jira</system>
+    <url>http://jira.codehaus.org/browse/MASSEMBLY</url>
+  </issueManagement>
+  <mailingLists>
+        <!-- duplication from maven-plugins pom - temporary until they inherit properly 
+    -->
+    <mailingList>
+      <name>Maven User List</name>
+      <subscribe>users-subscribe@maven.apache.org</subscribe>
+      <unsubscribe>users-unsubscribe@maven.apache.org</unsubscribe>
+      <post>users@maven.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/maven-users</archive>
+      <otherArchives>
+        <otherArchive>http://www.mail-archive.com/users@maven.apache.org/</otherArchive>
+        <otherArchive>http://www.nabble.com/Maven---Users-f178.html</otherArchive>
+      </otherArchives>
+    </mailingList>
+    <mailingList>
+      <name>Maven Developer List</name>
+      <subscribe>dev-subscribe@maven.apache.org</subscribe>
+      <unsubscribe>dev-unsubscribe@maven.apache.org</unsubscribe>
+      <post>dev@maven.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/maven-dev</archive>
+    </mailingList>
+    <mailingList>
+      <name>Maven Commits List</name>
+      <subscribe>commits-subscribe@maven.apache.org</subscribe>
+      <unsubscribe>commits-unsubscribe@maven.apache.org</unsubscribe>
+      <post>commits@maven.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/maven-dev</archive>
+    </mailingList>
+        <!-- duplication from maven-parent pom - temporary until they inherit properly 
+    -->
+    <mailingList>
+      <name>Maven Announcements List</name>
+      <post>announce@maven.apache.org</post>
+      <subscribe>announce-subscribe@maven.apache.org</subscribe>
+      <unsubscribe>announce-unsubscribe@maven.apache.org</unsubscribe>
+      <archive>http://mail-archives.apache.org/mod_mbox/maven-announce/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Maven Issues List</name>
+      <post>issues@maven.apache.org</post>
+      <subscribe>issues-subscribe@maven.apache.org</subscribe>
+      <unsubscribe>issues-unsubscribe@maven.apache.org</unsubscribe>
+      <archive>http://mail-archives.apache.org/mod_mbox/maven-issues/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Maven Notifications List</name>
+      <post>notifications@maven.apache.org</post>
+      <subscribe>notifications-subscribe@maven.apache.org</subscribe>
+      <unsubscribe>notifications-unsubscribe@maven.apache.org</unsubscribe>
+      <archive>http://mail-archives.apache.org/mod_mbox/maven-notifications/</archive>
+    </mailingList>
+  </mailingLists>
+</project>

Propchange: maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/plexus/components.xml?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/plexus/components.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/plexus/components.xml Thu Jul 12 21:02:39 2007
@@ -0,0 +1,68 @@
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>assembly-component</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <classifier>assembly-component</classifier>
+        <packaging>assembly-component</packaging>
+        <extension>xml</extension>
+        <type>assembly-component</type>
+        <addedToClasspath>false</addedToClasspath>
+        <includesDependencies>true</includesDependencies>
+      </configuration>
+    </component>
+    <component>
+      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+      <role-hint>assembly-component</role-hint>
+      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+      <configuration>
+        <lifecycles>
+          <lifecycle>
+            <id>default</id>
+            <!-- START SNIPPET: assembly-component-lifecycle -->
+            <phases>
+              <package>org.apache.maven.plugins:maven-assembly-plugin:attach-component-descriptor</package>
+              <install>org.apache.maven.plugins:maven-install-plugin:install</install>
+              <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
+            </phases>
+            <!-- END SNIPPET: assembly-component-lifecycle -->
+          </lifecycle>
+        </lifecycles>
+      </configuration>
+    </component>
+    <component>
+      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
+      <role-hint>assembly-descriptor</role-hint>
+      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
+      <configuration>
+        <classifier>assembly-descriptor</classifier>
+        <packaging>assembly-descriptor</packaging>
+        <extension>xml</extension>
+        <type>assembly-descriptor</type>
+        <addedToClasspath>false</addedToClasspath>
+        <includesDependencies>true</includesDependencies>
+      </configuration>
+    </component>
+    <component>
+      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
+      <role-hint>assembly-descriptor</role-hint>
+      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
+      <configuration>
+        <lifecycles>
+          <lifecycle>
+            <id>default</id>
+            <!-- START SNIPPET: assembly-component-lifecycle -->
+            <phases>
+              <package>org.apache.maven.plugins:maven-assembly-plugin:attach-assembly-descriptor</package>
+              <install>org.apache.maven.plugins:maven-install-plugin:install</install>
+              <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
+            </phases>
+            <!-- END SNIPPET: assembly-component-lifecycle -->
+          </lifecycle>
+        </lifecycles>
+      </configuration>
+    </component>
+  </components>
+</component-set>
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/maven-assembly-artifact-types/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/pom.xml?view=diff&rev=555865&r1=555864&r2=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/pom.xml Thu Jul 12 21:02:39 2007
@@ -230,6 +230,16 @@
             <version>1.0-SNAPSHOT</version>
             <executions>
               <execution>
+                <id>stage-artifact-types</id>
+                <phase>pre-integration-test</phase>
+                <goals>
+                  <goal>stage</goal>
+                </goals>
+                <configuration>
+                  <pomFile>maven-assembly-artifact-types/pom.xml</pomFile>
+                </configuration>
+              </execution>
+              <execution>
                 <id>stage-plugin</id>
                 <phase>pre-integration-test</phase>
                 <goals>
@@ -241,19 +251,6 @@
           <plugin>
             <artifactId>maven-invoker-plugin</artifactId>
             <version>1.1-SNAPSHOT</version>
-            <configuration>
-              <projectsDirectory>src/it</projectsDirectory>
-              <pomIncludes>
-                <pomInclude>**/pom.xml</pomInclude>
-              </pomIncludes>
-              <pomExcludes>
-                <pomExclude>**/child*/pom.xml</pomExclude>
-                <pomExclude>**/module*/pom.xml</pomExclude>
-                <pomExclude>repository-assembly/pom.xml</pomExclude>
-              </pomExcludes>
-              <postBuildHookScript>verify.bsh</postBuildHookScript>
-              <localRepositoryPath>${basedir}/target/local-repository</localRepositoryPath>
-            </configuration>
             <executions>
               <execution>
                 <id>integration-test</id>
@@ -261,6 +258,20 @@
                 <goals>
                   <goal>run</goal>
                 </goals>
+                <configuration>
+                  <projectsDirectory>src/it</projectsDirectory>
+                  <pomIncludes>
+                    <pomInclude>**/pom.xml</pomInclude>
+                  </pomIncludes>
+                  <pomExcludes>
+                    <pomExclude>**/child*/pom.xml</pomExclude>
+                    <pomExclude>**/module*/pom.xml</pomExclude>
+                    <pomExclude>**/descriptor/pom.xml</pomExclude>
+                    <pomExclude>**/assembly/pom.xml</pomExclude>
+                  </pomExcludes>
+                  <postBuildHookScript>verify.bsh</postBuildHookScript>
+                  <localRepositoryPath>${basedir}/target/local-repository</localRepositoryPath>
+                </configuration>
               </execution>
            </executions>
           </plugin>
@@ -284,6 +295,11 @@
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>file-management</artifactId>
       <version>1.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-shared-io</artifactId>
+      <version>1.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/a.properties
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/a.properties?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/a.properties (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/a.properties Thu Jul 12 21:02:39 2007
@@ -0,0 +1 @@
+testProp=boo

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/a.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/a.properties
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/pom.xml?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/pom.xml Thu Jul 12 21:02:39 2007
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.test</groupId>
+    <artifactId>assemblyDescriptor-artifact</artifactId>
+    <version>1</version>
+  </parent>
+  
+  <artifactId>assembly</artifactId>
+  
+  <build>
+    <filters>
+      <filter>a.properties</filter>
+    </filters>
+        
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>testing</version>
+        <configuration>
+          <descriptors>
+            <descriptor>org.test:descriptor:1</descriptor>
+          </descriptors>
+        </configuration>
+        <executions>
+          <execution>
+            <id>assembly</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/assemble/bin.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/assemble/bin.xml?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/assemble/bin.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/assemble/bin.xml Thu Jul 12 21:02:39 2007
@@ -0,0 +1,21 @@
+<assembly>
+  <id>massembly-148-example</id>
+  <formats>
+    <format>dir</format>
+    <format>zip</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <files>
+    <file>
+      <source>src/config/a/file.txt</source>
+      <outputDirectory>a</outputDirectory>
+      <filtered>true</filtered>
+    </file>
+    <file>
+      <source>src/config/b/file.txt</source>
+      <outputDirectory>b</outputDirectory>
+      <destName>file.txt</destName>
+      <filtered>true</filtered>
+    </file>
+  </files>
+</assembly>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/assemble/bin.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/assemble/bin.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/a/file.txt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/a/file.txt?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/a/file.txt (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/a/file.txt Thu Jul 12 21:02:39 2007
@@ -0,0 +1,2 @@
+file A
+${testProp}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/a/file.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/a/file.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/b/file.txt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/b/file.txt?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/b/file.txt (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/b/file.txt Thu Jul 12 21:02:39 2007
@@ -0,0 +1,3 @@
+file B
+${testProp}
+

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/b/file.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/assembly/src/config/b/file.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/pom.xml?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/pom.xml Thu Jul 12 21:02:39 2007
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.test</groupId>
+    <artifactId>assemblyDescriptor-artifact</artifactId>
+    <version>1</version>
+  </parent>
+  
+  <artifactId>descriptor</artifactId>
+  <packaging>assembly-descriptor</packaging>
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>testing</version>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/resources/assembly-descriptor.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/resources/assembly-descriptor.xml?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/resources/assembly-descriptor.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/resources/assembly-descriptor.xml Thu Jul 12 21:02:39 2007
@@ -0,0 +1,20 @@
+<assembly>
+  <id>fromArtifact</id>
+  <formats>
+    <format>dir</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <files>
+    <file>
+      <source>src/config/a/file.txt</source>
+      <outputDirectory>a</outputDirectory>
+      <filtered>true</filtered>
+    </file>
+    <file>
+      <source>src/config/b/file.txt</source>
+      <outputDirectory>b</outputDirectory>
+      <destName>file.txt</destName>
+      <filtered>true</filtered>
+    </file>
+  </files>
+</assembly>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/resources/assembly-descriptor.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/descriptor/src/main/resources/assembly-descriptor.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/goals.txt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/goals.txt?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/goals.txt (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/goals.txt Thu Jul 12 21:02:39 2007
@@ -0,0 +1 @@
+install

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/goals.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/goals.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/pom.xml?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/pom.xml Thu Jul 12 21:02:39 2007
@@ -0,0 +1,24 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.test</groupId>
+  <artifactId>assemblyDescriptor-artifact</artifactId>
+  <packaging>pom</packaging>
+  <version>1</version>
+  <name>assemblyDescriptor-artifact</name>
+  
+  <modules>
+    <module>descriptor</module>
+    <module>assembly</module>
+  </modules>
+  
+  <build>
+    <extensions>
+      <extension>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-artifact-types</artifactId>
+        <version>testing</version>
+      </extension>
+    </extensions>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/verify.bsh
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/verify.bsh?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/verify.bsh (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/basic-features/assemblyDescriptor-artifact/verify.bsh Thu Jul 12 21:02:39 2007
@@ -0,0 +1,28 @@
+import java.io.*;
+import java.net.*;
+import java.util.jar.*;
+
+boolean result = true;
+
+try
+{
+    File a = new File( basedir, "assembly/target/assembly-1-fromArtifact.dir/a/file.txt");
+    File b = new File( basedir, "assembly/target/assembly-1-fromArtifact.dir/b/file.txt");
+    if(result) {
+        BufferedReader r = new BufferedReader(new FileReader(a));
+        String s = r.readLine();
+        result = s.equals("file A");
+    }
+    if(result) {
+        BufferedReader r = new BufferedReader(new FileReader(b));
+        String s = r.readLine();
+        result = s.equals("file B");
+    }
+}
+catch( IOException e )
+{
+    e.printStackTrace();
+    result = false;
+}
+
+return result;

Modified: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml?view=diff&rev=555865&r1=555864&r2=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/pom.xml Thu Jul 12 21:02:39 2007
@@ -18,7 +18,8 @@
   <build>
     <plugins>
       <plugin>
-        <artifactId>maven-assembly-plugin</artifactId><version>testing</version>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>testing</version>
         <configuration>
           <descriptor>src/assemble/bin.xml</descriptor>
           <finalName>assembly</finalName>        

Modified: maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml?view=diff&rev=555865&r1=555864&r2=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/repository-assembly/src/assemble/bin.xml Thu Jul 12 21:02:39 2007
@@ -3,9 +3,11 @@
   <formats>
     <format>dir</format>
   </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
   <repositories>
     <repository>
       <outputDirectory>repo</outputDirectory>
+      <scope>test</scope>
       <includes>
         <include>junit:junit</include>
       </includes>

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java?view=diff&rev=555865&r1=555864&r2=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java Thu Jul 12 21:02:39 2007
@@ -11,11 +11,11 @@
 public interface AssemblerConfigurationSource
 {
 
-    File getDescriptor();
+    String getDescriptor();
 
     String getDescriptorId();
 
-    File[] getDescriptors();
+    String[] getDescriptors();
 
     String[] getDescriptorReferences();
 

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java?view=diff&rev=555865&r1=555864&r2=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java Thu Jul 12 21:02:39 2007
@@ -1,5 +1,7 @@
 package org.apache.maven.plugin.assembly.io;
 
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
@@ -15,15 +17,21 @@
 import org.apache.maven.plugin.assembly.model.io.xpp3.AssemblyXpp3Reader;
 import org.apache.maven.plugin.assembly.model.io.xpp3.ComponentXpp3Reader;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.io.location.ArtifactLocatorStrategy;
+import org.apache.maven.shared.io.location.ClasspathResourceLocatorStrategy;
+import org.apache.maven.shared.io.location.FileLocatorStrategy;
+import org.apache.maven.shared.io.location.Location;
+import org.apache.maven.shared.io.location.Locator;
+import org.apache.maven.shared.io.location.LocatorStrategy;
+import org.apache.maven.shared.io.location.URLLocatorStrategy;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.logging.console.ConsoleLogger;
-import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.DirectoryScanner;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -46,85 +54,119 @@
     implements AssemblyReader
 {
 
+    /**
+     * @plexus.requirement
+     */
+    private ArtifactFactory factory;
+
+    /**
+     * @plexus.requirement
+     */
+    private ArtifactResolver resolver;
+
     public List readAssemblies( AssemblerConfigurationSource configSource )
         throws AssemblyReadException, InvalidAssemblerConfigurationException
     {
+        Locator locator = new Locator();
+
+        LocatorStrategy prefixedClasspathStrategy = new PrefixedClasspathLocatorStrategy( "/assemblies/" );
+        LocatorStrategy classpathStrategy = new ClasspathResourceLocatorStrategy();
+
+        List strategies = new ArrayList();
+        strategies.add( new RelativeFileLocatorStrategy( configSource.getBasedir() ) );
+
+        strategies.add( new ArtifactLocatorStrategy( factory, resolver, configSource.getLocalRepository(),
+                                                     configSource.getRemoteRepositories(), "assembly-descriptor" ) );
+
+        strategies.add( prefixedClasspathStrategy );
+        strategies.add( classpathStrategy );
+        strategies.add( new FileLocatorStrategy() );
+        strategies.add( new URLLocatorStrategy() );
+
+        List refStrategies = new ArrayList();
+        refStrategies.add( prefixedClasspathStrategy );
+        refStrategies.add( classpathStrategy );
+
         List assemblies = new ArrayList();
 
-        File descriptor = configSource.getDescriptor();
+        String descriptor = configSource.getDescriptor();
         String descriptorId = configSource.getDescriptorId();
-        File[] descriptors = configSource.getDescriptors();
+        String[] descriptors = configSource.getDescriptors();
         String[] descriptorRefs = configSource.getDescriptorReferences();
         File descriptorSourceDirectory = configSource.getDescriptorSourceDirectory();
 
         if ( descriptor != null )
         {
-            assemblies.add( getAssemblyFromDescriptorFile( descriptor, configSource ) );
+            locator.setStrategies( strategies );
+            assemblies.add( getAssemblyFromDescriptor( descriptor, locator, configSource ) );
         }
 
         if ( descriptorId != null )
         {
+            locator.setStrategies( refStrategies );
             assemblies.add( getAssemblyForDescriptorReference( descriptorId, configSource ) );
         }
 
-        if ( descriptors != null && descriptors.length > 0 )
+        if ( ( descriptors != null ) && ( descriptors.length > 0 ) )
         {
+            locator.setStrategies( strategies );
             for ( int i = 0; i < descriptors.length; i++ )
             {
                 getLogger().info( "Reading assembly descriptor: " + descriptors[i] );
-                assemblies.add( getAssemblyFromDescriptorFile( descriptors[i], configSource ) );
+                assemblies.add( getAssemblyFromDescriptor( descriptors[i], locator, configSource ) );
             }
         }
 
-        if ( descriptorRefs != null && descriptorRefs.length > 0 )
+        if ( ( descriptorRefs != null ) && ( descriptorRefs.length > 0 ) )
         {
+            locator.setStrategies( refStrategies );
             for ( int i = 0; i < descriptorRefs.length; i++ )
             {
                 assemblies.add( getAssemblyForDescriptorReference( descriptorRefs[i], configSource ) );
             }
         }
 
-        if ( descriptorSourceDirectory != null && descriptorSourceDirectory.isDirectory() )
+        if ( ( descriptorSourceDirectory != null ) && descriptorSourceDirectory.isDirectory() )
         {
+            locator.setStrategies( Collections.singletonList( new RelativeFileLocatorStrategy( descriptorSourceDirectory ) ) );
+
+            DirectoryScanner scanner = new DirectoryScanner();
+            scanner.setBasedir( descriptorSourceDirectory );
+            scanner.setIncludes( new String[]{ "**/*" } );
+
             try
             {
-                List descriptorList;
+                scanner.scan();
+            }
+            // FIXME: plexus-utils >= 1.3-SNAPSHOT should fix this.
+            catch ( NullPointerException e )
+            {
+                StackTraceElement frameZero = e.getStackTrace()[0];
 
-                try
-                {
-                    descriptorList = FileUtils.getFiles( descriptorSourceDirectory, "**/*.xml", null );
-                }
-                // FIXME: plexus-utils >= 1.3-SNAPSHOT should fix this.
-                catch ( NullPointerException e )
+                if ( "org.codehaus.plexus.util.DirectoryScanner".equals( frameZero.getClassName() )
+                                && "scandir".equals( frameZero.getMethodName() ) )
                 {
-                    StackTraceElement frameZero = e.getStackTrace()[0];
-
-                    if ( "org.codehaus.plexus.util.DirectoryScanner".equals( frameZero.getClassName() )
-                                    && "scandir".equals( frameZero.getMethodName() ) )
-                    {
-                        if ( getLogger().isDebugEnabled() )
-                        {
-                            getLogger().debug(
-                                               "Caught filesystem error while scanning directories..."
-                                                               + "using zero-length list as the result.", e );
-                        }
-
-                        descriptorList = Collections.EMPTY_LIST;
-                    }
-                    else
+                    if ( getLogger().isDebugEnabled() )
                     {
-                        throw e;
+                        getLogger().debug(
+                                           "Caught filesystem error while scanning directories..."
+                                                           + "using zero-length list as the result.", e );
                     }
                 }
-
-                for ( Iterator iter = descriptorList.iterator(); iter.hasNext(); )
+                else
                 {
-                    assemblies.add( getAssemblyFromDescriptorFile( (File) iter.next(), configSource ) );
+                    throw e;
                 }
             }
-            catch ( IOException e )
+
+            String[] paths = scanner.getIncludedFiles();
+
+            if ( paths != null )
             {
-                throw new AssemblyReadException( "error discovering descriptor files: " + e.getMessage() );
+                for ( int i = 0; i < paths.length; i++ )
+                {
+                    assemblies.add( getAssemblyFromDescriptor( paths[i], locator, configSource ) );
+                }
             }
         }
 
@@ -151,27 +193,53 @@
         throws AssemblyReadException, InvalidAssemblerConfigurationException
     {
         InputStream resourceAsStream = getClass().getResourceAsStream( "/assemblies/" + ref + ".xml" );
-        
+
         if ( resourceAsStream == null )
         {
             throw new AssemblyReadException( "Descriptor with ID '" + ref + "' not found" );
         }
-        
+
         return readAssembly( new InputStreamReader( resourceAsStream ), ref, configSource );
     }
 
-    public Assembly getAssemblyFromDescriptorFile( File file, AssemblerConfigurationSource configSource )
+    public Assembly getAssemblyFromDescriptorFile( File descriptor, AssemblerConfigurationSource configSource )
+        throws AssemblyReadException, InvalidAssemblerConfigurationException
+    {
+        Reader r = null;
+        try
+        {
+            r = new FileReader( descriptor );
+            return readAssembly( r, descriptor.getAbsolutePath(), configSource );
+        }
+        catch ( IOException e )
+        {
+            throw new AssemblyReadException( "Error reading assembly descriptor: " + descriptor, e );
+        }
+        finally
+        {
+            IOUtil.close( r );
+        }
+    }
+
+    public Assembly getAssemblyFromDescriptor( String spec, Locator locator, AssemblerConfigurationSource configSource )
         throws AssemblyReadException, InvalidAssemblerConfigurationException
     {
+        Location location = locator.resolve( spec );
+
+        if ( location == null )
+        {
+            throw new AssemblyReadException( "Error locating assembly descriptor: " + spec + "\n\n" + locator.getMessageHolder().render() );
+        }
+
         Reader r = null;
         try
         {
-            r = new FileReader( file );
-            return readAssembly( r, file.getAbsolutePath(), configSource );
+            r = new InputStreamReader( location.getInputStream() );
+            return readAssembly( r, spec, configSource );
         }
-        catch ( FileNotFoundException e )
+        catch ( IOException e )
         {
-            throw new AssemblyReadException( "Error locating assembly descriptor file: " + file, e );
+            throw new AssemblyReadException( "Error reading assembly descriptor: " + spec, e );
         }
         finally
         {
@@ -222,26 +290,65 @@
         }
 
         mergeComponentsWithMainAssembly( assembly, configSource );
-        
+
         return assembly;
     }
 
     /**
      * Add the contents of all included components to main assembly
-     * 
+     *
      * @param assembly
-     * @throws AssemblyReadException 
+     * @throws AssemblyReadException
      * @throws MojoFailureException
      * @throws MojoExecutionException
      */
     protected void mergeComponentsWithMainAssembly( Assembly assembly, AssemblerConfigurationSource configSource )
         throws AssemblyReadException
     {
-        List componentDescriptorFiles = assembly.getComponentDescriptors();
+        RelativeFileLocatorStrategy fls = new RelativeFileLocatorStrategy( configSource.getBasedir() );
+
+        ClasspathResourceLocatorStrategy crls = new ClasspathResourceLocatorStrategy();
+
+        ArtifactLocatorStrategy als = new ArtifactLocatorStrategy( factory, resolver,
+                                                                   configSource.getLocalRepository(),
+                                                                   configSource.getRemoteRepositories(),
+                                                                   "assembly-component" );
+
+        URLLocatorStrategy uls = new URLLocatorStrategy();
 
-        for ( int i = 0; i < componentDescriptorFiles.size(); ++i )
+        Locator locator = new Locator();
+        locator.addStrategy( fls );
+        locator.addStrategy( als );
+        locator.addStrategy( crls );
+        locator.addStrategy( uls );
+
+        List componentLocations = assembly.getComponentDescriptors();
+
+        for ( Iterator it = componentLocations.iterator(); it.hasNext(); )
         {
-            Component component = getComponentFromFile( componentDescriptorFiles.get( i ).toString(), configSource );
+            String location = (String) it.next();
+
+            Location resolvedLocation = locator.resolve( location );
+
+            Component component = null;
+            Reader reader = null;
+            try
+            {
+                reader = new InputStreamReader( resolvedLocation.getInputStream() );
+                component = new ComponentXpp3Reader().read( reader );
+            }
+            catch ( IOException e )
+            {
+                throw new AssemblyReadException( "Error reading component descriptor", e );
+            }
+            catch ( XmlPullParserException e )
+            {
+                throw new AssemblyReadException( "Error reading component descriptor", e );
+            }
+            finally
+            {
+                IOUtil.close( reader );
+            }
 
             mergeComponentWithAssembly( component, assembly );
         }
@@ -267,87 +374,27 @@
         for ( Iterator it = fileSetList.iterator(); it.hasNext(); )
         {
             FileSet fileSet = ( FileSet ) it.next();
-            
+
             assembly.addFileSet( fileSet );
         }
 
         List fileList = component.getFiles();
-        
+
         for ( Iterator it = fileList.iterator(); it.hasNext(); )
         {
             FileItem fileItem = ( FileItem ) it.next();
-            
+
             assembly.addFile( fileItem );
         }
-        
+
         List repositoriesList = component.getRepositories();
-        
+
         for ( Iterator it = repositoriesList.iterator(); it.hasNext(); )
         {
             Repository repository = ( Repository ) it.next();
-            
-            assembly.addRepository( repository );
-        }
-    }
-
-    /**
-     * Load the Component via a given file path relative to ${basedir}
-     * 
-     * @param filePath
-     * @return
-     * @throws AssemblyReadException 
-     * @throws MojoFailureException
-     * @throws MojoExecutionException
-     */
-    protected Component getComponentFromFile( String filePath, AssemblerConfigurationSource configSource ) throws AssemblyReadException
-    {
-        File basedir = configSource.getBasedir();
-
-        File componentDescriptor = new File( basedir, filePath );
-
-        Reader r;
-        try
-        {
-            r = new FileReader( componentDescriptor );
-        }
-        catch ( FileNotFoundException e )
-        {
-            throw new AssemblyReadException( "Unable to find descriptor: " + e.getMessage() );
-        }
-
-        return readComponent( r );
-
-    }
 
-    /**
-     * Load the Component via a Reader
-     * 
-     * @param reader
-     * @throws AssemblyReadException 
-     */
-    protected Component readComponent( Reader reader )
-        throws AssemblyReadException
-    {
-        Component component;
-        try
-        {
-            ComponentXpp3Reader r = new ComponentXpp3Reader();
-            component = r.read( reader );
-        }
-        catch ( IOException e )
-        {
-            throw new AssemblyReadException( "Error reading component descriptor", e );
-        }
-        catch ( XmlPullParserException e )
-        {
-            throw new AssemblyReadException( "Error reading component descriptor", e );
-        }
-        finally
-        {
-            IOUtil.close( reader );
+            assembly.addRepository( repository );
         }
-
-        return component;
     }
 
     public void includeSiteInAssembly( Assembly assembly, AssemblerConfigurationSource configSource )
@@ -375,13 +422,13 @@
     protected Logger getLogger()
     {
         Logger logger = super.getLogger();
-        
+
         if ( logger == null )
         {
             logger = new ConsoleLogger( Logger.LEVEL_INFO, "assemblyReader-internal" );
             enableLogging( logger );
         }
-        
+
         return logger;
     }
 

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/PrefixedClasspathLocatorStrategy.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/PrefixedClasspathLocatorStrategy.java?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/PrefixedClasspathLocatorStrategy.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/PrefixedClasspathLocatorStrategy.java Thu Jul 12 21:02:39 2007
@@ -0,0 +1,50 @@
+package org.apache.maven.plugin.assembly.io;
+
+import org.apache.maven.shared.io.location.ClasspathResourceLocatorStrategy;
+import org.apache.maven.shared.io.location.Location;
+import org.apache.maven.shared.io.logging.MessageHolder;
+
+public class PrefixedClasspathLocatorStrategy
+    extends ClasspathResourceLocatorStrategy
+{
+
+    private final String prefix;
+
+    public PrefixedClasspathLocatorStrategy( String prefix )
+    {
+        this.prefix = formatPrefix( prefix );
+    }
+
+    private String formatPrefix( String prefix )
+    {
+        if ( !prefix.startsWith( "/" ) )
+        {
+            prefix = "/" + prefix;
+        }
+
+        if ( !prefix.endsWith( "/" ) )
+        {
+            prefix += "/";
+        }
+
+        return prefix;
+    }
+
+    public Location resolve( String locationSpecification, MessageHolder messageHolder )
+    {
+        String spec = formatLocation( locationSpecification );
+
+        return super.resolve( spec, messageHolder );
+    }
+
+    private String formatLocation( String location )
+    {
+        if ( location.startsWith( "/" ) )
+        {
+            location = location.substring( 1 );
+        }
+
+        return prefix + location;
+    }
+
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/PrefixedClasspathLocatorStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/PrefixedClasspathLocatorStrategy.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/RelativeFileLocatorStrategy.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/RelativeFileLocatorStrategy.java?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/RelativeFileLocatorStrategy.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/RelativeFileLocatorStrategy.java Thu Jul 12 21:02:39 2007
@@ -0,0 +1,40 @@
+package org.apache.maven.plugin.assembly.io;
+
+import org.apache.maven.shared.io.location.FileLocation;
+import org.apache.maven.shared.io.location.Location;
+import org.apache.maven.shared.io.location.LocatorStrategy;
+import org.apache.maven.shared.io.logging.MessageHolder;
+
+import java.io.File;
+
+public class RelativeFileLocatorStrategy
+    implements LocatorStrategy
+{
+
+    private File basedir;
+
+    public RelativeFileLocatorStrategy( File basedir )
+    {
+        this.basedir = basedir;
+    }
+
+    public Location resolve( String locationSpecification, MessageHolder messageHolder )
+    {
+        File file = new File( basedir, locationSpecification );
+        messageHolder.addInfoMessage( "Searching for file location: " + file.getAbsolutePath() );
+
+        Location location = null;
+
+        if ( file.exists() )
+        {
+            location = new FileLocation( file, locationSpecification );
+        }
+        else
+        {
+            messageHolder.addMessage( "File: " + file.getAbsolutePath() + " does not exist." );
+        }
+
+        return location;
+    }
+
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/RelativeFileLocatorStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/RelativeFileLocatorStrategy.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java?view=diff&rev=555865&r1=555864&r2=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java Thu Jul 12 21:02:39 2007
@@ -49,7 +49,7 @@
 
     /**
      * Local Maven repository where artifacts are cached during the build process.
-     * 
+     *
      * @parameter default-value="${localRepository}"
      * @required
      * @readonly
@@ -62,7 +62,7 @@
      * @readonly
      */
     private List remoteRepositories;
-    
+
     /**
      * Contains the full list of projects in the reactor.
      *
@@ -97,20 +97,20 @@
     private File workDirectory;
 
     /**
-     * This is the artifact classifier to be used for the resultant assembly artifact. Normally, you would use the 
+     * This is the artifact classifier to be used for the resultant assembly artifact. Normally, you would use the
      * assembly-id instead of specifying this here.
-     * 
+     *
      * @parameter expression="${classifier}"
      * @deprecated Please use the Assembly's id for classifier instead
      */
     private String classifier;
-    
+
     /**
      * A list of descriptor files to generate from.
      *
      * @parameter
      */
-    private File[] descriptors;
+    private String[] descriptors;
 
     /**
      * A list of built-in descriptor references to generate from. You can select from <code>bin</code>,
@@ -151,7 +151,7 @@
      * @parameter expression="${descriptor}"
      * @deprecated Please use descriptors instead
      */
-    protected File descriptor;
+    protected String descriptor;
 
     /**
      * Sets the TarArchiver behavior on file paths with more than 100 characters length.
@@ -210,9 +210,9 @@
     protected boolean appendAssemblyId;
 
     /**
-     * This is a set of instructions to the archive builder, especially for building .jar files. It enables you to 
+     * This is a set of instructions to the archive builder, especially for building .jar files. It enables you to
      * specify a Manifest file for the jar, in addition to other options.
-     * 
+     *
      * @parameter
      */
     private MavenArchiveConfiguration archive;
@@ -222,7 +222,7 @@
      * @readonly
      */
     protected List filters;
-    
+
     /**
      * @parameter expression="${attach}" default-value="true"
      */
@@ -274,12 +274,12 @@
                 for ( Iterator formatIterator = assembly.getFormats().iterator(); formatIterator.hasNext(); )
                 {
                     String format = (String) formatIterator.next();
-                    
+
                     File destFile = assemblyArchiver.createArchive( assembly, fullName, format, this );
 
                     MavenProject project = getProject();
                     String classifier = getClassifier();
-                    
+
                     if ( attach && destFile.isFile() )
                     {
                         if ( isAssemblyIdAppended() )
@@ -312,23 +312,23 @@
             }
         }
     }
-    
+
     protected AssemblyArchiver getAssemblyArchiver()
     {
         return assemblyArchiver;
     }
-    
+
     protected AssemblyReader getAssemblyReader()
     {
         return assemblyReader;
     }
-    
+
     public File getBasedir()
     {
         return basedir;
     }
 
-    public File getDescriptor()
+    public String getDescriptor()
     {
         return descriptor;
     }
@@ -348,7 +348,7 @@
         return descriptorSourceDirectory;
     }
 
-    public File[] getDescriptors()
+    public String[] getDescriptors()
     {
         return descriptors;
     }
@@ -466,7 +466,7 @@
         this.classifier = classifier;
     }
 
-    public void setDescriptor( File descriptor )
+    public void setDescriptor( String descriptor )
     {
         this.descriptor = descriptor;
     }
@@ -481,7 +481,7 @@
         this.descriptorRefs = descriptorRefs;
     }
 
-    public void setDescriptors( File[] descriptors )
+    public void setDescriptors( String[] descriptors )
     {
         this.descriptors = descriptors;
     }
@@ -545,10 +545,10 @@
     {
         this.workDirectory = workDirectory;
     }
-    
+
     public List getRemoteRepositories()
     {
         return remoteRepositories;
     }
-    
+
 }

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachAssemblyDescriptorMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachAssemblyDescriptorMojo.java?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachAssemblyDescriptorMojo.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachAssemblyDescriptorMojo.java Thu Jul 12 21:02:39 2007
@@ -0,0 +1,59 @@
+package org.apache.maven.plugin.assembly.mojos;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+
+import java.io.File;
+
+/**
+ * @goal attach-assembly-descriptor
+ * @phase package
+ */
+public class AttachAssemblyDescriptorMojo
+    extends AbstractMojo
+{
+
+    /**
+     * @parameter default-value="src/main/resources/assembly-descriptor.xml"
+     * @required
+     */
+    private File assemblyDescriptor;
+
+    /**
+     * If set, component descriptor will be attached to the main project
+     * artifact using this classifier, rather than becoming the artifact's
+     * backing file.
+     *
+     * @parameter
+     */
+    private String attachmentClassifier;
+
+    /**
+     * @parameter default-value="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+
+    /**
+     * @component
+     */
+    private MavenProjectHelper projectHelper;
+
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+        if ( attachmentClassifier != null )
+        {
+            projectHelper.attachArtifact( project, assemblyDescriptor, attachmentClassifier );
+        }
+        else
+        {
+            project.getArtifact().setFile( assemblyDescriptor );
+        }
+    }
+
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachAssemblyDescriptorMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachAssemblyDescriptorMojo.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachComponentDescriptorMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachComponentDescriptorMojo.java?view=auto&rev=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachComponentDescriptorMojo.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachComponentDescriptorMojo.java Thu Jul 12 21:02:39 2007
@@ -0,0 +1,59 @@
+package org.apache.maven.plugin.assembly.mojos;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+
+import java.io.File;
+
+/**
+ * @goal attach-component-descriptor
+ * @phase package
+ */
+public class AttachComponentDescriptorMojo
+    extends AbstractMojo
+{
+
+    /**
+     * @parameter default-value="src/main/resources/assembly-component.xml"
+     * @required
+     */
+    private File componentDescriptor;
+
+    /**
+     * If set, component descriptor will be attached to the main project
+     * artifact using this classifier, rather than becoming the artifact's
+     * backing file.
+     *
+     * @parameter
+     */
+    private String attachmentClassifier;
+
+    /**
+     * @parameter default-value="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+
+    /**
+     * @component
+     */
+    private MavenProjectHelper projectHelper;
+
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+        if ( attachmentClassifier != null )
+        {
+            projectHelper.attachArtifact( project, componentDescriptor, attachmentClassifier );
+        }
+        else
+        {
+            project.getArtifact().setFile( componentDescriptor );
+        }
+    }
+
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachComponentDescriptorMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AttachComponentDescriptorMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilterTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilterTest.java?view=diff&rev=555865&r1=555864&r2=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilterTest.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilterTest.java Thu Jul 12 21:02:39 2007
@@ -35,7 +35,7 @@
     extends TestCase
 {
     private ComponentsXmlArchiverFileFilter filter;
-    
+
     private TestFileManager fileManager = new TestFileManager( "componentsXmlArchiverFileFilter.test", ".zip" );
 
     public void setUp()
@@ -43,6 +43,12 @@
         filter = new ComponentsXmlArchiverFileFilter();
     }
 
+    public void tearDown()
+        throws IOException
+    {
+        fileManager.cleanUp();
+    }
+
     public void testAddComponentsXml_ShouldAddComponentWithoutRoleHint()
         throws IOException, XmlPullParserException
     {
@@ -213,25 +219,25 @@
         filter.components.put( "rolehint2", dom2 );
 
         ZipArchiver archiver = new ZipArchiver();
-        
+
         File archiveFile = fileManager.createTempFile();
-        
+
         archiver.setDestFile( archiveFile );
-        
+
         File descriptorFile = fileManager.createTempFile();
-        
+
         archiver.setArchiveFinalizers( Collections.singletonList( filter ) );
-        
+
         archiver.createArchive();
-        
+
         ZipFile zf = new ZipFile( archiveFile );
-        
+
         ZipEntry ze = zf.getEntry( ComponentsXmlArchiverFileFilter.COMPONENTS_XML_PATH );
-        
+
         assertNotNull( ze );
-        
+
         FileOutputStream fileStream = new FileOutputStream( descriptorFile );
-        
+
         IOUtil.copy( zf.getInputStream( ze ), fileStream );
         IOUtil.close( fileStream );
 

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java?view=diff&rev=555865&r1=555864&r2=555865
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java Thu Jul 12 21:02:39 2007
@@ -1,6 +1,7 @@
 package org.apache.maven.plugin.assembly.io;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.model.Model;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
@@ -51,6 +52,17 @@
         mockManager.add( configSourceControl );
 
         configSource = (AssemblerConfigurationSource) configSourceControl.getMock();
+
+        MockControl localRepoControl = MockControl.createControl( ArtifactRepository.class );
+        ArtifactRepository localRepo = (ArtifactRepository) localRepoControl.getMock();
+
+        mockManager.add( localRepoControl );
+
+        configSource.getLocalRepository();
+        configSourceControl.setReturnValue( localRepo, MockControl.ZERO_OR_MORE );
+
+        configSource.getRemoteRepositories();
+        configSourceControl.setReturnValue( Collections.EMPTY_LIST, MockControl.ZERO_OR_MORE );
     }
 
     public void tearDown()
@@ -66,7 +78,7 @@
         siteDir.delete();
 
         configSource.getSiteDirectory();
-        configSourceControl.setReturnValue( siteDir );
+        configSourceControl.setReturnValue( siteDir, MockControl.ZERO_OR_MORE );
 
         Assembly assembly = new Assembly();
 
@@ -92,7 +104,7 @@
         File siteDir = fileManager.createTempDir();
 
         configSource.getSiteDirectory();
-        configSourceControl.setReturnValue( siteDir );
+        configSourceControl.setReturnValue( siteDir, MockControl.ZERO_OR_MORE );
 
         Assembly assembly = new Assembly();
 
@@ -112,82 +124,82 @@
         mockManager.verifyAll();
     }
 
-    public void testReadComponent_ShouldReadComponentFromXml()
-        throws IOException, AssemblyReadException
-    {
-        Component component = new Component();
-
-        FileSet fileSet = new FileSet();
-        fileSet.setDirectory( "/dir" );
-
-        component.addFileSet( fileSet );
-
-        StringWriter sw = new StringWriter();
-
-        ComponentXpp3Writer componentWriter = new ComponentXpp3Writer();
-
-        componentWriter.write( sw, component );
-
-        Component result = new DefaultAssemblyReader().readComponent( new StringReader( sw.toString() ) );
-
-        List fileSets = result.getFileSets();
-
-        assertNotNull( fileSets );
-        assertEquals( 1, fileSets.size() );
-
-        FileSet fs = (FileSet) fileSets.get( 0 );
-
-        assertEquals( "/dir", fs.getDirectory() );
-    }
-
-    public void testGetComponentFromFile_ShouldReadComponent()
-        throws IOException, AssemblyReadException
-    {
-        Component component = new Component();
-
-        FileSet fileSet = new FileSet();
-        fileSet.setDirectory( "/dir" );
-
-        component.addFileSet( fileSet );
-
-        File componentFile = fileManager.createTempFile();
-
-        FileWriter writer = null;
-
-        try
-        {
-            writer = new FileWriter( componentFile );
-
-            ComponentXpp3Writer componentWriter = new ComponentXpp3Writer();
-
-            componentWriter.write( writer, component );
-        }
-        finally
-        {
-            IOUtil.close( writer );
-        }
-
-        File basedir = componentFile.getParentFile();
-        String filename = componentFile.getName();
-
-        configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir );
-
-        mockManager.replayAll();
-
-        Component result = new DefaultAssemblyReader().getComponentFromFile( filename, configSource );
-
-        List fileSets = result.getFileSets();
-
-        assertNotNull( fileSets );
-        assertEquals( 1, fileSets.size() );
-
-        FileSet fs = (FileSet) fileSets.get( 0 );
-
-        assertEquals( "/dir", fs.getDirectory() );
-
-        mockManager.verifyAll();
-    }
+//    public void testReadComponent_ShouldReadComponentFromXml()
+//        throws IOException, AssemblyReadException
+//    {
+//        Component component = new Component();
+//
+//        FileSet fileSet = new FileSet();
+//        fileSet.setDirectory( "/dir" );
+//
+//        component.addFileSet( fileSet );
+//
+//        StringWriter sw = new StringWriter();
+//
+//        ComponentXpp3Writer componentWriter = new ComponentXpp3Writer();
+//
+//        componentWriter.write( sw, component );
+//
+//        Component result = new DefaultAssemblyReader().readComponent( new StringReader( sw.toString() ) );
+//
+//        List fileSets = result.getFileSets();
+//
+//        assertNotNull( fileSets );
+//        assertEquals( 1, fileSets.size() );
+//
+//        FileSet fs = (FileSet) fileSets.get( 0 );
+//
+//        assertEquals( "/dir", fs.getDirectory() );
+//    }
+//
+//    public void testGetComponentFromFile_ShouldReadComponent()
+//        throws IOException, AssemblyReadException
+//    {
+//        Component component = new Component();
+//
+//        FileSet fileSet = new FileSet();
+//        fileSet.setDirectory( "/dir" );
+//
+//        component.addFileSet( fileSet );
+//
+//        File componentFile = fileManager.createTempFile();
+//
+//        FileWriter writer = null;
+//
+//        try
+//        {
+//            writer = new FileWriter( componentFile );
+//
+//            ComponentXpp3Writer componentWriter = new ComponentXpp3Writer();
+//
+//            componentWriter.write( writer, component );
+//        }
+//        finally
+//        {
+//            IOUtil.close( writer );
+//        }
+//
+//        File basedir = componentFile.getParentFile();
+//        String filename = componentFile.getName();
+//
+//        configSource.getBasedir();
+//        configSourceControl.setReturnValue( basedir );
+//
+//        mockManager.replayAll();
+//
+//        Component result = new DefaultAssemblyReader().getComponentFromFile( filename, configSource );
+//
+//        List fileSets = result.getFileSets();
+//
+//        assertNotNull( fileSets );
+//        assertEquals( 1, fileSets.size() );
+//
+//        FileSet fs = (FileSet) fileSets.get( 0 );
+//
+//        assertEquals( "/dir", fs.getDirectory() );
+//
+//        mockManager.verifyAll();
+//    }
 
     public void testMergeComponentWithAssembly_ShouldAddOneFileSetToExistingListOfTwo()
     {
@@ -337,46 +349,46 @@
     // testMergeComponentWithAssembly_ShouldMergeOneFileSetToOneOfExistingTwo()
     // {
     // Assembly assembly = new Assembly();
-    //        
+    //
     // FileSet fs = new FileSet();
     // fs.setDirectory( "/dir" );
     // fs.addInclude( "**/test.txt" );
-    //        
+    //
     // assembly.addFileSet( fs );
-    //        
+    //
     // fs = new FileSet();
     // fs.setDirectory( "/other-dir" );
     // assembly.addFileSet( fs );
-    //        
+    //
     // fs = new FileSet();
     // fs.setDirectory( "/dir" );
     // fs.addInclude( "**/components.txt" );
-    //        
+    //
     // Component component = new Component();
-    //        
+    //
     // component.addFileSet( fs );
-    //        
+    //
     // new DefaultAssemblyReader().mergeComponentWithAssembly( component,
     // assembly );
-    //        
+    //
     // List fileSets = assembly.getFileSets();
-    //        
+    //
     // assertNotNull( fileSets );
     // assertEquals( 2, fileSets.size() );
-    //        
+    //
     // FileSet rfs1 = (FileSet) fileSets.get( 0 );
     // assertEquals( "/dir", rfs1.getDirectory() );
-    //        
+    //
     // List includes = rfs1.getIncludes();
-    //        
+    //
     // assertNotNull( includes );
     // assertEquals( 2, includes.size() );
     // assertTrue( includes.contains( "**/test.txt" ) );
     // assertTrue( includes.contains( "**/components.txt" ) );
-    //        
+    //
     // FileSet rfs2 = (FileSet) fileSets.get( 1 );
     // assertEquals( "/other-dir", rfs2.getDirectory() );
-    //        
+    //
     // }
 
     public void testMergeComponentsWithMainAssembly_ShouldAddOneFileSetToAssembly()
@@ -400,6 +412,7 @@
             ComponentXpp3Writer componentWriter = new ComponentXpp3Writer();
 
             componentWriter.write( writer, component );
+            writer.flush();
         }
         finally
         {
@@ -414,7 +427,7 @@
         File basedir = componentFile.getParentFile();
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();
 
@@ -448,7 +461,7 @@
         File basedir = fileManager.createTempDir();
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         Model model = new Model();
         model.setGroupId( "group" );
@@ -458,10 +471,10 @@
         MavenProject project = new MavenProject( model );
 
         configSource.getProject();
-        configSourceControl.setReturnValue( project );
+        configSourceControl.setReturnValue( project, MockControl.ZERO_OR_MORE );
 
         configSource.isSiteIncluded();
-        configSourceControl.setReturnValue( false );
+        configSourceControl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();
 
@@ -490,12 +503,12 @@
         File siteDir = fileManager.createTempDir();
 
         configSource.getSiteDirectory();
-        configSourceControl.setReturnValue( siteDir );
+        configSourceControl.setReturnValue( siteDir, MockControl.ZERO_OR_MORE );
 
         File basedir = fileManager.createTempDir();
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         Model model = new Model();
         model.setGroupId( "group" );
@@ -505,10 +518,10 @@
         MavenProject project = new MavenProject( model );
 
         configSource.getProject();
-        configSourceControl.setReturnValue( project );
+        configSourceControl.setReturnValue( project, MockControl.ZERO_OR_MORE );
 
         configSource.isSiteIncluded();
-        configSourceControl.setReturnValue( false );
+        configSourceControl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();
 
@@ -541,12 +554,12 @@
         File siteDir = fileManager.createTempDir();
 
         configSource.getSiteDirectory();
-        configSourceControl.setReturnValue( siteDir );
+        configSourceControl.setReturnValue( siteDir, MockControl.ZERO_OR_MORE );
 
         File basedir = fileManager.createTempDir();
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         Model model = new Model();
         model.setGroupId( "group" );
@@ -556,10 +569,10 @@
         MavenProject project = new MavenProject( model );
 
         configSource.getProject();
-        configSourceControl.setReturnValue( project );
+        configSourceControl.setReturnValue( project, MockControl.ZERO_OR_MORE );
 
         configSource.isSiteIncluded();
-        configSourceControl.setReturnValue( true );
+        configSourceControl.setReturnValue( true, MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();
 
@@ -616,7 +629,7 @@
         StringReader sr = new StringReader( sw.toString() );
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir, MockControl.ONE_OR_MORE );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         Model model = new Model();
         model.setGroupId( "group" );
@@ -626,10 +639,10 @@
         MavenProject project = new MavenProject( model );
 
         configSource.getProject();
-        configSourceControl.setReturnValue( project );
+        configSourceControl.setReturnValue( project, MockControl.ZERO_OR_MORE );
 
         configSource.isSiteIncluded();
-        configSourceControl.setReturnValue( false );
+        configSourceControl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();
 
@@ -662,7 +675,7 @@
         File basedir = fileManager.createTempDir();
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         Model model = new Model();
         model.setGroupId( "group" );
@@ -672,10 +685,10 @@
         MavenProject project = new MavenProject( model );
 
         configSource.getProject();
-        configSourceControl.setReturnValue( project );
+        configSourceControl.setReturnValue( project, MockControl.ZERO_OR_MORE );
 
         configSource.isSiteIncluded();
-        configSourceControl.setReturnValue( false );
+        configSourceControl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();
 
@@ -702,13 +715,13 @@
         File basedir = assemblyFile.getParentFile();
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir, MockControl.ONE_OR_MORE );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         configSource.getProject();
-        configSourceControl.setReturnValue( new MavenProject( new Model() ), MockControl.ONE_OR_MORE );
+        configSourceControl.setReturnValue( new MavenProject( new Model() ), MockControl.ZERO_OR_MORE );
 
         configSource.isSiteIncluded();
-        configSourceControl.setReturnValue( false );
+        configSourceControl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
         FileWriter writer = null;
         try
@@ -736,13 +749,13 @@
         File basedir = fileManager.createTempDir();
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir, MockControl.ONE_OR_MORE );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         configSource.getProject();
-        configSourceControl.setReturnValue( new MavenProject( new Model() ), MockControl.ONE_OR_MORE );
+        configSourceControl.setReturnValue( new MavenProject( new Model() ), MockControl.ZERO_OR_MORE );
 
         configSource.isSiteIncluded();
-        configSourceControl.setReturnValue( false );
+        configSourceControl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();
 
@@ -767,8 +780,8 @@
         File basedir = fileManager.createTempDir();
 
         List files = writeAssembliesToFile( Collections.singletonList( assembly ), basedir );
-        
-        File assemblyFile = ( File ) files.get( 0 );
+
+        String assemblyFile = ( String ) files.get( 0 );
 
         List assemblies = performReadAssemblies( basedir, assemblyFile, null, null, null, null );
 
@@ -812,7 +825,7 @@
 
         List files = writeAssembliesToFile( assemblies, basedir );
 
-        List results = performReadAssemblies( basedir, null, null, (File[]) files.toArray( new File[0] ), null, null );
+        List results = performReadAssemblies( basedir, null, null, (String[]) files.toArray( new String[0] ), null, null );
 
         assertNotNull( results );
         assertEquals( 2, results.size() );
@@ -857,7 +870,7 @@
         List assemblies = new ArrayList();
         assemblies.add( assembly1 );
         assemblies.add( assembly2 );
-        
+
         File basedir = fileManager.createTempDir();
 
         writeAssembliesToFile( assemblies, basedir );
@@ -884,7 +897,7 @@
         for ( Iterator it = assemblies.iterator(); it.hasNext(); )
         {
             Assembly assembly = (Assembly) it.next();
-            
+
             File assemblyFile = new File( dir, assembly.getId() + ".xml" );
 
             FileWriter writer = null;
@@ -898,13 +911,13 @@
                 IOUtil.close( writer );
             }
 
-            files.add( assemblyFile );
+            files.add( assemblyFile.getAbsolutePath() );
         }
 
         return files;
     }
 
-    private List performReadAssemblies( File basedir, File descriptor, String descriptorRef, File[] descriptors,
+    private List performReadAssemblies( File basedir, String descriptor, String descriptorRef, String[] descriptors,
                                         String[] descriptorRefs, File descriptorDir )
         throws AssemblyReadException, InvalidAssemblerConfigurationException
     {
@@ -924,13 +937,13 @@
         configSourceControl.setReturnValue( descriptorDir );
 
         configSource.getBasedir();
-        configSourceControl.setReturnValue( basedir, MockControl.ONE_OR_MORE );
+        configSourceControl.setReturnValue( basedir, MockControl.ZERO_OR_MORE );
 
         configSource.getProject();
-        configSourceControl.setReturnValue( new MavenProject( new Model() ), MockControl.ONE_OR_MORE );
+        configSourceControl.setReturnValue( new MavenProject( new Model() ), MockControl.ZERO_OR_MORE );
 
         configSource.isSiteIncluded();
-        configSourceControl.setReturnValue( false, MockControl.ONE_OR_MORE );
+        configSourceControl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();