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 2010/09/21 22:40:04 UTC

svn commit: r999624 - in /maven/plugins/trunk/maven-assembly-plugin/src: it/projects/dependency-sets/dependencySet-unpacked-filtered/ it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/ it/projects/dependency-sets/dependencySet-unpacked...

Author: jdcasey
Date: Tue Sep 21 20:40:03 2010
New Revision: 999624

URL: http://svn.apache.org/viewvc?rev=999624&view=rev
Log:
[MASSEMBLY-228] Enable filtering, line-ending configuration, and control of default excludes and strict filtering using unpackOptions.

Added:
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/resources/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/resources/assembly-resources/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/resources/assembly-resources/test.txt   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/src/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/src/assemble/
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/src/assemble/bin.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/pom.xml   (with props)
    maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/verify.bsh   (with props)
Modified:
    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/ModuleSetAssemblyPhase.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/mdo/component.mdo
    maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo
    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

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/pom.xml?rev=999624&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/pom.xml Tue Sep 21 20:40:03 2010
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>parent</artifactId>
+    <groupId>test</groupId>
+    <version>1</version>
+  </parent>
+  <artifactId>child1</artifactId>
+  <name>Maven Quick Start Archetype</name>
+</project>
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/resources/assembly-resources/test.txt
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/resources/assembly-resources/test.txt?rev=999624&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/resources/assembly-resources/test.txt (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/resources/assembly-resources/test.txt Tue Sep 21 20:40:03 2010
@@ -0,0 +1 @@
+Project Version: ${project.version}
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child1/src/main/resources/assembly-resources/test.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/pom.xml?rev=999624&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/pom.xml Tue Sep 21 20:40:03 2010
@@ -0,0 +1,41 @@
+<?xml version='1.0'?>
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>parent</artifactId>
+    <groupId>test</groupId>
+    <version>1</version>
+  </parent>
+  <artifactId>child2</artifactId>
+
+  <dependencies>
+    <dependency>
+      <groupId>test</groupId>
+      <artifactId>child1</artifactId>
+      <version>1</version>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-binary-assembly</id>
+            <phase>package</phase>
+            <configuration>
+              <descriptors>
+                <descriptor>src/assemble/bin.xml</descriptor>
+              </descriptors>
+            </configuration>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/src/assemble/bin.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/src/assemble/bin.xml?rev=999624&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/src/assemble/bin.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/src/assemble/bin.xml Tue Sep 21 20:40:03 2010
@@ -0,0 +1,24 @@
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+  <id>bin</id>
+  <formats>
+    <format>dir</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <dependencySets>
+    <dependencySet>
+      <includes>
+        <include>test:child1</include>
+      </includes>
+      
+      <outputDirectory>/</outputDirectory>
+      <outputFileNameMapping>${artifact.artifactId}</outputFileNameMapping>
+      
+      <unpack>true</unpack>
+      <unpackOptions>
+        <filtered>true</filtered>
+      </unpackOptions>
+    </dependencySet>
+  </dependencySets>
+</assembly>
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/child2/src/assemble/bin.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/pom.xml?rev=999624&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/pom.xml (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/pom.xml Tue Sep 21 20:40:03 2010
@@ -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>
+    <groupId>org.apache.maven.plugin.assembly.test</groupId>
+    <artifactId>it-project-parent</artifactId>
+    <version>1</version>
+  </parent>
+  
+  <groupId>test</groupId>
+  <artifactId>parent</artifactId>
+  <packaging>pom</packaging>
+  <version>1</version>
+  
+  <modules>
+    <module>child1</module>
+    <module>child2</module>
+  </modules>
+</project>
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/verify.bsh
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/verify.bsh?rev=999624&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/verify.bsh (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/verify.bsh Tue Sep 21 20:40:03 2010
@@ -0,0 +1,18 @@
+import java.io.*;
+
+try
+{
+    File f = new File( basedir, "child2/target/child2-1-bin/child1/assembly-resources/test.txt" );
+    
+    BufferedReader r = new BufferedReader( new FileReader( f ) );
+    if ( r.readLine().equals( "Project Version: 1" ) )
+    {
+      return true;
+    }
+}
+catch( IOException e )
+{
+    e.printStackTrace();
+}
+
+return false;

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/dependencySet-unpacked-filtered/verify.bsh
------------------------------------------------------------------------------
    svn:eol-style = native

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=999624&r1=999623&r2=999624&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 Tue Sep 21 20:40:03 2010
@@ -28,6 +28,7 @@ import org.apache.maven.plugin.assembly.
 import org.apache.maven.plugin.assembly.model.Assembly;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.codehaus.plexus.archiver.Archiver;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -47,6 +48,9 @@ public class DependencySetAssemblyPhase
     @Requirement
     private MavenProjectBuilder projectBuilder;
 
+    @Requirement
+    private ArchiverManager archiverManager;
+
     public DependencySetAssemblyPhase()
     {
         // used for plexus init
@@ -67,7 +71,7 @@ public class DependencySetAssemblyPhase
     {
         final AddDependencySetsTask task =
             new AddDependencySetsTask( assembly.getDependencySets(), context.getResolvedArtifacts(),
-                                       configSource.getProject(), projectBuilder, getLogger() );
+                                       configSource.getProject(), projectBuilder, archiverManager, getLogger() );
 
         task.execute( archiver, configSource );
     }

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=999624&r1=999623&r2=999624&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 Tue Sep 21 20:40:03 2010
@@ -42,6 +42,7 @@ import org.apache.maven.plugin.assembly.
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.codehaus.plexus.archiver.Archiver;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -72,6 +73,9 @@ public class ModuleSetAssemblyPhase
     @Requirement
     private MavenProjectBuilder projectBuilder;
 
+    @Requirement
+    private ArchiverManager archiverManager;
+
     public ModuleSetAssemblyPhase()
     {
         // needed for plexus
@@ -248,7 +252,7 @@ public class ModuleSetAssemblyPhase
 
                 final AddDependencySetsTask task =
                     new AddDependencySetsTask( depSets, context.getResolvedArtifacts(), moduleProject, projectBuilder,
-                                               getLogger() );
+                                               archiverManager, getLogger() );
 
                 task.setModuleProject( moduleProject );
                 task.setModuleArtifact( chosenModuleArtifacts.get( moduleProject ) );

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=999624&r1=999623&r2=999624&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 Tue Sep 21 20:40:03 2010
@@ -27,6 +27,7 @@ import org.apache.maven.plugin.assembly.
 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
 import org.apache.maven.plugin.assembly.model.DependencySet;
+import org.apache.maven.plugin.assembly.model.FileSet;
 import org.apache.maven.plugin.assembly.model.UnpackOptions;
 import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils;
 import org.apache.maven.plugin.assembly.utils.FilterUtils;
@@ -37,6 +38,9 @@ import org.apache.maven.project.ProjectB
 import org.apache.maven.shared.artifact.filter.ScopeArtifactFilter;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
+import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
 import org.codehaus.plexus.logging.Logger;
 
 import java.io.File;
@@ -83,14 +87,17 @@ public class AddDependencySetsTask
 
     private final Set<Artifact> resolvedArtifacts;
 
+    private final ArchiverManager archiverManager;
+
     public AddDependencySetsTask( final List<DependencySet> dependencySets, final Set<Artifact> resolvedArtifacts,
                                   final MavenProject project, final MavenProjectBuilder projectBuilder,
-                                  final Logger logger )
+                                  final ArchiverManager archiverManager, final Logger logger )
     {
         this.dependencySets = dependencySets;
         this.resolvedArtifacts = resolvedArtifacts;
         this.project = project;
         this.projectBuilder = projectBuilder;
+        this.archiverManager = archiverManager;
         this.logger = logger;
     }
 
@@ -132,6 +139,13 @@ public class AddDependencySetsTask
 
         final Set<Artifact> dependencyArtifacts = resolveDependencyArtifacts( dependencySet );
 
+        boolean filterContents = false;
+        final UnpackOptions opts = dependencySet.getUnpackOptions();
+        if ( dependencySet.isUnpack() && opts != null && ( opts.isFiltered() || opts.getLineEnding() != null ) )
+        {
+            filterContents = true;
+        }
+
         logger.debug( "Adding " + dependencyArtifacts.size() + " dependency artifacts." );
 
         for ( final Iterator<Artifact> j = dependencyArtifacts.iterator(); j.hasNext(); )
@@ -159,38 +173,155 @@ public class AddDependencySetsTask
             }
             else
             {
-                final AddArtifactTask task = new AddArtifactTask( depArtifact, logger );
-
-                task.setProject( depProject );
-                task.setModuleProject( moduleProject );
-                task.setModuleArtifact( moduleArtifact );
-                task.setOutputDirectory( dependencySet.getOutputDirectory(), defaultOutputDirectory );
-                task.setFileNameMapping( dependencySet.getOutputFileNameMapping(), defaultOutputFileNameMapping );
-
-                final int dirMode = TypeConversionUtils.modeToInt( dependencySet.getDirectoryMode(), logger );
-                if ( dirMode != -1 )
+                if ( filterContents )
                 {
-                    task.setDirectoryMode( dirMode );
+                    addFilteredUnpackedArtifact( dependencySet, depArtifact, depProject, archiver, configSource );
                 }
-
-                final int fileMode = TypeConversionUtils.modeToInt( dependencySet.getFileMode(), logger );
-                if ( fileMode != -1 )
+                else
                 {
-                    task.setFileMode( fileMode );
+                    addNormalArtifact( dependencySet, depArtifact, depProject, archiver, configSource );
                 }
+            }
+        }
+    }
 
