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 2008/09/24 23:14:39 UTC

svn commit: r698739 [1/3] - in /maven/plugins/trunk/maven-assembly-plugin/src: it/projects/bugs/massembly-190/ it/projects/bugs/massembly-190/child-1/ it/projects/bugs/massembly-190/child-1/src/ it/projects/bugs/massembly-190/child-1/src/main/ it/proje...

Author: jdcasey
Date: Wed Sep 24 14:14:38 2008
New Revision: 698739

URL: http://svn.apache.org/viewvc?rev=698739&view=rev
Log:
[MASSEMBLY-190] Pre-collect dependencies that will need to be resolve for one or more dependencySets/moduleSets in the assembly, then use the versions from this pre-collection activity in the form of a managed-version map, with one exception: the versions will be imposed on direct dependencies as well.

Also, separated ${module.*} expressions from ${artifact.*} expressions, so that in a moduleSet/binaries section, <outputDirectory>${module.artifactId}</outputDirectory can remain constant for a given module project, while <outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping> can vary according to the module-dependency artifact being processed.

In addition, I'm adding unit tests for the DefaultDependencyResolver methods (other than resolveDependencies(..), which will require more involved mock-ups), and an integration test to verify that MASSEMBLY-190 is fixed.


Added:
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/main/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/main/resources/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/main/resources/test.txt   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/main/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/main/resources/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/main/resources/test.txt   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/goals.txt   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/main/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/main/assembly/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/main/assembly/bin.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/verify.bsh   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyContext.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DefaultAssemblyContext.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/ResolutionManagementInfo.java   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/artifact/
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolverTest.java   (with props)
Modified:
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/using-moduleSet-implied-depSet/src/main/assemblies/bin.xml
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/AssemblyArchiverPhase.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileItemAssemblyPhase.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileSetAssemblyPhase.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddFileSetsTask.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/utils/ProjectUtils.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhaseTest.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/MockManager.java
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtilsTest.java

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/pom.xml?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/pom.xml Wed Sep 24 14:14:38 2008
@@ -0,0 +1,19 @@
+<?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>
+      <artifactId>project</artifactId>
+      <groupId>org.apache.maven.plugin.assembly.test</groupId>
+      <version>1</version>
+  </parent>
+  <artifactId>child-1</artifactId>
+  <packaging>jar</packaging>
+  
+  <dependencies>
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+      <version>1.3</version>
+    </dependency>
+  </dependencies>
+</project>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/main/resources/test.txt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/main/resources/test.txt?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/main/resources/test.txt (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/main/resources/test.txt Wed Sep 24 14:14:38 2008
@@ -0,0 +1 @@
+Test

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-1/src/main/resources/test.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/pom.xml?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/pom.xml Wed Sep 24 14:14:38 2008
@@ -0,0 +1,26 @@
+<?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>
+      <artifactId>project</artifactId>
+      <groupId>org.apache.maven.plugin.assembly.test</groupId>
+      <version>1</version>
+  </parent>
+  <artifactId>child-2</artifactId>
+  <packaging>jar</packaging>
+  
+  <dependencies>
+    <dependency>
+      <groupId>commons-codec</groupId>
+      <artifactId>commons-codec</artifactId>
+      <version>1.2</version>
+    </dependency>
+    <!--
+    <dependency>
+      <groupId>commons-httpclient</groupId>
+      <artifactId>commons-httpclient</artifactId>
+      <version>3.1</version>
+    </dependency>
+    -->
+  </dependencies>
+</project>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/main/resources/test.txt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/main/resources/test.txt?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/main/resources/test.txt (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/main/resources/test.txt Wed Sep 24 14:14:38 2008
@@ -0,0 +1 @@
+Test

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/child-2/src/main/resources/test.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/goals.txt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/goals.txt?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/goals.txt (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/goals.txt Wed Sep 24 14:14:38 2008
@@ -0,0 +1,3 @@
+clean
+package
+assembly:assembly
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/goals.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/pom.xml?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/pom.xml Wed Sep 24 14:14:38 2008
@@ -0,0 +1,31 @@
+<?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.apache.maven.plugin.assembly.test</groupId>
+    <artifactId>it-project-parent</artifactId>
+    <version>1</version>
+  </parent>
+  
+  <artifactId>project</artifactId>
+  <packaging>pom</packaging>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <inherited>false</inherited>
+        <configuration>
+          <descriptors>
+            <descriptor>src/main/assembly/bin.xml</descriptor>
+          </descriptors>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  
+  <modules>
+    <module>child-1</module>
+    <module>child-2</module>
+  </modules>
+</project>
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/main/assembly/bin.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/main/assembly/bin.xml?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/main/assembly/bin.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/main/assembly/bin.xml Wed Sep 24 14:14:38 2008
@@ -0,0 +1,23 @@
+<assembly>
+  <id>bin</id>
+  <formats>
+    <format>dir</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <moduleSets>
+    <moduleSet>
+      <binaries>
+        <outputDirectory>${module.artifactId}</outputDirectory>
+        <includeDependencies>true</includeDependencies>
+        <dependencySets>
+          <dependencySet>
+            <includes>
+              <include>commons-codec*</include>
+            </includes>
+            <unpack>false</unpack>
+          </dependencySet>
+        </dependencySets>
+      </binaries>
+    </moduleSet>
+  </moduleSets>
+</assembly>

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/src/main/assembly/bin.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/verify.bsh
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/verify.bsh?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/verify.bsh (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/verify.bsh Wed Sep 24 14:14:38 2008
@@ -0,0 +1,16 @@
+import java.io.*;
+
+File child1Codec = new File( basedir, "target/project-1-bin.dir/child-1/commons-codec-1.3.jar" );
+File child2Codec = new File( basedir, "target/project-1-bin.dir/child-2/commons-codec-1.3.jar" );
+
+if ( !child1Codec.exists() )
+{
+	System.out.println( "commons-codec dependency in child-1 module is either missing or is the wrong version. File missing: " + child1Codec );
+}
+
+if ( !child2Codec.exists() )
+{
+	System.out.println( "commons-codec dependency in child-2 module is either missing or is the wrong version. File missing: " + child2Codec );
+}
+
+return child1Codec.exists() && child2Codec.exists();

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-190/verify.bsh
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/using-moduleSet-implied-depSet/src/main/assemblies/bin.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/using-moduleSet-implied-depSet/src/main/assemblies/bin.xml?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/using-moduleSet-implied-depSet/src/main/assemblies/bin.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/using-moduleSet-implied-depSet/src/main/assemblies/bin.xml Wed Sep 24 14:14:38 2008
@@ -11,7 +11,7 @@
     <moduleSet>
       <binaries>
         <outputDirectory>modules</outputDirectory>
-        <outputFileNameMapping>${module.artifactId}.${module.extension}</outputFileNameMapping>
+        <outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
         <unpack>false</unpack>
         <includeDependencies>true</includeDependencies>
       </binaries>

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyContext.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyContext.java?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyContext.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyContext.java Wed Sep 24 14:14:38 2008
@@ -0,0 +1,12 @@
+package org.apache.maven.plugin.assembly;
+
+import java.util.Map;
+
+public interface AssemblyContext
+{
+    
+    AssemblyContext setManagedVersionMap( Map managedVersions );
+    
+    Map getManagedVersionMap();
+
+}

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

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DefaultAssemblyContext.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DefaultAssemblyContext.java?rev=698739&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DefaultAssemblyContext.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DefaultAssemblyContext.java Wed Sep 24 14:14:38 2008
@@ -0,0 +1,22 @@
+package org.apache.maven.plugin.assembly;
+
+import java.util.Map;
+
+public class DefaultAssemblyContext
+    implements AssemblyContext
+{
+
+    private Map managedVersions;
+
+    public Map getManagedVersionMap()
+    {
+        return managedVersions;
+    }
+
+    public AssemblyContext setManagedVersionMap( Map managedVersions )
+    {
+        this.managedVersions = managedVersions;
+        return this;
+    }
+
+}

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

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java Wed Sep 24 14:14:38 2008
@@ -19,11 +19,16 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.plugin.DebugConfigurationListener;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.AssemblyContext;
+import org.apache.maven.plugin.assembly.DefaultAssemblyContext;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.archiver.AssemblyProxyArchiver;
 import org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase;
+import org.apache.maven.plugin.assembly.artifact.DependencyResolver;
 import org.apache.maven.plugin.assembly.filter.ComponentsXmlArchiverFileFilter;
 import org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
@@ -32,6 +37,7 @@
 import org.apache.maven.plugin.assembly.model.ContainerDescriptorHandlerConfig;
 import org.apache.maven.plugin.assembly.utils.AssemblyFileUtils;
 import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.archiver.Archiver;
@@ -68,6 +74,12 @@
 import java.util.Map;
 
 /**
+ * Controller component designed to organize the many activities involved in 
+ * creating an assembly archive. This includes locating and configuring {@link Archiver}
+ * instances, executing multiple {@link AssemblyArchiverPhase} instances to 
+ * interpret the various sections of the assembly descriptor and determine which
+ * files to add, and other associated activities.
+ * 
  * @version $Id$
  * @plexus.component role="org.apache.maven.plugin.assembly.archive.AssemblyArchiver" role-hint="default"
  */
@@ -90,6 +102,11 @@
      * @plexus.requirement role="org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler"
      */
     private Map containerDescriptorHandlers;
+    
+    /**
+     * @plexus.requirement
+     */
+    private DependencyResolver dependencyResolver;
 
     private PlexusContainer container;
 
@@ -99,12 +116,30 @@
     }
 
     // introduced for testing.
-    public DefaultAssemblyArchiver( ArchiverManager archiverManager, ActiveCollectionManager collectionManager, List assemblyPhases )
+    protected DefaultAssemblyArchiver( ArchiverManager archiverManager, ActiveCollectionManager collectionManager,
+                                    DependencyResolver resolver, List assemblyPhases )
     {
         this.archiverManager = archiverManager;
+        dependencyResolver = resolver;
         this.assemblyPhases = assemblyPhases;
     }
-
+    
+    /**
+     * Create the assembly archive. Generally:
+     * 
+     * <ol>
+     *   <li>Setup any directory structures for temporary files</li>
+     *   <li>Calculate the output directory/file for the assembly</li>
+     *   <li>Setup any handler components for special descriptor files we may encounter</li>
+     *   <li>Lookup and configure the {@link Archiver} to be used</li>
+     *   <li>Determine what, if any, dependency resolution will be required, and 
+     *       resolve any dependency-version conflicts up front to produce a 
+     *       managed-version map for the whole assembly process.</li>
+     *   <li>Iterate through the available {@link AssemblyArchiverPhase} instances,
+     *       executing each to handle a different top-level section of the
+     *       assembly descriptor, if that section is present.</li>
+     * </ol>
+     */
     public File createArchive( Assembly assembly, String fullName, String format,
                                AssemblerConfigurationSource configSource )
         throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
@@ -140,12 +175,16 @@
                                                 containerHandlers );
 
             archiver.setDestFile( destFile );
+            
+            Map managedVersionMap = dependencyResolver.buildManagedVersionMap( assembly, configSource );
+            
+            AssemblyContext context = new DefaultAssemblyContext().setManagedVersionMap( managedVersionMap );
 
             for ( Iterator phaseIterator = assemblyPhases.iterator(); phaseIterator.hasNext(); )
             {
                 AssemblyArchiverPhase phase = (AssemblyArchiverPhase) phaseIterator.next();
 
-                phase.execute( assembly, archiver, configSource );
+                phase.execute( assembly, archiver, configSource, context );
             }
 
             archiver.createArchive();
@@ -162,6 +201,18 @@
         {
             throw new ArchiveCreationException( "Unable to obtain archiver for extension '" + format + "'" );
         }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new ArchiveCreationException( "Unable to create managed-version map for all assembly activities: " + e.getMessage(), e );
+        }
+        catch ( InvalidVersionSpecificationException e )
+        {
+            throw new ArchiveCreationException( "Unable to create managed-version map for all assembly activities: " + e.getMessage(), e );
+        }
+        catch ( InvalidDependencyVersionException e )
+        {
+            throw new ArchiveCreationException( "Unable to create managed-version map for all assembly activities: " + e.getMessage(), e );
+        }
 
         return destFile;
     }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/AssemblyArchiverPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/AssemblyArchiverPhase.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/AssemblyArchiverPhase.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/AssemblyArchiverPhase.java Wed Sep 24 14:14:38 2008
