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 <dependencySets/> 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 <files/> 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 <fileSets/> 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 <moduleSets/> 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()} -> {@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