-                task.setUnpack( dependencySet.isUnpack() );
+    private void addFilteredUnpackedArtifact( final DependencySet dependencySet, final Artifact depArtifact,
+                                              final MavenProject depProject, final Archiver archiver,
+                                              final AssemblerConfigurationSource configSource )
+        throws ArchiveCreationException, AssemblyFormattingException
+    {
+        logger.debug( "Adding dependency artifact" + depArtifact.getId() + " after filtering the unpacked contents." );
 
-                final UnpackOptions opts = dependencySet.getUnpackOptions();
-                if ( dependencySet.isUnpack() && ( opts != null ) )
-                {
-                    task.setIncludes( opts.getIncludes() );
-                    task.setExcludes( opts.getExcludes() );
-                }
+        final StringBuilder sb = new StringBuilder().append( depArtifact.getGroupId() )
+                                                    .append( "_" )
+                                                    .append( depArtifact.getArtifactId() )
+                                                    .append( "_" )
+                                                    .append( depArtifact.getVersion() );
+
+        final String classifier = depArtifact.getClassifier();
+        if ( classifier != null )
+        {
+            sb.append( "_" )
+              .append( classifier );
+        }
 
-                task.execute( archiver, configSource );
+        sb.append( "." )
+          .append( depArtifact.getType() );
+
+        final File dir = new File( configSource.getWorkingDirectory(), sb.toString() );
+        if ( dir.exists() )
+        {
+            logger.debug( "NOT unpacking: " + depArtifact.getId() + ". Directory already exists in workdir:\n\t"
+                            + dir.getAbsolutePath() );
+        }
+        else
+        {
+            dir.mkdirs();
+
+            UnArchiver unarchiver;
+            try
+            {
+                unarchiver = archiverManager.getUnArchiver( depArtifact.getFile() );
+            }
+            catch ( final NoSuchArchiverException e )
+            {
+                throw new ArchiveCreationException( "Failed to retrieve un-archiver for: " + depArtifact.getId()
+                                + ". Dependency filtering cannot proceed.", e );
+            }
+
+            unarchiver.setDestDirectory( dir );
+            unarchiver.setOverwrite( true );
+            unarchiver.setSourceFile( depArtifact.getFile() );
+            try
+            {
+                unarchiver.extract();
+            }
+            catch ( final ArchiverException e )
+            {
+                throw new ArchiveCreationException( "Failed to unpack dependency archive: " + depArtifact.getId()
+                                + ". Dependency filtering cannot proceed.", e );
             }
         }
+
+        final UnpackOptions opts = dependencySet.getUnpackOptions();
+
+        final FileSet fs = new FileSet();
+        fs.setDirectory( dir.getAbsolutePath() );
+        fs.setDirectoryMode( dependencySet.getDirectoryMode() );
+        fs.setExcludes( opts.getExcludes() );
+        fs.setFileMode( dependencySet.getFileMode() );
+        fs.setFiltered( opts.isFiltered() );
+        fs.setIncludes( opts.getIncludes() );
+
+        String outDir = dependencySet.getOutputDirectory();
+        if ( outDir == null )
+        {
+            outDir = defaultOutputDirectory;
+        }
+
+        String filenameMapping = dependencySet.getOutputFileNameMapping();
+        if ( filenameMapping == null )
+        {
+            filenameMapping = defaultOutputFileNameMapping;
+        }
+
+        filenameMapping =
+            AssemblyFormatUtils.evaluateFileNameMapping( filenameMapping, depArtifact, configSource.getProject(),
+                                                         moduleProject, moduleArtifact, depProject, configSource );
+
+        final String outputLocation = new File( outDir, filenameMapping ).getPath();
+
+        fs.setOutputDirectory( outputLocation );
+
+        fs.setLineEnding( opts.getLineEnding() );
+        fs.setUseDefaultExcludes( opts.isUseDefaultExcludes() );
+        fs.setUseStrictFiltering( opts.isUseStrictFiltering() );
+
+        final AddFileSetsTask task = new AddFileSetsTask( fs );
+        task.setProject( depProject );
+        task.setModuleProject( moduleProject );
+        task.setLogger( logger );
+
+        task.execute( archiver, configSource );
+    }
+
+    private void addNormalArtifact( final DependencySet dependencySet, final Artifact depArtifact,
+                                    final MavenProject depProject, final Archiver archiver,
+                                    final AssemblerConfigurationSource configSource )
+        throws AssemblyFormattingException, ArchiveCreationException
+    {
+        logger.debug( "Adding dependency artifact" + depArtifact.getId() + "." );
+
+        final AddArtifactTask task = new AddArtifactTask( depArtifact, logger );
+
+        task.setProject( depProject );
+        task.setModuleProject( moduleProject );
+        task.setModuleArtifact( moduleArtifact );
+        task.setOutputDirectory( dependencySet.getOutputDirectory(), defaultOutputDirectory );
+        task.setFileNameMapping( dependencySet.getOutputFileNameMapping(), defaultOutputFileNameMapping );
+
+        final int dirMode = TypeConversionUtils.modeToInt( dependencySet.getDirectoryMode(), logger );
+        if ( dirMode != -1 )
+        {
+            task.setDirectoryMode( dirMode );
+        }
+
+        final int fileMode = TypeConversionUtils.modeToInt( dependencySet.getFileMode(), logger );
+        if ( fileMode != -1 )
+        {
+            task.setFileMode( fileMode );
+        }
+
+        task.setUnpack( dependencySet.isUnpack() );
+
+        final UnpackOptions opts = dependencySet.getUnpackOptions();
+        if ( dependencySet.isUnpack() && ( opts != null ) )
+        {
+            task.setIncludes( opts.getIncludes() );
+            task.setExcludes( opts.getExcludes() );
+        }
+
+        task.execute( archiver, configSource );
     }
 
     private MavenProject buildProjectStub( final Artifact depArtifact )

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=999624&r1=999623&r2=999624&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 Tue Sep 21 20:40:03 2010
@@ -33,6 +33,8 @@ import org.codehaus.plexus.logging.conso
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 
@@ -56,6 +58,11 @@ public class AddFileSetsTask
         this.fileSets = fileSets;
     }
 