@@ -20,6 +20,8 @@
  */
 
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.AssemblyContext;
+import org.apache.maven.plugin.assembly.DefaultAssemblyContext;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
@@ -27,13 +29,46 @@
 import org.codehaus.plexus.archiver.Archiver;
 
 /**
+ * Handles one top-level section of the assembly descriptor, to determine which 
+ * files to include in the assembly archive for that section.
+ * 
  * @version $Id$
  */
 public interface AssemblyArchiverPhase
 {
     String ROLE = AssemblyArchiverPhase.class.getName();
 
+    /**
+     * Handle the associated section of the assembly descriptor.
+     * 
+     * @param assembly The assembly descriptor to use
+     * @param archiver The archiver used to create the assembly archive, to 
+     *                 which files/directories/artifacts are added
+     * @param configSource The configuration for this assembly build, normally 
+     *                     derived from the plugin that launched the assembly 
+     *                     process.
+     *                     
+     * @deprecated Use {@link AssemblyArchiverPhase#execute(Assembly, Archiver, AssemblerConfigurationSource, AssemblyContext)}
+     *             instead. This method should be the equivalent of calling the new execute() method with a newly-minted
+     *             instance of {@link DefaultAssemblyContext}.
+     */
     void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource )
         throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException;
 
+    /**
+     * Handle the associated section of the assembly descriptor.
+     * 
+     * @param assembly The assembly descriptor to use
+     * @param archiver The archiver used to create the assembly archive, to 
+     *                 which files/directories/artifacts are added
+     * @param configSource The configuration for this assembly build, normally 
+     *                     derived from the plugin that launched the assembly 
+     *                     process.
+     * @param context Context instance that contains the collected managed 
+     *                versions for dependencies, and potentially any caches that 
+     *                may be useful for the assembly process.
+     */
+    void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource, AssemblyContext context )
+        throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException;
+
 }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java Wed Sep 24 14:14:38 2008