+    public AddFileSetsTask( final FileSet... fileSets )
+    {
+        this.fileSets = new ArrayList<FileSet>( Arrays.asList( fileSets ) );
+    }
+
     public void execute( final Archiver archiver, final AssemblerConfigurationSource configSource )
         throws ArchiveCreationException, AssemblyFormattingException
     {

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/component.mdo
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/component.mdo?rev=999624&r1=999623&r2=999624&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/component.mdo (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/component.mdo Tue Sep 21 20:40:03 2010
@@ -581,6 +581,47 @@
           <defaultValue>false</defaultValue>
           <type>boolean</type>
         </field>
+        <field>
+          <name>lineEnding</name>
+          <version>1.1.2+</version>
+          <type>String</type>
+          <description>
+            <![CDATA[
+            Sets the line-endings of the files.
+            Valid values:
+            <ul>
+              <li><b>"keep"</b> - Preserve all line endings</li>
+              <li><b>"unix"</b> - Use Unix-style line endings</li>
+              <li><b>"lf"</b> - Use a single line-feed line endings</li>
+              <li><b>"dos"</b> - Use DOS-style line endings</li>
+              <li><b>"crlf"</b> - Use Carraige-return, line-feed line endings</li>
+            </ul>
+            ]]>
+          </description>
+        </field>
+        <field>
+          <name>useStrictFiltering</name>
+          <version>1.1.2+</version>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+          <description>
+          When specified as true, any include/exclude patterns which aren't used to filter an actual
+          artifact during assembly creation will cause the build to fail with an error. This is meant
+          to highlight obsolete inclusions or exclusions, or else signal that the assembly descriptor
+          is incorrectly configured. (Since 2.2)
+          </description>
+        </field>
+        <field>
+          <name>useDefaultExcludes</name>
+          <version>1.1.2+</version>
+          <type>boolean</type>
+          <defaultValue>true</defaultValue>
+          <description>
+            Whether standard exclusion patterns, such as those matching CVS and Subversion
+            metadata files, should be used when calculating the files affected by this set.
+            For backward compatibility, the default value is true. (Since 2.2)
+          </description>
+        </field>
       </fields>
     </class>
     <class>

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo?rev=999624&r1=999623&r2=999624&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo Tue Sep 21 20:40:03 2010
@@ -972,6 +972,47 @@
           <defaultValue>false</defaultValue>
           <type>boolean</type>
         </field>
+        <field>
+          <name>lineEnding</name>
+          <version>1.1.2+</version>
+          <type>String</type>
+          <description>
+            <![CDATA[
+            Sets the line-endings of the files.
+            Valid values:
+            <ul>
+              <li><b>"keep"</b> - Preserve all line endings</li>
+              <li><b>"unix"</b> - Use Unix-style line endings</li>
+              <li><b>"lf"</b> - Use a single line-feed line endings</li>
+              <li><b>"dos"</b> - Use DOS-style line endings</li>
+              <li><b>"crlf"</b> - Use Carraige-return, line-feed line endings</li>
+            </ul>
+            ]]>
+          </description>
+        </field>
+        <field>
+          <name>useStrictFiltering</name>
+          <version>1.1.2+</version>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+          <description>
+          When specified as true, any include/exclude patterns which aren't used to filter an actual
+          artifact during assembly creation will cause the build to fail with an error. This is meant
+          to highlight obsolete inclusions or exclusions, or else signal that the assembly descriptor
+          is incorrectly configured. (Since 2.2)
+          </description>
+        </field>
+        <field>
+          <name>useDefaultExcludes</name>
+          <version>1.1.2+</version>
+          <type>boolean</type>
+          <defaultValue>true</defaultValue>
+          <description>
+            Whether standard exclusion patterns, such as those matching CVS and Subversion
+            metadata files, should be used when calculating the files affected by this set.
+            For backward compatibility, the default value is true. (Since 2.2)
+          </description>
+        </field>
       </fields>
     </class>
     <class>

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java?rev=999624&r1=999623&r2=999624&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java Tue Sep 21 20:40:03 2010
@@ -110,7 +110,7 @@ public class AddDependencySetsTaskTest
         final AddDependencySetsTask task =
             new AddDependencySetsTask( Collections.singletonList( ds ),
                                        Collections.singleton( depArtifactMock.getArtifact() ), depProject,
-                                       macTask.projectBuilder, logger );
+                                       macTask.projectBuilder, macTask.archiverManager, logger );
 
         task.addDependencySet( ds, macTask.archiver, macTask.configSource );
 
@@ -132,7 +132,8 @@ public class AddDependencySetsTaskTest
         final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
 
         final AddDependencySetsTask task =
-            new AddDependencySetsTask( Collections.singletonList( ds ), null, project, macTask.projectBuilder, logger );
+            new AddDependencySetsTask( Collections.singletonList( ds ), null, project, macTask.projectBuilder,
+                                       macTask.archiverManager, logger );
 
         task.addDependencySet( ds, null, macTask.configSource );
 
@@ -181,7 +182,7 @@ public class AddDependencySetsTaskTest
 
         final AddDependencySetsTask task =
             new AddDependencySetsTask( Collections.singletonList( ds ), Collections.singleton( depMock.getArtifact() ),
-                                       project, macTask.projectBuilder, logger );
+                                       project, macTask.projectBuilder, macTask.archiverManager, logger );
 
         task.addDependencySet( ds, macTask.archiver, macTask.configSource );
 
@@ -249,7 +250,7 @@ public class AddDependencySetsTaskTest
         final AddDependencySetsTask task =
             new AddDependencySetsTask( Collections.singletonList( ds ),
                                        Collections.singleton( artifactMock.getArtifact() ), project,
-                                       macTask.projectBuilder, logger );
+                                       macTask.projectBuilder, macTask.archiverManager, logger );
 
         mockManager.replayAll();
 
@@ -278,7 +279,7 @@ public class AddDependencySetsTaskTest
         final AddDependencySetsTask task =
             new AddDependencySetsTask( Collections.singletonList( dependencySet ),
                                        Collections.singleton( artifactMock.getArtifact() ), project,
-                                       macTask.projectBuilder, logger );
+                                       macTask.projectBuilder, macTask.archiverManager, logger );
 
         final Set<Artifact> result = task.resolveDependencyArtifacts( dependencySet );
 
@@ -315,7 +316,8 @@ public class AddDependencySetsTaskTest
         mockManager.replayAll();
 
         final AddDependencySetsTask task =
-            new AddDependencySetsTask( Collections.singletonList( dependencySet ), artifacts, project, null, logger );
+            new AddDependencySetsTask( Collections.singletonList( dependencySet ), artifacts, project, null, null,
+                                       logger );
 
         final Set<Artifact> result = task.resolveDependencyArtifacts( dependencySet );
 