@@ -20,6 +20,8 @@
  */
 
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.AssemblyContext;
+import org.apache.maven.plugin.assembly.DefaultAssemblyContext;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.archive.task.AddDependencySetsTask;
@@ -32,6 +34,8 @@
 import org.codehaus.plexus.logging.Logger;
 
 /**
+ * Handles the top-level &lt;dependencySets/&gt; section of the assembly descriptor.
+ * 
  * @version $Id$
  * @plexus.component role="org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase"
  *                   role-hint="dependency-sets"
@@ -64,12 +68,25 @@
         enableLogging( logger );
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource )
         throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
     {
+        execute( assembly, archiver, configSource, new DefaultAssemblyContext() );
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource,
+                         AssemblyContext context )
+        throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
+    {
         AddDependencySetsTask task =
-            new AddDependencySetsTask( assembly.getDependencySets(), configSource.getProject(), projectBuilder,
-                                       dependencyResolver, getLogger() );
+            new AddDependencySetsTask( assembly.getDependencySets(), configSource.getProject(),
+                                       context.getManagedVersionMap(), projectBuilder, dependencyResolver, getLogger() );
 
         task.execute( archiver, configSource );
     }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileItemAssemblyPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileItemAssemblyPhase.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileItemAssemblyPhase.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileItemAssemblyPhase.java Wed Sep 24 14:14:38 2008
@@ -24,6 +24,8 @@
 import java.util.List;
 
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.AssemblyContext;
+import org.apache.maven.plugin.assembly.DefaultAssemblyContext;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
 import org.apache.maven.plugin.assembly.format.FileFormatter;
@@ -37,6 +39,8 @@
 
 
 /**
+ * Handles the top-level &lt;files/&gt; section of the assembly descriptor.
+ * 
  * @version $Id$
  * @plexus.component role="org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase"
  *                   role-hint="file-items"
@@ -46,9 +50,22 @@
     implements AssemblyArchiverPhase
 {
 
+    /**
+     * {@inheritDoc}
+     */
     public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource )
         throws ArchiveCreationException, AssemblyFormattingException
     {
+        execute( assembly, archiver, configSource, new DefaultAssemblyContext() );
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource,
+                         AssemblyContext context )
+        throws ArchiveCreationException, AssemblyFormattingException
+    {
         List fileList = assembly.getFiles();
         File basedir = configSource.getBasedir();
 

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileSetAssemblyPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileSetAssemblyPhase.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileSetAssemblyPhase.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/FileSetAssemblyPhase.java Wed Sep 24 14:14:38 2008
@@ -20,6 +20,8 @@
  */
 
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.AssemblyContext;
+import org.apache.maven.plugin.assembly.DefaultAssemblyContext;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.archive.task.AddFileSetsTask;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
@@ -30,6 +32,8 @@
 import java.util.List;
 
 /**
+ * Handles the &lt;fileSets/&gt; top-level section of the assembly descriptor.
+ * 
  * @version $Id$
  * @plexus.component role="org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase"
  *                   role-hint="file-sets"
@@ -39,9 +43,22 @@
     implements AssemblyArchiverPhase
 {
 
+    /**
+     * {@inheritDoc}
+     */
     public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource )
         throws ArchiveCreationException, AssemblyFormattingException
     {
+        execute( assembly, archiver, configSource, new DefaultAssemblyContext() );
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource,
+                         AssemblyContext context )
+        throws ArchiveCreationException, AssemblyFormattingException
+    {
         List fileSets = assembly.getFileSets();
 
         if ( ( fileSets != null ) && !fileSets.isEmpty() )

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java Wed Sep 24 14:14:38 2008
@@ -22,6 +22,8 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.AssemblyContext;
+import org.apache.maven.plugin.assembly.DefaultAssemblyContext;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.archive.task.AddArtifactTask;
@@ -48,12 +50,16 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
+ * Handles the &lt;moduleSets/&gt; top-level section of the assembly descriptor.
+ * 
  * @version $Id$
  * @plexus.component role="org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase" role-hint="module-sets"
  */
@@ -86,16 +92,29 @@
         enableLogging( logger );
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource )
         throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
     {
+        execute( assembly, archiver, configSource, new DefaultAssemblyContext() );
+    }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource,
+                         AssemblyContext context )
+        throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
+    {
         List moduleSets = assembly.getModuleSets();
 
         for ( Iterator i = moduleSets.iterator(); i.hasNext(); )
         {
             ModuleSet moduleSet = ( ModuleSet ) i.next();
 
-            Set moduleProjects = getModuleProjects( moduleSet, configSource, moduleSet.isIncludeSubModules() );
+            Set moduleProjects = getModuleProjects( moduleSet, configSource, getLogger() );
 
             ModuleSources sources = moduleSet.getSources();
             ModuleBinaries binaries = moduleSet.getBinaries();
@@ -108,19 +127,19 @@
 
             addModuleSourceFileSets( moduleSet.getSources(), moduleProjects, archiver, configSource );
 
-            addModuleBinaries( moduleSet.getBinaries(), moduleProjects, archiver, configSource );
+            addModuleBinaries( moduleSet.getBinaries(), moduleProjects, archiver, configSource, context );
         }
     }
 
     protected void addModuleBinaries( ModuleBinaries binaries, Set projects, Archiver archiver,
-                                      AssemblerConfigurationSource configSource )
+                                      AssemblerConfigurationSource configSource, AssemblyContext context )
         throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
     {
         if ( binaries == null )
         {
             return;
         }
-
+        
         Set moduleProjects = new HashSet( projects );
 
         for ( Iterator it = moduleProjects.iterator(); it.hasNext(); )
@@ -138,6 +157,8 @@
         }
 
         String classifier = binaries.getAttachmentClassifier();
+        
+        Map chosenModuleArtifacts = new HashMap();
 
         for ( Iterator j = moduleProjects.iterator(); j.hasNext(); )
         {
@@ -176,26 +197,11 @@
                 }
             }
 
+            chosenModuleArtifacts.put( project, artifact );
             addModuleArtifact( artifact, project, archiver, configSource, binaries );
         }
 