@@ -350,7 +352,8 @@ public class AddDependencySetsTaskTest
         mockManager.replayAll();
 
         final AddDependencySetsTask task =
-            new AddDependencySetsTask( Collections.singletonList( dependencySet ), artifacts, project, null, logger );
+            new AddDependencySetsTask( Collections.singletonList( dependencySet ), artifacts, project, null, null,
+                                       logger );
 
         final Set<Artifact> result = task.resolveDependencyArtifacts( dependencySet );
 

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java?rev=999624&r1=999623&r2=999624&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java Tue Sep 21 20:40:03 2010
@@ -28,6 +28,7 @@ import org.apache.maven.project.MavenPro
 import org.apache.maven.project.ProjectBuildingException;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.easymock.MockControl;
 
 import java.io.File;
@@ -50,6 +51,10 @@ public class MockAndControlForAddDepende
 
     public MavenProjectBuilder projectBuilder;
 
+    public MockControl archiverManagerCtl;
+
+    public ArchiverManager archiverManager;
+
     public MockControl projectBuilderCtl;
 
     private final MavenProject project;
@@ -78,6 +83,11 @@ public class MockAndControlForAddDepende
 
         projectBuilder = (MavenProjectBuilder) projectBuilderCtl.getMock();
 
+        archiverManagerCtl = MockControl.createControl( ArchiverManager.class );
+        mockManager.add( archiverManagerCtl );
+
+        archiverManager = (ArchiverManager) archiverManagerCtl.getMock();
+
         enableDefaultExpectations();
     }