-        List depSets = binaries.getDependencySets();
-
-        if ( ( ( depSets == null ) || depSets.isEmpty() ) && binaries.isIncludeDependencies() )
-        {
-            DependencySet impliedDependencySet = new DependencySet();
-
-            impliedDependencySet.setOutputDirectory( binaries.getOutputDirectory() );
-            impliedDependencySet.setOutputFileNameMapping( binaries.getOutputFileNameMapping() );
-            impliedDependencySet.setFileMode( binaries.getFileMode() );
-            impliedDependencySet.setDirectoryMode( binaries.getDirectoryMode() );
-            impliedDependencySet.setExcludes( binaries.getExcludes() );
-            impliedDependencySet.setIncludes( binaries.getIncludes() );
-            impliedDependencySet.setUnpack( binaries.isUnpack() );
-            // unpackOptions is handled in the first stage of dependency-set handling, below.
-
-            depSets = Collections.singletonList( impliedDependencySet );
-        }
+        List depSets = getDependencySets( binaries );
 
         if ( depSets != null )
         {
@@ -219,9 +225,10 @@
                 getLogger().debug( "Processing binary dependencies for module project: " + moduleProject.getId() );
 
                 AddDependencySetsTask task =
-                    new AddDependencySetsTask( depSets, moduleProject, projectBuilder, dependencyResolver, getLogger() );
+                    new AddDependencySetsTask( depSets, moduleProject, context.getManagedVersionMap(), projectBuilder, dependencyResolver, getLogger() );
 
-                task.setArtifactExpressionPrefix( "module." );
+                task.setModuleProject( moduleProject );
+                task.setModuleArtifact( (Artifact) chosenModuleArtifacts.get( moduleProject ) );
                 task.setDefaultOutputDirectory( binaries.getOutputDirectory() );
                 task.setDefaultOutputFileNameMapping( binaries.getOutputFileNameMapping() );
 
@@ -230,6 +237,29 @@
         }
     }
 
+    public static List getDependencySets( ModuleBinaries binaries )
+    {
+        List depSets = binaries.getDependencySets();
+
+        if ( ( ( depSets == null ) || depSets.isEmpty() ) && binaries.isIncludeDependencies() )
+        {
+            DependencySet impliedDependencySet = new DependencySet();
+
+            impliedDependencySet.setOutputDirectory( binaries.getOutputDirectory() );
+            impliedDependencySet.setOutputFileNameMapping( binaries.getOutputFileNameMapping() );
+            impliedDependencySet.setFileMode( binaries.getFileMode() );
+            impliedDependencySet.setDirectoryMode( binaries.getDirectoryMode() );
+            impliedDependencySet.setExcludes( binaries.getExcludes() );
+            impliedDependencySet.setIncludes( binaries.getIncludes() );
+            impliedDependencySet.setUnpack( binaries.isUnpack() );
+            // unpackOptions is handled in the first stage of dependency-set handling, below.
+
+            depSets = Collections.singletonList( impliedDependencySet );
+        }
+        
+        return depSets;
+    }
+
     protected List collectExcludesFromQueuedArtifacts( Set visitedArtifacts, List binaryExcludes )
     {
         List excludes = binaryExcludes;
@@ -264,14 +294,17 @@
 
         AddArtifactTask task = new AddArtifactTask( artifact, getLogger() );
 
-        task.setArtifactExpressionPrefix( "module." );
         task.setFileNameMapping( binaries.getOutputFileNameMapping() );
         task.setOutputDirectory( binaries.getOutputDirectory() );
         task.setProject( project );
+        task.setModuleProject( project );
+        task.setModuleArtifact( artifact );
         task.setDirectoryMode( binaries.getDirectoryMode() );
         task.setFileMode( binaries.getFileMode() );
         task.setUnpack( binaries.isUnpack() );
-        if ( binaries.isUnpack() ) {
+        
+        if ( binaries.isUnpack() && binaries.getUnpackOptions() != null )
+        {
             task.setIncludes( binaries.getUnpackOptions().getIncludes() );
             task.setExcludes( binaries.getUnpackOptions().getExcludes() );
         }
@@ -330,8 +363,8 @@
             
             AddFileSetsTask task = new AddFileSetsTask( moduleFileSets );
 
-            task.setArtifactExpressionPrefix( "module." );
             task.setProject( moduleProject );
+            task.setModuleProject( moduleProject );
             task.setLogger( getLogger() );
 
             task.execute( archiver, configSource );
@@ -431,7 +464,9 @@
         {
             destPathPrefix =
                 AssemblyFormatUtils.evaluateFileNameMapping( sources.getOutputDirectoryMapping(),
-                                                             moduleProject.getArtifact(), configSource.getProject(), moduleProject, "module.", configSource );
+                                                             moduleProject.getArtifact(), configSource.getProject(),
+                                                             moduleProject, moduleProject.getArtifact(), moduleProject,
+                                                             configSource );
 
             if ( !destPathPrefix.endsWith( "/" ) )
             {
@@ -452,7 +487,7 @@
 
         destPath =
             AssemblyFormatUtils.getOutputDirectory( destPath, configSource.getProject(), moduleProject,
-                                                    configSource.getFinalName(), "module.", configSource );
+                                                    moduleProject, configSource.getFinalName(), configSource );
 
         fs.setOutputDirectory( destPath );
 
@@ -462,8 +497,7 @@
         return fs;
     }
 
-    protected Set getModuleProjects( ModuleSet moduleSet, AssemblerConfigurationSource configSource,
-                                     boolean includeSubModules )
+    public static Set getModuleProjects( ModuleSet moduleSet, AssemblerConfigurationSource configSource, Logger logger )
         throws ArchiveCreationException
     {
         MavenProject project = configSource.getProject();
@@ -472,8 +506,8 @@
         try
         {
             moduleProjects =
-                ProjectUtils.getProjectModules( project, configSource.getReactorProjects(), includeSubModules,
-                                                getLogger() );
+                ProjectUtils.getProjectModules( project, configSource.getReactorProjects(), moduleSet.isIncludeSubModules(),
+                                                logger );
         }
         catch ( IOException e )
         {
@@ -481,7 +515,7 @@
                             + e.getMessage(), e );
         }
 
-        FilterUtils.filterProjects( moduleProjects, moduleSet.getIncludes(), moduleSet.getExcludes(), true, getLogger() );
+        FilterUtils.filterProjects( moduleProjects, moduleSet.getIncludes(), moduleSet.getExcludes(), true, logger );
         return moduleProjects;
     }
 

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java Wed Sep 24 14:14:38 2008
@@ -23,6 +23,9 @@
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.AssemblyContext;
+import org.apache.maven.plugin.assembly.DefaultAssemblyContext;
+import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.archive.phase.wrappers.RepoBuilderConfigSourceWrapper;
 import org.apache.maven.plugin.assembly.archive.phase.wrappers.RepoInfoWrapper;
@@ -80,8 +83,21 @@
         dependencyResolver = resolver;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource )
-        throws ArchiveCreationException, AssemblyFormattingException
+        throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
+    {
+        execute( assembly, archiver, configSource, new DefaultAssemblyContext() );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void execute( Assembly assembly, Archiver archiver, AssemblerConfigurationSource configSource,
+                         AssemblyContext context )
+        throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
     {
         List repositoriesList = assembly.getRepositories();
 
@@ -91,7 +107,7 @@
         {
             Repository repository = (Repository) i.next();
 
-            resolveDependencies(repository, configSource);
+            resolveDependencies( repository, configSource, context );
 
             String outputDirectory =
                 AssemblyFormatUtils.getOutputDirectory( repository.getOutputDirectory(), configSource.getProject(),
@@ -127,7 +143,8 @@
         }
     }
 
-    private void resolveDependencies( Repository repository, AssemblerConfigurationSource configSource )
+    private void resolveDependencies( Repository repository, AssemblerConfigurationSource configSource,
+                                      AssemblyContext context )
         throws ArchiveCreationException
     {
         MavenProject project = configSource.getProject();
@@ -140,8 +157,9 @@
         try
         {
             // NOTE: hard-coding to resolve artifacts transitively, since this is meant to be a self-contained repository...
-            dependencyArtifacts = dependencyResolver
-                .resolveDependencies( project, repository.getScope(), localRepository, additionalRemoteRepositories, true );
+            dependencyArtifacts =
+                dependencyResolver.resolveDependencies( project, repository.getScope(), context.getManagedVersionMap(),
+                                                        localRepository, additionalRemoteRepositories, true );
 
             if ( ( dependencyArtifacts != null ) && !dependencyArtifacts.isEmpty() )
             {

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java Wed Sep 24 14:14:38 2008
@@ -58,6 +58,10 @@
     private final Artifact artifact;
 
     private MavenProject project;
+    
+    private MavenProject moduleProject;
+    
+    private Artifact moduleArtifact;
 
     private String outputDirectory;
 
@@ -65,8 +69,6 @@
 
     private final Logger logger;
 
-    private String artifactExpressionPrefix = "artifact.";
-
     public AddArtifactTask( Artifact artifact, Logger logger )
     {
         this.artifact = artifact;
@@ -101,7 +103,7 @@
 
         String destDirectory = outputDirectory;
 
-        destDirectory = AssemblyFormatUtils.getOutputDirectory( destDirectory, configSource.getProject(), project, configSource.getFinalName(), artifactExpressionPrefix, configSource );
+        destDirectory = AssemblyFormatUtils.getOutputDirectory( destDirectory, configSource.getProject(), moduleProject, project, configSource.getFinalName(), configSource );
 
         if ( unpack )
         {
@@ -167,10 +169,10 @@
         }
         else
         {
-            String fileNameMapping = AssemblyFormatUtils.evaluateFileNameMapping( outputFileNameMapping, artifact, 
-            		                                                              configSource.getProject(), project, 
-            		                                                              artifactExpressionPrefix,
-            		                                                              configSource );
+            String fileNameMapping =
+                AssemblyFormatUtils.evaluateFileNameMapping( outputFileNameMapping, artifact,
+                                                             configSource.getProject(), moduleProject, moduleArtifact,
+                                                             project, configSource );
 
             String outputLocation = destDirectory + fileNameMapping;
 
@@ -249,9 +251,24 @@
         setFileNameMapping( outputFileNameMapping == null ? defaultOutputFileNameMapping : outputFileNameMapping );
     }
 
-    public void setArtifactExpressionPrefix( String artifactExpressionPrefix )
+    public MavenProject getModuleProject()
+    {
+        return moduleProject;
+    }
+
+    public void setModuleProject( MavenProject moduleProject )
+    {
+        this.moduleProject = moduleProject;
+    }
+
+    public Artifact getModuleArtifact()
+    {
+        return moduleArtifact;
+    }
+
+    public void setModuleArtifact( Artifact moduleArtifact )
     {
-        this.artifactExpressionPrefix = artifactExpressionPrefix;
+        this.moduleArtifact = moduleArtifact;
     }
 
 }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTask.java Wed Sep 24 14:14:38 2008
@@ -48,6 +48,7 @@
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -73,6 +74,8 @@
     private final Logger logger;
 
     private final MavenProject project;
+    
+    private MavenProject moduleProject;
 
     private final MavenProjectBuilder projectBuilder;
 
@@ -82,13 +85,16 @@
 
     private final DependencyResolver dependencyResolver;
 
-    private String artifactExpressionPrefix = "artifact.";
+    private final Map managedVersions;
 
-    public AddDependencySetsTask( List dependencySets, MavenProject project, MavenProjectBuilder projectBuilder,
+    private Artifact moduleArtifact;
+
+    public AddDependencySetsTask( List dependencySets, MavenProject project, Map managedVersions, MavenProjectBuilder projectBuilder,
                                   DependencyResolver dependencyResolver, Logger logger )
     {
         this.dependencySets = dependencySets;
         this.project = project;
+        this.managedVersions = managedVersions;
         this.projectBuilder = projectBuilder;
         this.dependencyResolver = dependencyResolver;
         this.logger = logger;
@@ -160,7 +166,8 @@
                 AddArtifactTask task = new AddArtifactTask( depArtifact, logger );
 
                 task.setProject( depProject );
-                task.setArtifactExpressionPrefix( artifactExpressionPrefix );
+                task.setModuleProject( moduleProject );
+                task.setModuleArtifact( moduleArtifact );
                 task.setOutputDirectory( dependencySet.getOutputDirectory(), defaultOutputDirectory );
                 task.setFileNameMapping( dependencySet.getOutputFileNameMapping(), defaultOutputFileNameMapping );
                 task.setDirectoryMode( dependencySet.getDirectoryMode() );
@@ -203,7 +210,7 @@
         try
         {
             dependencyArtifacts = dependencyResolver.resolveDependencies( project, dependencySet.getScope(),
-                                                                          localRepository,
+                                                                          managedVersions, localRepository,
                                                                           additionalRemoteRepositories,
                                                                           dependencySet.isUseTransitiveDependencies() );
 
@@ -285,14 +292,13 @@
         String outputDirectory = dependencySet.getOutputDirectory();
 
         outputDirectory = AssemblyFormatUtils.getOutputDirectory( outputDirectory, configSource.getProject(),
-                                                                  depProject, depProject.getBuild().getFinalName(),
-                                                                  artifactExpressionPrefix,
+                                                                  moduleProject, depProject, depProject.getBuild().getFinalName(),
                                                                   configSource );
 
-        String destName = AssemblyFormatUtils.evaluateFileNameMapping( dependencySet.getOutputFileNameMapping(),
-                                                                       depArtifact, configSource.getProject(),
-                                                                       depProject, artifactExpressionPrefix,
-                                                                       configSource );
+        String destName =
+            AssemblyFormatUtils.evaluateFileNameMapping( dependencySet.getOutputFileNameMapping(), depArtifact,
+                                                         configSource.getProject(), moduleProject, moduleArtifact,
+                                                         depProject, configSource );
 
         String target;
 
@@ -354,8 +360,23 @@
         this.defaultOutputFileNameMapping = defaultOutputFileNameMapping;
     }
 
-    public void setArtifactExpressionPrefix( String artifactExpressionPrefix )
+    public MavenProject getModuleProject()
+    {
+        return moduleProject;
+    }
+
+    public void setModuleProject( MavenProject moduleProject )
+    {
+        this.moduleProject = moduleProject;
+    }
+
+    public void setModuleArtifact( Artifact moduleArtifact )
+    {
+        this.moduleArtifact = moduleArtifact;
+    }
+    
+    public Artifact getModuleArtifact()
     {
-        this.artifactExpressionPrefix = artifactExpressionPrefix;
+        return moduleArtifact;
     }
 }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddFileSetsTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddFileSetsTask.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddFileSetsTask.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddFileSetsTask.java Wed Sep 24 14:14:38 2008
@@ -48,8 +48,8 @@
     private Logger logger;
 
     private MavenProject project;
-
-    private String artifactExpressionPrefix;
+    
+    private MavenProject moduleProject;
 
     public AddFileSetsTask( List fileSets )
     {
@@ -112,8 +112,8 @@
         }
 
         destDirectory =
-            AssemblyFormatUtils.getOutputDirectory( destDirectory, configSource.getProject(), project,
-                                                    configSource.getFinalName(), artifactExpressionPrefix, configSource );
+            AssemblyFormatUtils.getOutputDirectory( destDirectory, configSource.getProject(), moduleProject, project,
+                                                    configSource.getFinalName(), configSource );
 
         if ( logger.isDebugEnabled() )
         {
@@ -203,9 +203,14 @@
         this.project = project;
     }
 
-    public void setArtifactExpressionPrefix( String artifactExpressionPrefix )
+    public MavenProject getModuleProject()
+    {
+        return moduleProject;
+    }
+
+    public void setModuleProject( MavenProject moduleProject )
     {
-        this.artifactExpressionPrefix = artifactExpressionPrefix;
+        this.moduleProject = moduleProject;
     }
 
 }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java Wed Sep 24 14:14:38 2008
@@ -24,6 +24,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -32,10 +33,12 @@
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactCollector;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.DebugResolutionListener;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
@@ -43,6 +46,14 @@
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Exclusion;
+import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
+import org.apache.maven.plugin.assembly.archive.phase.ModuleSetAssemblyPhase;
+import org.apache.maven.plugin.assembly.model.Assembly;
+import org.apache.maven.plugin.assembly.model.DependencySet;
+import org.apache.maven.plugin.assembly.model.ModuleBinaries;
+import org.apache.maven.plugin.assembly.model.ModuleSet;
+import org.apache.maven.plugin.assembly.model.Repository;
 import org.apache.maven.plugin.assembly.utils.FilterUtils;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
@@ -61,7 +72,7 @@
 public class DefaultDependencyResolver
     extends AbstractLogEnabled implements DependencyResolver
 {
-
+    
     /**
      * @plexus.requirement
      */
@@ -76,26 +87,149 @@
      * @plexus.requirement
      */
     private ArtifactFactory factory;
+    
+    /**
+     * @plexus.requirement
+     */
+    private ArtifactCollector collector;
 
     public DefaultDependencyResolver()
     {
         // for plexus init
     }
 
-    public DefaultDependencyResolver( ArtifactResolver resolver, ArtifactMetadataSource metadataSource,
-                               ArtifactFactory factory, Logger logger )
+    protected DefaultDependencyResolver( ArtifactResolver resolver, ArtifactMetadataSource metadataSource,
+                               ArtifactFactory factory, ArtifactCollector collector, Logger logger )
     {
         this.resolver = resolver;
         this.metadataSource = metadataSource;
         this.factory = factory;
+        this.collector = collector;
 
         enableLogging( logger );
     }
 
+    public Map buildManagedVersionMap( Assembly assembly, AssemblerConfigurationSource configSource )
+        throws ArchiveCreationException, InvalidVersionSpecificationException, InvalidDependencyVersionException,
+        ArtifactResolutionException
+    {
+        MavenProject currentProject = configSource.getProject();
+        
+        ResolutionManagementInfo depInfo = new ResolutionManagementInfo( currentProject );
+        
+        getDependencySetResolutionRequirements( assembly.getDependencySets(), depInfo );
+        getModuleSetResolutionRequirements( assembly.getModuleSets(), depInfo, configSource );
+        getRepositoryResolutionRequirements( assembly.getRepositories(), depInfo );
+        
+        if ( !depInfo.isResolutionRequired() )
+        {
+            return new HashMap();
+        }
+        
+        Map managedVersions = new HashMap();
+        Set allRequiredArtifacts = new LinkedHashSet();
+        List allRemoteRepos = new ArrayList();
+        
+        for ( Iterator it = depInfo.getEnabledProjects().iterator(); it.hasNext(); )
+        {
+            MavenProject project = (MavenProject) it.next();
+            
+            Map projectManagedVersions = getManagedVersionMap( project );
+            if ( projectManagedVersions != null )
+            {
+                for ( Iterator versionIterator = projectManagedVersions.keySet().iterator(); versionIterator.hasNext(); )
+                {
+                    String id = (String) versionIterator.next();
+                    if ( !managedVersions.containsKey( id ) )
+                    {
+                        managedVersions.put( id, projectManagedVersions.get( id ) );
+                    }
+                }
+            }
+        }
+        
+        if ( configSource.getRemoteRepositories() != null && !configSource.getRemoteRepositories().isEmpty() )
+        {
+            allRemoteRepos.addAll( configSource.getRemoteRepositories() );
+        }
+        
+        for ( Iterator it = depInfo.getEnabledProjects().iterator(); it.hasNext(); )
+        {
+            MavenProject project = (MavenProject) it.next();
+            
+            allRequiredArtifacts.addAll( MavenMetadataSource.createArtifacts( factory, project.getDependencies(), null,
+                                                                              depInfo.getScopeFilter(), project ) );
+            
+            allRemoteRepos = aggregateRemoteArtifactRepositories( allRemoteRepos, project );
+        }
+        
+        if ( depInfo.isResolvedTransitively() )
+        {
+            // TODO: such a call in MavenMetadataSource too - packaging not really the intention of type
+            Artifact projectArtifact =
+                factory.createBuildArtifact( currentProject.getGroupId(), currentProject.getArtifactId()
+                    + "-[assembly process]", currentProject.getVersion(), currentProject.getPackaging() );
+
+            List listeners =
+                getLogger().isDebugEnabled() ? Collections.singletonList( new DebugResolutionListener( getLogger() ) )
+                                : Collections.EMPTY_LIST;
+            
+            ArtifactResolutionResult resolutionResult =
+                collector.collect( allRequiredArtifacts, projectArtifact, managedVersions,
+                                   configSource.getLocalRepository(), allRemoteRepos, metadataSource,
+                                   depInfo.getScopeFilter(), listeners );
+            
+            Set artifacts = resolutionResult.getArtifacts();
+            if ( artifacts != null )
+            {
+                for ( Iterator versionIterator = artifacts.iterator(); versionIterator.hasNext(); )
+                {
+                    Artifact artifact = (Artifact) versionIterator.next();
+                    String id = artifact.getDependencyConflictId();
+                    if ( !managedVersions.containsKey( id ) )
+                    {
+                        managedVersions.put( id, artifact );
+                    }
+                }
+            }
+        }
+        else
+        {
+            if ( allRequiredArtifacts != null )
+            {
+                for ( Iterator versionIterator = allRequiredArtifacts.iterator(); versionIterator.hasNext(); )
+                {
+                    Artifact artifact = (Artifact) versionIterator.next();
+                    if ( artifact.getVersion() == null )
+                    {
+                        if ( getLogger().isDebugEnabled() )
+                        {
+                            getLogger().debug(
+                                              "Not sure what to do with the version range: "
+                                                  + artifact.getVersionRange()
+                                                  + " in non-transitive mode, encountered while building managed versions collection; skipping it for now. Artifact: "
+                                                  + artifact );
+                        }
+                        
+                        continue;
+                    }
+                    
+                    String id = artifact.getDependencyConflictId();
+                    if ( !managedVersions.containsKey( id ) )
+                    {
+                        managedVersions.put( id, artifact );
+                    }
+                }
+            }
+        }
+        
+        return managedVersions;
+    }
+    
     /* (non-Javadoc)
      * @see org.apache.maven.plugin.assembly.artifact.DependencyResolver#resolveDependencies(org.apache.maven.project.MavenProject, java.lang.String, org.apache.maven.artifact.repository.ArtifactRepository, java.util.List)
      */
-    public Set resolveDependencies( MavenProject project, String scope, ArtifactRepository localRepository,
+    public Set resolveDependencies( MavenProject project, String scope, Map managedVersions, ArtifactRepository localRepository,
                                     List remoteRepositories, boolean resolveTransitively )
         throws InvalidDependencyVersionException, ArtifactResolutionException, ArtifactNotFoundException
     {
@@ -111,47 +245,53 @@
         Set dependencyArtifacts =
             MavenMetadataSource.createArtifacts( factory, project.getDependencies(), null, filter, project );
 
-        getLogger().debug( "Project dependencies are:\n" + StringUtils.join( dependencyArtifacts.iterator(), "\n" ) );
+        getLogger().debug(
+                           "Dependencies for project: " + project.getId() + " are:\n"
+                               + StringUtils.join( dependencyArtifacts.iterator(), "\n" ) );
+        
+        for ( Iterator it = dependencyArtifacts.iterator(); it.hasNext(); )
+        {
+            Artifact depArtifact = (Artifact) it.next();
+            
+            if ( managedVersions.containsKey( depArtifact.getDependencyConflictId() ) )
+            {
+                manageArtifact( depArtifact, managedVersions );
+            }
+        }
 
         if ( resolveTransitively )
         {
             getLogger().debug( "Resolving project dependencies transitively." );
-            return resolveTransitively( dependencyArtifacts, artifact, localRepository, repos, filter, project );
+            return resolveTransitively( dependencyArtifacts, artifact, managedVersions, localRepository, repos, filter, project );
         }
         else
         {
             getLogger().debug( "Resolving project dependencies ONLY. Transitive dependencies WILL NOT be included in the results." );
-            return resolveNonTransitively( dependencyArtifacts, artifact, localRepository, repos, filter );
+            return resolveNonTransitively( dependencyArtifacts, artifact, managedVersions, localRepository, repos, filter );
         }
     }
 
-    private Set resolveNonTransitively( Set dependencyArtifacts, Artifact artifact, ArtifactRepository localRepository,
-                                        List repos, ArtifactFilter filter )
+    protected Set resolveNonTransitively( Set dependencyArtifacts, Artifact artifact, Map managedVersions,
+                                          ArtifactRepository localRepository, List repos, ArtifactFilter filter )
         throws ArtifactResolutionException, ArtifactNotFoundException
     {
         for ( Iterator it = dependencyArtifacts.iterator(); it.hasNext(); )
         {
             Artifact depArtifact = (Artifact) it.next();
-
+            
             resolver.resolve( depArtifact, repos, localRepository );
         }
 
         return dependencyArtifacts;
     }
 
-    private Set resolveTransitively( Set dependencyArtifacts, Artifact artifact, ArtifactRepository localRepository,
+    private Set resolveTransitively( Set dependencyArtifacts, Artifact artifact, Map managedVersions, ArtifactRepository localRepository,
                                      List repos, ArtifactFilter filter, MavenProject project )
         throws InvalidDependencyVersionException, ArtifactResolutionException, ArtifactNotFoundException
     {
-        ArtifactResolutionResult result;
-        try
-        {
-            result = resolver.resolveTransitively( dependencyArtifacts, artifact, getManagedVersionMap( project ), localRepository, repos, metadataSource, filter );
-        }
-        catch ( InvalidVersionSpecificationException e )
-        {
-            throw new InvalidDependencyVersionException( e.getMessage(), e );
-        }
+        ArtifactResolutionResult result =
+            resolver.resolveTransitively( dependencyArtifacts, artifact, managedVersions, localRepository, repos,
+                                          metadataSource, filter );
 
         getLogger().debug( "While resolving dependencies of " + project.getId() + ":" );
 
@@ -160,7 +300,46 @@
         return result.getArtifacts();
     }
 
-    private List aggregateRemoteArtifactRepositories( List remoteRepositories, MavenProject project )
+    // Copied from DefaultArtifactCollector, SVN: http://svn.apache.org/repos/asf/maven/components/branches/maven-2.1.x@679206
+    // with modifications to work with non-transitive resolution processes. 
+    protected void manageArtifact( Artifact targetArtifact, Map managedVersions )
+    {
+        Artifact artifact = (Artifact) managedVersions.get( targetArtifact.getDependencyConflictId() );
+        
+        if ( artifact == null )
+        {
+            return;
+        }
+
+        // Before we update the version of the artifact, we need to know
+        // whether we are working on a transitive dependency or not.  This
+        // allows depMgmt to always override transitive dependencies, while
+        // explicit child override depMgmt (viz. depMgmt should only
+        // provide defaults to children, but should override transitives).
+        // We can do this by calling isChildOfRootNode on the current node.
+
+        if ( artifact.getVersion() != null )
+        {
+            if ( getLogger().isDebugEnabled() )
+            {
+                getLogger().debug( "Managing version for: " + targetArtifact.getDependencyConflictId() + " to: " + artifact.getVersion() );
+            }
+            
+            targetArtifact.setVersion( artifact.getVersion() );
+        }
+
+        if ( artifact.getScope() != null )
+        {
+            if ( getLogger().isDebugEnabled() )
+            {
+                getLogger().debug( "Managing scope for: " + targetArtifact.getDependencyConflictId() + " to: " + artifact.getScope() );
+            }
+            
+            targetArtifact.setScope( artifact.getScope() );
+        }
+    }
+    
+    protected List aggregateRemoteArtifactRepositories( List remoteRepositories, MavenProject project )
     {
         List repoLists = new ArrayList();
 
@@ -194,7 +373,7 @@
 
     // TODO: Remove this, once we can depend on Maven 2.0.7 or later...in which
     // MavenProject.getManagedVersionMap() exists. This is from MNG-1577.
-    private Map getManagedVersionMap( MavenProject project )
+    protected Map getManagedVersionMap( MavenProject project )
         throws InvalidVersionSpecificationException
     {
         DependencyManagement dependencyManagement = project.getModel().getDependencyManagement();
@@ -254,4 +433,143 @@
         return map;
     }
 
+    protected void getRepositoryResolutionRequirements( List repositories, ResolutionManagementInfo requirements )
+    {
+        if ( repositories != null && !repositories.isEmpty() )
+        {
+            requirements.setResolutionRequired( true );
+            for ( Iterator it = repositories.iterator(); it.hasNext(); )
+            {
+                Repository repo = (Repository) it.next();
+                enableScope( repo.getScope(), requirements );
+            }
+        }
+    }
+
+    protected void getModuleSetResolutionRequirements( List moduleSets, ResolutionManagementInfo requirements,
+                                                     AssemblerConfigurationSource configSource )
+        throws ArchiveCreationException
+    {
+        if ( moduleSets != null && !moduleSets.isEmpty() )
+        {
+            for ( Iterator it = moduleSets.iterator(); it.hasNext(); )
+            {
+                ModuleSet set = (ModuleSet) it.next();
+                
+                ModuleBinaries binaries = set.getBinaries();
+                if ( binaries != null )
+                {
+                    Set projects = ModuleSetAssemblyPhase.getModuleProjects( set, configSource, getLogger() );
+                    if ( projects != null && !projects.isEmpty() )
+                    {
+                        for ( Iterator projectIterator = projects.iterator(); projectIterator.hasNext(); )
+                        {
+                            MavenProject p = (MavenProject) projectIterator.next();
+                            requirements.enableProjectResolution( p );
+                        }
+                    }
+                    
+                    if ( binaries.isIncludeDependencies() )
+                    {
+                        getDependencySetResolutionRequirements( ModuleSetAssemblyPhase.getDependencySets( binaries ), requirements );
+                    }
+                }
+            }
+        }
+    }
+
+    protected void getDependencySetResolutionRequirements( List depSets, ResolutionManagementInfo requirements )
+    {
+        if ( depSets != null && !depSets.isEmpty() )
+        {
+            requirements.setResolutionRequired( true );
+            for ( Iterator it = depSets.iterator(); it.hasNext(); )
+            {
+                DependencySet set = (DependencySet) it.next();
+                
+                requirements.setResolvedTransitively( requirements.isResolvedTransitively() || set.isUseTransitiveDependencies() );
+                enableScope( set.getScope(), requirements );
+            }
+        }
+    }
+
+    private void enableScope( String scope, ResolutionManagementInfo requirements )
+    {
+        if ( Artifact.SCOPE_COMPILE.equals( scope ) )
+        {
+            requirements.enableCompileScope();
+        }
+        else if ( Artifact.SCOPE_PROVIDED.equals( scope ) )
+        {
+            requirements.enableProvidedScope();
+        }
+        else if ( Artifact.SCOPE_RUNTIME.equals( scope ) )
+        {
+            requirements.enableRuntimeScope();
+        }
+        else if ( Artifact.SCOPE_SYSTEM.equals( scope ) )
+        {
+            requirements.enableSystemScope();
+        }
+        else if ( Artifact.SCOPE_TEST.equals( scope ) )
+        {
+            requirements.enableTestScope();
+        }
+    }
+
+    protected ArtifactResolver getArtifactResolver()
+    {
+        return resolver;
+    }
+
+    protected DefaultDependencyResolver setArtifactResolver( ArtifactResolver resolver )
+    {
+        this.resolver = resolver;
+        
+        return this;
+    }
+
+    protected ArtifactMetadataSource getArtifactMetadataSource()
+    {
+        return metadataSource;
+    }
+
+    protected DefaultDependencyResolver setArtifactMetadataSource( ArtifactMetadataSource metadataSource )
+    {
+        this.metadataSource = metadataSource;
+        
+        return this;
+    }
+
+    protected ArtifactFactory getArtifactFactory()
+    {
+        return factory;
+    }
+
+    protected DefaultDependencyResolver setArtifactFactory( ArtifactFactory factory )
+    {
+        this.factory = factory;
+        
+        return this;
+    }
+
+    protected ArtifactCollector getArtifactCollector()
+    {
+        return collector;
+    }
+
+    protected DefaultDependencyResolver setArtifactCollector( ArtifactCollector collector )
+    {
+        this.collector = collector;
+        
+        return this;
+    }
+    
+    protected DefaultDependencyResolver setLogger( Logger logger )
+    {
+        enableLogging( logger );
+        
+        return this;
+    }
+
 }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java?rev=698739&r1=698738&r2=698739&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java Wed Sep 24 14:14:38 2008
@@ -19,23 +19,68 @@
  * under the License.
  */
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactCollector;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
+import org.apache.maven.plugin.assembly.model.Assembly;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 
-import java.util.List;
-import java.util.Set;
-
 /**
+ * Convenience component that aids in the resolution of dependency artifacts,
+ * according to various configurations such as transitivity flag and scope.
+ * 
  * @version $Id$
  */
 public interface DependencyResolver
 {
 
-    public abstract Set resolveDependencies( MavenProject project, String scope, ArtifactRepository localRepository,
+    /**
+     * Resolve the project dependencies, according to the supplied configuration.
+     * 
+     * @param project The project whose dependencies should be resolved
+     * @param scope The dependency scope to resolve
+     * @param managedVersions The map of managed versions, which allows 
+     *                        dependency version conflict resolution to happen 
+     *                        once for the entire assembly process.
+     * @param localRepository The local repository which acts as a local cache 
+     *                        for remote artifact repositories
+     * @param remoteRepositories The list of remote {@link ArtifactRepository} 
+     *                           instances to use during resolution, in addition 
+     *                           to those defined in the supplied 
+     *                           {@link MavenProject} instance.
+     * @param resolveTransitively If true, resolve project dependencies 
+     *                            transitively; if false, only resolve the 
+     *                            project's direct dependencies.
+     * @return The set of resolved {@link Artifact} instances for the project
+     */
+    Set resolveDependencies( MavenProject project, String scope, Map managedVersions, ArtifactRepository localRepository,
                                              List remoteRepositories, boolean resolveTransitively )
         throws InvalidDependencyVersionException, ArtifactResolutionException, ArtifactNotFoundException;
 
+    /**
+     * Traverse the assembly descriptor to determine which scopes, modules, etc.
+     * will require dependency resolution. Once we have a complete picture of
+     * what will be required in the way of resolution, feed all of this into the
+     * {@link ArtifactCollector} to discover/resolve versions for all 
+     * dependencies in the mix, then save these versions in a mapping of:
+     * <br/>
+     * {@link Artifact#getDependencyConflictId()} -&gt; {@link Artifact}
+     * <br/>
+     * This allows dependency conflict resolution to happen a single time, then
+     * be reused multiple times during the construction of the assembly archive.
+     */
+    Map buildManagedVersionMap( Assembly assembly, AssemblerConfigurationSource configSource )
+        throws ArchiveCreationException, InvalidVersionSpecificationException, InvalidDependencyVersionException,
+        ArtifactResolutionException;
+
 }
\ No newline at end of file