You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/07/14 05:30:34 UTC

svn commit: r556215 - in /maven/plugins/trunk/maven-assembly-plugin/src: main/java/org/apache/maven/plugin/assembly/archive/ main/java/org/apache/maven/plugin/assembly/archive/archiver/ main/java/org/apache/maven/plugin/assembly/filter/ main/mdo/ main/...

Author: jdcasey
Date: Fri Jul 13 20:30:33 2007
New Revision: 556215

URL: http://svn.apache.org/viewvc?view=rev&rev=556215
Log:
Adding the ability to specify descriptor aggregators, similar to the one for components.xml, to process other files.

Added:
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ContainerDescriptorHandler.java   (with props)
Modified:
    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/archiver/PrefixedArchivedFileSet.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedFileSet.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixingProxyArchiver.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilter.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo
    maven/plugins/trunk/maven-assembly-plugin/src/main/resources/META-INF/plexus/components.xml
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java

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?view=diff&rev=556215&r1=556214&r2=556215
==============================================================================
--- 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 Fri Jul 13 20:30:33 2007
@@ -5,27 +5,37 @@
 import org.apache.maven.plugin.assembly.archive.archiver.PrefixingProxyArchiver;
 import org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase;
 import org.apache.maven.plugin.assembly.filter.ComponentsXmlArchiverFileFilter;
+import org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
 import org.apache.maven.plugin.assembly.model.Assembly;
+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.codehaus.plexus.archiver.ArchiveFileFilter;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.PlexusContainerException;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
-import org.codehaus.plexus.archiver.FilterEnabled;
-import org.codehaus.plexus.archiver.FinalizerEnabled;
-import org.codehaus.plexus.archiver.filters.JarSecurityFileFilter;
+import org.codehaus.plexus.archiver.filters.JarSecurityFileSelector;
 import org.codehaus.plexus.archiver.jar.JarArchiver;
 import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
 import org.codehaus.plexus.archiver.tar.TarArchiver;
 import org.codehaus.plexus.archiver.tar.TarLongFileMode;
 import org.codehaus.plexus.archiver.war.WarArchiver;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.configuration.PlexusConfigurationResourceException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 import java.io.File;
 import java.io.IOException;
+import java.io.StringReader;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
@@ -34,11 +44,9 @@
  */
 public class DefaultAssemblyArchiver
     extends AbstractLogEnabled
-    implements AssemblyArchiver
+    implements AssemblyArchiver, Contextualizable
 {
 
-    private static final ArchiveFileFilter JAR_SECURITY_FILE_FILTER = new JarSecurityFileFilter();
-
     /**
      * @plexus.requirement
      */
@@ -49,15 +57,18 @@
      */
     private List assemblyPhases;
 
+    private PlexusContainer container;
+
     public DefaultAssemblyArchiver()
     {
         // needed for plexus
     }
 
     // introduced for testing.
-    public DefaultAssemblyArchiver( ArchiverManager archiverManager, List assemblyPhases )
+    public DefaultAssemblyArchiver( ArchiverManager archiverManager, PlexusContainer container, List assemblyPhases )
     {
         this.archiverManager = archiverManager;
+        this.container = container;
         this.assemblyPhases = assemblyPhases;
     }
 
@@ -69,8 +80,6 @@
 
         AssemblyFileUtils.verifyTempDirectoryAvailability( configSource.getTemporaryRootDirectory(), getLogger() );
 
-        ComponentsXmlArchiverFileFilter componentsXmlFilter = new ComponentsXmlArchiverFileFilter();
-
         File outputDirectory = configSource.getOutputDirectory();
 
         File destFile = new File( outputDirectory, filename );
@@ -88,8 +97,10 @@
                                                                   finalName );
             }
 
+            List containerHandlers = createContainerDescriptorHandlers( assembly.getContainerDescriptorHandlers() );
+
             Archiver archiver = createArchiver( format, assembly.isIncludeBaseDirectory(), basedir, configSource,
-                                                componentsXmlFilter );
+                                                containerHandlers );
 
             for ( Iterator phaseIterator = assemblyPhases.iterator(); phaseIterator.hasNext(); )
             {
@@ -118,6 +129,74 @@
         return destFile;
     }
 
+    private List createContainerDescriptorHandlers( List containerDescriptorHandlers )
+        throws InvalidAssemblerConfigurationException
+    {
+        if ( containerDescriptorHandlers == null )
+        {
+            containerDescriptorHandlers = new ArrayList();
+        }
+
+        List handlers = new ArrayList();
+        boolean foundPlexus = false;
+
+        for ( Iterator it = containerDescriptorHandlers.iterator(); it.hasNext(); )
+        {
+            ContainerDescriptorHandlerConfig config = (ContainerDescriptorHandlerConfig) it.next();
+
+            String hint = config.getHandlerName();
+            ContainerDescriptorHandler handler;
+
+            // TODO: There MUST BE a better way that this, but I kept running into
+            // incompatible ClassRealm class definitions...so, I give up.
+            DefaultPlexusContainer handlerContainer = new DefaultPlexusContainer();
+            handlerContainer.setParentPlexusContainer( container );
+
+            Object conf = config.getConfiguration();
+            if ( conf != null )
+            {
+                StringReader reader = new StringReader( String.valueOf( conf ) );
+
+                try
+                {
+                    handlerContainer.setConfigurationResource( reader );
+                    handlerContainer.initialize();
+                }
+                catch ( PlexusConfigurationResourceException e )
+                {
+                    throw new InvalidAssemblerConfigurationException( "containerDescriptorHandler: " + hint + " could not be loaded.", e );
+                }
+                catch ( PlexusContainerException e )
+                {
+                    throw new InvalidAssemblerConfigurationException( "containerDescriptorHandler: " + hint + " could not be loaded.", e );
+                }
+            }
+
+            try
+            {
+                handler = (ContainerDescriptorHandler) handlerContainer.lookup( ContainerDescriptorHandler.class.getName(), hint );
+            }
+            catch ( ComponentLookupException e )
+            {
+                throw new InvalidAssemblerConfigurationException( "containerDescriptorHandler: " + hint + " could not be loaded.", e );
+            }
+
+            handlers.add( handler );
+
+            if ( "plexus".equals( hint ) )
+            {
+                foundPlexus = true;
+            }
+        }
+
+        if ( !foundPlexus )
+        {
+            handlers.add( new ComponentsXmlArchiverFileFilter() );
+        }
+
+        return handlers;
+    }
+
     /**
      * Creates the necessary archiver to build the distribution file.
      *
@@ -133,7 +212,7 @@
      */
     protected Archiver createArchiver( String format, boolean includeBaseDir, String finalName,
                                        AssemblerConfigurationSource configSource,
-                                       ComponentsXmlArchiverFileFilter componentsXmlFilter )
+                                       List containerHandlers )
         throws ArchiverException, NoSuchArchiverException
     {
         Archiver archiver;
@@ -150,58 +229,29 @@
             archiver = archiverManager.getArchiver( format );
         }
 
-        configureArchiverFilters( archiver, componentsXmlFilter );
-
-        configureArchiverFinalizers( archiver, format, configSource, componentsXmlFilter );
-
-        if ( includeBaseDir )
+        List extraSelectors = null;
+        if ( archiver instanceof JarArchiver )
         {
-            archiver = new PrefixingProxyArchiver( finalName, archiver );
+            extraSelectors = Collections.singletonList( new JarSecurityFileSelector() );
         }
 
-        return archiver;
-    }
-
-    protected void configureArchiverFinalizers( Archiver archiver, String format,
-                                                AssemblerConfigurationSource configSource,
-                                                ComponentsXmlArchiverFileFilter componentsXmlFilter )
-    {
-        if ( archiver instanceof FinalizerEnabled )
+        List extraFinalizers = null;
+        if ( "jar".equals( format ) )
         {
-            List finalizers = new ArrayList();
-
-            finalizers.add( componentsXmlFilter );
-
-            if ( "jar".equals( format ) )
-            {
-                finalizers.add( new ManifestCreationFinalizer( configSource.getProject(), configSource
-                    .getJarArchiveConfiguration() ) );
-            }
-
-            ( (FinalizerEnabled) archiver ).setArchiveFinalizers( finalizers );
+            extraFinalizers = Collections.singletonList( new ManifestCreationFinalizer( configSource.getProject(),
+                                                                                        configSource.getJarArchiveConfiguration() ) );
 
         }
-    }
 
-    protected void configureArchiverFilters( Archiver archiver, ComponentsXmlArchiverFileFilter componentsXmlFilter )
-    {
-        /*
-         * If the assembly is 'jar-with-dependencies', remove the security files in all dependencies that will prevent
-         * the uberjar to execute. Please see MASSEMBLY-64 for details.
-         */
-        if ( archiver instanceof FilterEnabled )
+        String prefix = "";
+        if ( includeBaseDir )
         {
-            List filters = new ArrayList();
-
-            filters.add( componentsXmlFilter );
+            prefix = finalName;
+        }
 
-            if ( archiver instanceof JarArchiver )
-            {
-                filters.add( JAR_SECURITY_FILE_FILTER );
-            }
+        archiver = new PrefixingProxyArchiver( prefix, archiver, containerHandlers, extraSelectors, extraFinalizers );
 
-            ( (FilterEnabled) archiver ).setArchiveFilters( filters );
-        }
+        return archiver;
     }
 
     protected Archiver createWarArchiver()
@@ -249,6 +299,12 @@
         tarArchiver.setLongfile( tarFileMode );
 
         return tarArchiver;
+    }
+
+    public void contextualize( Context context )
+        throws ContextException
+    {
+        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
 
 }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedArchivedFileSet.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedArchivedFileSet.java?view=diff&rev=556215&r1=556214&r2=556215
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedArchivedFileSet.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedArchivedFileSet.java Fri Jul 13 20:30:33 2007
@@ -11,10 +11,12 @@
 
     private final String rootPrefix;
     private final ArchivedFileSet fileSet;
+    private final FileSelector[] selectors;
 
-    public PrefixedArchivedFileSet( ArchivedFileSet fileSet, String rootPrefix )
+    public PrefixedArchivedFileSet( ArchivedFileSet fileSet, String rootPrefix, FileSelector[] selectors )
     {
         this.fileSet = fileSet;
+        this.selectors = selectors;
 
         if ( ! rootPrefix.endsWith( "/" ) )
         {
@@ -38,7 +40,22 @@
 
     public FileSelector[] getFileSelectors()
     {
-        return fileSet.getFileSelectors();
+        FileSelector[] sel = fileSet.getFileSelectors();
+        if ( ( sel != null ) && ( selectors != null ) )
+        {
+            FileSelector[] temp = new FileSelector[ sel.length + selectors.length ];
+
+            System.arraycopy( sel, 0, temp, 0, sel.length );
+            System.arraycopy( selectors, 0, temp, sel.length, selectors.length );
+
+            sel = temp;
+        }
+        else if ( ( sel == null ) && ( selectors != null ) )
+        {
+            sel = selectors;
+        }
+
+        return sel;
     }
 
     public String[] getIncludes()

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedFileSet.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedFileSet.java?view=diff&rev=556215&r1=556214&r2=556215
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedFileSet.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixedFileSet.java Fri Jul 13 20:30:33 2007
@@ -11,10 +11,12 @@
 
     private final String rootPrefix;
     private final FileSet fileSet;
+    private final FileSelector[] selectors;
 
-    public PrefixedFileSet( FileSet fileSet, String rootPrefix )
+    public PrefixedFileSet( FileSet fileSet, String rootPrefix, FileSelector[] selectors )
     {
         this.fileSet = fileSet;
+        this.selectors = selectors;
 
         if ( ! rootPrefix.endsWith( "/" ) )
         {
@@ -33,7 +35,22 @@
 
     public FileSelector[] getFileSelectors()
     {
-        return fileSet.getFileSelectors();
+        FileSelector[] sel = fileSet.getFileSelectors();
+        if ( ( sel != null ) && ( selectors != null ) )
+        {
+            FileSelector[] temp = new FileSelector[ sel.length + selectors.length ];
+
+            System.arraycopy( sel, 0, temp, 0, sel.length );
+            System.arraycopy( selectors, 0, temp, sel.length, selectors.length );
+
+            sel = temp;
+        }
+        else if ( ( sel == null ) && ( selectors != null ) )
+        {
+            sel = selectors;
+        }
+
+        return sel;
     }
 
     public String[] getIncludes()

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixingProxyArchiver.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixingProxyArchiver.java?view=diff&rev=556215&r1=556214&r2=556215
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixingProxyArchiver.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/archiver/PrefixingProxyArchiver.java Fri Jul 13 20:30:33 2007
@@ -1,12 +1,24 @@
 package org.apache.maven.plugin.assembly.archive.archiver;
 
+import org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler;
+import org.codehaus.plexus.archiver.ArchiveFinalizer;
 import org.codehaus.plexus.archiver.ArchivedFileSet;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.archiver.FileSet;
+import org.codehaus.plexus.archiver.FinalizerEnabled;
+import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet;
+import org.codehaus.plexus.archiver.util.DefaultFileSet;
+import org.codehaus.plexus.components.io.fileselectors.FileInfo;
+import org.codehaus.plexus.components.io.fileselectors.FileSelector;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
 public class PrefixingProxyArchiver
@@ -14,77 +26,184 @@
 {
 
     private Archiver delegate;
+
     private String rootPrefix;
 
-    public PrefixingProxyArchiver( String rootPrefix, Archiver delegate )
+    private FileSelector[] selectors;
+
+    public PrefixingProxyArchiver( String rootPrefix, Archiver delegate, List containerDescriptorHandlers,
+                                   List extraSelectors, List extraFinalizers )
     {
         this.rootPrefix = rootPrefix;
         this.delegate = delegate;
 
-        if ( !rootPrefix.endsWith( "/" ) )
+        if ( !"".equals( rootPrefix ) && !rootPrefix.endsWith( "/" ) )
         {
             this.rootPrefix += "/";
         }
+
+        List selectors = new ArrayList();
+
+        boolean isFinalizerEnabled = ( delegate instanceof FinalizerEnabled );
+
+        if ( containerDescriptorHandlers != null )
+        {
+            for ( Iterator it = containerDescriptorHandlers.iterator(); it.hasNext(); )
+            {
+                ContainerDescriptorHandler handler = (ContainerDescriptorHandler) it.next();
+
+                selectors.add( handler );
+
+                if ( isFinalizerEnabled )
+                {
+                    ( (FinalizerEnabled) delegate ).addArchiveFinalizer( handler );
+                }
+            }
+        }
+
+        if ( extraSelectors != null )
+        {
+            for ( Iterator it = extraSelectors.iterator(); it.hasNext(); )
+            {
+                FileSelector selector = (FileSelector) it.next();
+                selectors.add( selector );
+            }
+        }
+
+        if ( ( extraFinalizers != null ) && isFinalizerEnabled )
+        {
+            for ( Iterator it = extraFinalizers.iterator(); it.hasNext(); )
+            {
+                ( (FinalizerEnabled) delegate ).addArchiveFinalizer( (ArchiveFinalizer) it.next() );
+            }
+        }
+
+        if ( !selectors.isEmpty() )
+        {
+            this.selectors = (FileSelector[]) selectors.toArray( new FileSelector[0] );
+        }
     }
 
     public void addArchivedFileSet( File archiveFile, String prefix, String[] includes, String[] excludes )
         throws ArchiverException
     {
-        delegate.addArchivedFileSet( archiveFile, rootPrefix + prefix, includes, excludes );
+        DefaultArchivedFileSet fs = new DefaultArchivedFileSet();
+
+        fs.setArchive( archiveFile );
+        fs.setIncludes( includes );
+        fs.setExcludes( excludes );
+        fs.setPrefix( rootPrefix + prefix );
+        fs.setFileSelectors( selectors );
+
+        delegate.addArchivedFileSet( fs );
     }
 
     public void addArchivedFileSet( File archiveFile, String prefix )
         throws ArchiverException
     {
-        delegate.addArchivedFileSet( archiveFile, rootPrefix + prefix );
+        DefaultArchivedFileSet fs = new DefaultArchivedFileSet();
+
+        fs.setArchive( archiveFile );
+        fs.setPrefix( rootPrefix + prefix );
+        fs.setFileSelectors( selectors );
+
+        delegate.addArchivedFileSet( fs );
     }
 
     public void addArchivedFileSet( File archiveFile, String[] includes, String[] excludes )
         throws ArchiverException
     {
-        delegate.addArchivedFileSet( archiveFile, rootPrefix, includes, excludes );
+        DefaultArchivedFileSet fs = new DefaultArchivedFileSet();
+
+        fs.setArchive( archiveFile );
+        fs.setIncludes( includes );
+        fs.setExcludes( excludes );
+        fs.setPrefix( rootPrefix );
+        fs.setFileSelectors( selectors );
+
+        delegate.addArchivedFileSet( fs );
     }
 
     public void addArchivedFileSet( File archiveFile )
         throws ArchiverException
     {
-        delegate.addArchivedFileSet( archiveFile, rootPrefix );
+        DefaultArchivedFileSet fs = new DefaultArchivedFileSet();
+
+        fs.setArchive( archiveFile );
+        fs.setPrefix( rootPrefix );
+        fs.setFileSelectors( selectors );
+
+        delegate.addArchivedFileSet( fs );
     }
 
     public void addDirectory( File directory, String prefix, String[] includes, String[] excludes )
         throws ArchiverException
     {
-        delegate.addDirectory( directory, rootPrefix + prefix, includes, excludes );
+        DefaultFileSet fs = new DefaultFileSet();
+
+        fs.setDirectory( directory );
+        fs.setIncludes( includes );
+        fs.setExcludes( excludes );
+        fs.setPrefix( rootPrefix + prefix );
+        fs.setFileSelectors( selectors );
+
+        delegate.addFileSet( fs );
     }
 
     public void addDirectory( File directory, String prefix )
         throws ArchiverException
     {
-        delegate.addDirectory( directory, rootPrefix + prefix );
+        DefaultFileSet fs = new DefaultFileSet();
+
+        fs.setDirectory( directory );
+        fs.setPrefix( rootPrefix + prefix );
+        fs.setFileSelectors( selectors );
+
+        delegate.addFileSet( fs );
     }
 
     public void addDirectory( File directory, String[] includes, String[] excludes )
         throws ArchiverException
     {
-        delegate.addDirectory( directory, rootPrefix, includes, excludes );
+        DefaultFileSet fs = new DefaultFileSet();
+
+        fs.setDirectory( directory );
+        fs.setIncludes( includes );
+        fs.setExcludes( excludes );
+        fs.setPrefix( rootPrefix );
+        fs.setFileSelectors( selectors );
+
+        delegate.addFileSet( fs );
     }
 
     public void addDirectory( File directory )
         throws ArchiverException
     {
-        delegate.addDirectory( directory, rootPrefix );
+        DefaultFileSet fs = new DefaultFileSet();
+
+        fs.setDirectory( directory );
+        fs.setPrefix( rootPrefix );
+        fs.setFileSelectors( selectors );
+
+        delegate.addFileSet( fs );
     }
 
     public void addFile( File inputFile, String destFileName, int permissions )
         throws ArchiverException
     {
-        delegate.addFile( inputFile, rootPrefix + destFileName, permissions );
+        if ( acceptFile( inputFile ) )
+        {
+            delegate.addFile( inputFile, rootPrefix + destFileName, permissions );
+        }
     }
 
     public void addFile( File inputFile, String destFileName )
         throws ArchiverException
     {
-        delegate.addFile( inputFile, rootPrefix + destFileName );
+        if ( acceptFile( inputFile ) )
+        {
+            delegate.addFile( inputFile, rootPrefix + destFileName );
+        }
     }
 
     public void createArchive()
@@ -161,13 +280,74 @@
     public void addArchivedFileSet( ArchivedFileSet fileSet )
         throws ArchiverException
     {
-        delegate.addArchivedFileSet( new PrefixedArchivedFileSet( fileSet, rootPrefix ) );
+        delegate.addArchivedFileSet( new PrefixedArchivedFileSet( fileSet, rootPrefix, selectors ) );
     }
 
     public void addFileSet( FileSet fileSet )
         throws ArchiverException
     {
-        delegate.addFileSet( fileSet );
+        delegate.addFileSet( new PrefixedFileSet( fileSet, rootPrefix, selectors ) );
+    }
+
+    private boolean acceptFile( File inputFile )
+        throws ArchiverException
+    {
+        if ( selectors != null )
+        {
+            FileInfo fileInfo = new DefaultFileInfo( inputFile );
+
+            for ( int i = 0; i < selectors.length; i++ )
+            {
+                try
+                {
+                    if ( !selectors[i].isSelected( fileInfo ) )
+                    {
+                        return false;
+                    }
+                }
+                catch ( IOException e )
+                {
+                    throw new ArchiverException( "Error processing file: " + inputFile + " using selector: "
+                                                 + selectors[i], e );
+                }
+            }
+        }
+
+        return true;
+    }
+
+    private static final class DefaultFileInfo
+        implements FileInfo
+    {
+
+        private final File inputFile;
+
+        DefaultFileInfo( File inputFile )
+        {
+            this.inputFile = inputFile;
+        }
+
+        public InputStream getContents()
+            throws IOException
+        {
+            return new FileInputStream( inputFile );
+        }
+
+        public String getName()
+        {
+            return inputFile.getName();
+        }
+
+        public boolean isDirectory()
+        {
+            return inputFile.isDirectory();
+        }
+
+        public boolean isFile()
+        {
+            return inputFile.isFile();
+        }
+
     }
 
 }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilter.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilter.java?view=diff&rev=556215&r1=556214&r2=556215
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilter.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ComponentsXmlArchiverFileFilter.java Fri Jul 13 20:30:33 2007
@@ -16,6 +16,17 @@
  * limitations under the License.
  */
 
+import org.codehaus.plexus.archiver.ArchiveFilterException;
+import org.codehaus.plexus.archiver.Archiver;
+import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.components.io.fileselectors.FileInfo;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.Xpp3DomWriter;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -28,27 +39,13 @@
 import java.util.List;
 import java.util.Map;
 
-import org.codehaus.plexus.archiver.AbstractArchiveFinalizer;
-import org.codehaus.plexus.archiver.ArchiveFileFilter;
-import org.codehaus.plexus.archiver.ArchiveFilterException;
-import org.codehaus.plexus.archiver.Archiver;
-import org.codehaus.plexus.archiver.ArchiverException;
-import org.codehaus.plexus.components.io.fileselectors.FileInfo;
-import org.codehaus.plexus.components.io.fileselectors.FileSelector;
-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
-import org.codehaus.plexus.util.xml.Xpp3DomWriter;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
 /**
  * Components XML file filter.
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */
 public class ComponentsXmlArchiverFileFilter
-    extends AbstractArchiveFinalizer
-    implements ArchiveFileFilter, FileSelector
+    implements ContainerDescriptorHandler
 {
     // [jdcasey] Switched visibility to protected to allow testing. Also, because this class isn't final, it should allow
     // some minimal access to the components accumulated for extending classes.
@@ -208,17 +205,29 @@
     public boolean isSelected( FileInfo fileInfo )
         throws IOException
     {
-        try
+        if ( fileInfo.isFile() )
         {
-            return isIncluded( fileInfo.getContents(), fileInfo.getName() );
+            try
+            {
+                return isIncluded( fileInfo.getContents(), fileInfo.getName() );
+            }
+            catch ( XmlPullParserException e )
+            {
+                IOException error = new IOException( "Error finalizing component-set for archive. Reason: " + e.getMessage() );
+                error.initCause( e );
+
+                throw error;
+            }
         }
-        catch ( XmlPullParserException e )
+        else
         {
-            IOException error = new IOException( "Error finalizing component-set for archive. Reason: " + e.getMessage() );
-            error.initCause( e );
-
-            throw error;
+            return false;
         }
+    }
+
+    public void finalizeArchiveExtraction( UnArchiver unarchiver )
+        throws ArchiverException
+    {
     }
 
 }

Added: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ContainerDescriptorHandler.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ContainerDescriptorHandler.java?view=auto&rev=556215
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ContainerDescriptorHandler.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/filter/ContainerDescriptorHandler.java Fri Jul 13 20:30:33 2007
@@ -0,0 +1,10 @@
+package org.apache.maven.plugin.assembly.filter;
+
+import org.codehaus.plexus.archiver.ArchiveFinalizer;
+import org.codehaus.plexus.components.io.fileselectors.FileSelector;
+
+public interface ContainerDescriptorHandler
+    extends ArchiveFinalizer, FileSelector
+{
+
+}

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

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

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?view=diff&rev=556215&r1=556214&r2=556215
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo Fri Jul 13 20:30:33 2007
@@ -98,7 +98,7 @@
               <li><b>"gz"</b> - Creates a GZIP format</li>
               <li><b>"tar"</b> - Creates a TAR format</li>
               <li><b>"tar.gz"</b> - Creates a gzip'd TAR format</li>
-              <li><b>"tar.bz2</b> - Creates a bzip'd TAR format</li>
+              <li><b>"tar.bz2"</b> - Creates a bzip'd TAR format</li>
             </ul>
             ]]>
           </description>
@@ -137,6 +137,20 @@
           </description>
         </field>
         <field>
+          <name>containerDescriptorHandlers</name>
+          <version>1.1.0</version>
+          <association>
+            <type>ContainerDescriptorHandlerConfig</type>
+            <multiplicity>*</multiplicity>
+          </association>
+          <description>
+            <![CDATA[
+            Set of components which filter various container descriptors out of
+            the normal archive stream, so they can be aggregated then added.
+            ]]>
+          </description>
+        </field>
+        <field>
           <name>moduleSets</name>
           <version>1.0.0+</version>
           <association>
@@ -921,6 +935,34 @@
           </description>
           <defaultValue>false</defaultValue>
           <type>boolean</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>ContainerDescriptorHandlerConfig</name>
+      <version>1.1.0</version>
+      <description>
+        Configures a filter for files headed into the assembly archive, to enable
+        aggregation of various types of descriptor fragments, such as components.xml,
+        web.xml, etc.
+      </description>
+      <fields>
+        <field>
+          <name>handlerName</name>
+          <version>1.1.0</version>
+          <description>
+            The handler's plexus role-hint, for lookup from the container.
+          </description>
+          <type>String</type>
+          <required>true</required>
+        </field>
+        <field>
+          <name>configuration</name>
+          <version>1.1.0</version>
+          <description>
+            Configuration options for the handler.
+          </description>
+          <type>DOM</type>
         </field>
       </fields>
     </class>

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=556215&r1=556214&r2=556215
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/resources/META-INF/plexus/components.xml Fri Jul 13 20:30:33 2007
@@ -25,5 +25,12 @@
       <implementation>org.codehaus.plexus.archiver.zip.ZipUnArchiver</implementation>
       <instantiation-strategy>per-lookup</instantiation-strategy>
     </component>
+    
+    <component>
+      <role>org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler</role>
+      <role-hint>plexus</role-hint>
+      <implementation>org.apache.maven.plugin.assembly.filter.ComponentsXmlArchiverFileFilter</implementation>
+      <instantiation-strategy>per-lookup</instantiation-strategy>
+    </component>
   </components>
 </component-set>

Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java?view=diff&rev=556215&r1=556214&r2=556215
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java Fri Jul 13 20:30:33 2007
@@ -1,20 +1,16 @@
 package org.apache.maven.plugin.assembly.archive;
 
-import org.apache.maven.archiver.MavenArchiveConfiguration;
-import org.apache.maven.model.Model;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase;
-import org.apache.maven.plugin.assembly.filter.ComponentsXmlArchiverFileFilter;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
 import org.apache.maven.plugin.assembly.model.Assembly;
 import org.apache.maven.plugin.assembly.testutils.MockManager;
 import org.apache.maven.plugin.assembly.testutils.TestFileManager;
-import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.archiver.ArchiveFinalizer;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
-import org.codehaus.plexus.archiver.FilterEnabled;
 import org.codehaus.plexus.archiver.FinalizerEnabled;
 import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
@@ -41,9 +37,9 @@
 public class DefaultAssemblyArchiverTest
     extends TestCase
 {
-    
+
     private TestFileManager fileManager = new TestFileManager( "def-assy-archiver.test.", "" );
-    
+
     public void tearDown() throws IOException
     {
         fileManager.cleanUp();
@@ -55,8 +51,8 @@
     {
         MockManager mm = new MockManager();
 
-        MockAndControlForArchiverManager macMgr = new MockAndControlForArchiverManager( mm );
-        
+        MockAndControlForAssemblyArchiver macMgr = new MockAndControlForAssemblyArchiver( mm );
+
         macMgr.expectGetArchiver( "zip", Archiver.class );
 
         MockControl phaseControl = MockControl.createControl( AssemblyArchiverPhase.class );
@@ -66,22 +62,22 @@
 
         phase.execute( null, null, null );
         phaseControl.setMatcher( MockControl.ALWAYS_MATCHER );
-        
+
         MockControl csControl = MockControl.createControl( AssemblerConfigurationSource.class );
         mm.add( csControl );
-        
+
         AssemblerConfigurationSource configSource = ( AssemblerConfigurationSource ) csControl.getMock();
-        
+
         File tempDir = fileManager.createTempDir();
         FileUtils.deleteDirectory( tempDir );
-        
+
         configSource.getTemporaryRootDirectory();
         csControl.setReturnValue( tempDir, MockControl.ZERO_OR_MORE );
-        
+
         File outDir = fileManager.createTempDir();
-        
+
         macMgr.archiver.setDestFile( new File( outDir, "full-name.zip" ) );
-        
+
         try
         {
             macMgr.archiver.createArchive();
@@ -94,21 +90,21 @@
         {
             fail( "Should never happen" );
         }
-        
+
         configSource.getOutputDirectory();
         csControl.setReturnValue( outDir );
-        
+
         configSource.getFinalName();
         csControl.setReturnValue( "finalName" );
-        
+
         Assembly assembly = new Assembly();
-        
+
         mm.replayAll();
-        
-        DefaultAssemblyArchiver subject = createSubject( macMgr.archiverManager, Collections.singletonList( phase ), null );
-        
+
+        DefaultAssemblyArchiver subject = createSubject( macMgr, Collections.singletonList( phase ), null );
+
         subject.createArchive( assembly, "full-name", "zip", configSource );
-        
+
         mm.verifyAll();
     }
 
@@ -119,26 +115,24 @@
 
         TestTarArchiver ttArchiver = new TestTarArchiver();
 
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+        MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm );
 
         macArchiverManager.expectGetArchiver( "tar", ttArchiver );
-        
+
         MockControl configCtl = MockControl.createControl( AssemblerConfigurationSource.class );
         AssemblerConfigurationSource configSource = (AssemblerConfigurationSource) configCtl.getMock();
-        
+
         configSource.getTarLongFileMode();
         configCtl.setReturnValue( TarLongFileMode.FAIL, MockControl.ZERO_OR_MORE );
-        
-        mm.add( configCtl );
 
-        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
+        mm.add( configCtl );
 
         mm.replayAll();
 
         DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
 
-        subject.createArchiver( "tar", false, "finalName", configSource, filter );
+        subject.createArchiver( "tar", false, "finalName", configSource, null );
 
         assertNull( ttArchiver.compressionMethod );
         assertEquals( TarLongFileMode.FAIL, ttArchiver.longFileMode.getValue() );
@@ -153,18 +147,16 @@
 
         TestWarArchiver twArchiver = new TestWarArchiver();
 
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+        MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm );
 
         macArchiverManager.expectGetArchiver( "war", twArchiver );
 
-        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
-
         mm.replayAll();
 
         DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
 
-        subject.createArchiver( "war", false, null, null, filter );
+        subject.createArchiver( "war", false, null, null, null );
 
         assertFalse( twArchiver.ignoreWebxml );
     }
@@ -176,122 +168,121 @@
 
         ZipArchiver archiver = new ZipArchiver();
 
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+        MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm );
 
         macArchiverManager.expectGetArchiver( "zip", archiver );
 
-        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
-
-        mm.replayAll();
-
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
-
-        subject.createArchiver( "zip", false, null, null, filter );
-    }
-
-    public void testConfigureArchiverFinalizers_ShouldDoNothingWhenNotSupportedByArchiver()
-    {
-        MockManager mm = new MockManager();
-
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
-
-        macArchiverManager.createArchiver( Archiver.class );
-
-        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
-
-        mm.replayAll();
-
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
-
-        subject.configureArchiverFinalizers( macArchiverManager.archiver, "format", null, filter );
-
-        mm.verifyAll();
-    }
-
-    public void testConfigureArchiverFinalizers_ShouldAddManifestFinalizerWhenSupportedByArchiver()
-    {
-        MockManager mm = new MockManager();
-
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
-
-        macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class );
-        
-        Set finalizerClasses = new HashSet();
-        finalizerClasses.add( ComponentsXmlArchiverFileFilter.class );
-        finalizerClasses.add( ManifestCreationFinalizer.class );
-        
-        macArchiverManager.expectSetArchiverFinalizers( finalizerClasses );
-
-        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
-        
-        MockControl configCtl = MockControl.createControl( AssemblerConfigurationSource.class );
-        AssemblerConfigurationSource configSource = (AssemblerConfigurationSource) configCtl.getMock();
-        
-        Model model = new Model();
-        model.setGroupId( "group" );
-        model.setArtifactId( "artifact" );
-        model.setVersion( "1" );
-        
-        configSource.getProject();
-        configCtl.setReturnValue( new MavenProject( model ), MockControl.ZERO_OR_MORE );
-        
-        configSource.getJarArchiveConfiguration();
-        configCtl.setReturnValue( new MavenArchiveConfiguration() );
-        
-        mm.add( configCtl );
-
-        mm.replayAll();
-
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
-
-        subject.configureArchiverFinalizers( macArchiverManager.archiver, "jar", configSource, filter );
-
-        mm.verifyAll();
-    }
-
-    public void testConfigureArchiverFilters_ShouldDoNothingWhenNotSupportedByArchiver()
-    {
-        MockManager mm = new MockManager();
-
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
-
-        macArchiverManager.createArchiver( Archiver.class );
-
-        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
-
         mm.replayAll();
 
         DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
-
-        subject.configureArchiverFilters( macArchiverManager.archiver, filter );
+            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
 
-        mm.verifyAll();
+        subject.createArchiver( "zip", false, null, null, null );
     }
 
-    public void testConfigureArchiverFilters_ShouldAddComponentsFilterWhenSupportedByArchiver()
-    {
-        MockManager mm = new MockManager();
-
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
-
-        macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class );
-        macArchiverManager.expectSetArchiverFilters();
-
-        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
-
-        mm.replayAll();
-
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
-
-        subject.configureArchiverFilters( macArchiverManager.archiver, filter );
-
-        mm.verifyAll();
-    }
+    // TODO: Re-implement these tests on the createArchiver(..) method. For now, they're no big loss.
+//    public void testConfigureArchiverFinalizers_ShouldDoNothingWhenNotSupportedByArchiver()
+//    {
+//        MockManager mm = new MockManager();
+//
+//        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+//
+//        macArchiverManager.createArchiver( Archiver.class );
+//
+//        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
+//
+//        mm.replayAll();
+//
+//        DefaultAssemblyArchiver subject =
+//            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+//
+//        subject.configureArchiverFinalizers( macArchiverManager.archiver, "format", null, filter );
+//
+//        mm.verifyAll();
+//    }
+//
+//    public void testConfigureArchiverFinalizers_ShouldAddManifestFinalizerWhenSupportedByArchiver()
+//    {
+//        MockManager mm = new MockManager();
+//
+//        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+//
+//        macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class );
+//
+//        Set finalizerClasses = new HashSet();
+//        finalizerClasses.add( ComponentsXmlArchiverFileFilter.class );
+//        finalizerClasses.add( ManifestCreationFinalizer.class );
+//
+//        macArchiverManager.expectSetArchiverFinalizers( finalizerClasses );
+//
+//        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
+//
+//        MockControl configCtl = MockControl.createControl( AssemblerConfigurationSource.class );
+//        AssemblerConfigurationSource configSource = (AssemblerConfigurationSource) configCtl.getMock();
+//
+//        Model model = new Model();
+//        model.setGroupId( "group" );
+//        model.setArtifactId( "artifact" );
+//        model.setVersion( "1" );
+//
+//        configSource.getProject();
+//        configCtl.setReturnValue( new MavenProject( model ), MockControl.ZERO_OR_MORE );
+//
+//        configSource.getJarArchiveConfiguration();
+//        configCtl.setReturnValue( new MavenArchiveConfiguration() );
+//
+//        mm.add( configCtl );
+//
+//        mm.replayAll();
+//
+//        DefaultAssemblyArchiver subject =
+//            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+//
+//        subject.configureArchiverFinalizers( macArchiverManager.archiver, "jar", configSource, filter );
+//
+//        mm.verifyAll();
+//    }
+//
+//    public void testConfigureArchiverFilters_ShouldDoNothingWhenNotSupportedByArchiver()
+//    {
+//        MockManager mm = new MockManager();
+//
+//        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+//
+//        macArchiverManager.createArchiver( Archiver.class );
+//
+//        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
+//
+//        mm.replayAll();
+//
+//        DefaultAssemblyArchiver subject =
+//            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+//
+//        subject.configureArchiverFilters( macArchiverManager.archiver, filter );
+//
+//        mm.verifyAll();
+//    }
+//
+//    public void testConfigureArchiverFilters_ShouldAddComponentsFilterWhenSupportedByArchiver()
+//    {
+//        MockManager mm = new MockManager();
+//
+//        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+//
+//        macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class );
+//        macArchiverManager.expectSetArchiverFilters();
+//
+//        ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter();
+//
+//        mm.replayAll();
+//
+//        DefaultAssemblyArchiver subject =
+//            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+//
+//        subject.configureArchiverFilters( macArchiverManager.archiver, filter );
+//
+//        mm.verifyAll();
+//    }
 
     public void testCreateWarArchiver_ShouldDisableIgnoreWebxmlOption()
         throws NoSuchArchiverException
@@ -300,14 +291,14 @@
 
         TestWarArchiver twArchiver = new TestWarArchiver();
 
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+        MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm );
 
         macArchiverManager.expectGetArchiver( "war", twArchiver );
 
         mm.replayAll();
 
         DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
 
         subject.createWarArchiver();
 
@@ -321,14 +312,14 @@
 
         TestTarArchiver ttArchiver = new TestTarArchiver();
 
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+        MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm );
 
         macArchiverManager.expectGetArchiver( "tar", ttArchiver );
 
         mm.replayAll();
 
         DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
 
         subject.createTarArchiver( "tar", TarLongFileMode.FAIL );
 
@@ -345,14 +336,14 @@
 
         TestTarArchiver ttArchiver = new TestTarArchiver();
 
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+        MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm );
 
         macArchiverManager.expectGetArchiver( "tar", ttArchiver );
 
         mm.replayAll();
 
         DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
 
         subject.createTarArchiver( "tar.gz", TarLongFileMode.FAIL );
 
@@ -369,14 +360,14 @@
 
         TestTarArchiver ttArchiver = new TestTarArchiver();
 
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+        MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm );
 
         macArchiverManager.expectGetArchiver( "tar", ttArchiver );
 
         mm.replayAll();
 
         DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
 
         subject.createTarArchiver( "tar.bz2", TarLongFileMode.FAIL );
 
@@ -393,14 +384,14 @@
 
         TestTarArchiver ttArchiver = new TestTarArchiver();
 
-        MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm );
+        MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm );
 
         macArchiverManager.expectGetArchiver( "tar", ttArchiver );
 
         mm.replayAll();
 
         DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null );
+            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
 
         try
         {
@@ -416,9 +407,9 @@
         mm.verifyAll();
     }
 
-    private DefaultAssemblyArchiver createSubject( ArchiverManager archiverManager, List phases, Logger logger )
+    private DefaultAssemblyArchiver createSubject( MockAndControlForAssemblyArchiver macMgr, List phases, Logger logger )
     {
-        DefaultAssemblyArchiver subject = new DefaultAssemblyArchiver( archiverManager, phases );
+        DefaultAssemblyArchiver subject = new DefaultAssemblyArchiver( macMgr.archiverManager, macMgr.container, phases );
 
         if ( logger != null )
         {
@@ -428,7 +419,7 @@
         return subject;
     }
 
-    private final class MockAndControlForArchiverManager
+    private final class MockAndControlForAssemblyArchiver
     {
         ArchiverManager archiverManager;
 
@@ -438,15 +429,24 @@
 
         Archiver archiver;
 
+        MockControl containerControl;
+
+        PlexusContainer container;
+
         private final MockManager mm;
 
-        public MockAndControlForArchiverManager( MockManager mm )
+        public MockAndControlForAssemblyArchiver( MockManager mm )
         {
             this.mm = mm;
             control = MockControl.createControl( ArchiverManager.class );
             mm.add( control );
 
             archiverManager = ( ArchiverManager ) control.getMock();
+
+            containerControl = MockControl.createControl( PlexusContainer.class );
+            mm.add( containerControl );
+
+            container = (PlexusContainer) containerControl.getMock();
         }
 
         void createArchiver( Class archiverClass )
@@ -473,15 +473,15 @@
                 {
                     boolean match = true;
                     List actualClasses = (List) actual[0];
-                    
+
                     Set finClasses = new HashSet( finalizerClasses );
-                    
+
                     for ( Iterator it = actualClasses.iterator(); it.hasNext(); )
                     {
                         ArchiveFinalizer finalizer = (ArchiveFinalizer) it.next();
                         match = match && finClasses.remove( finalizer.getClass() );
                     }
-                    
+
                     return match;
                 }
 
@@ -489,20 +489,20 @@
                 {
                     return "Matcher for finalizer-classes: " + finalizerClasses;
                 }
-                
+
             });
         }
 
-        void expectSetArchiverFilters()
-        {
-            ( ( FilterEnabled ) archiver ).setArchiveFilters( null );
-            archiverControl.setMatcher( MockControl.ALWAYS_MATCHER );
-        }
+//        void expectSetArchiverFilters()
+//        {
+//            ( ( FilterEnabled ) archiver ).setArchiveFilters( null );
+//            archiverControl.setMatcher( MockControl.ALWAYS_MATCHER );
+//        }
 
         void expectGetArchiver( String format, Class archiverClass )
         {
             createArchiver( archiverClass );
-            
+
             try
             {
                 archiverManager.getArchiver( format );
@@ -511,7 +511,7 @@
             {
                 Assert.fail( "should never happen" );
             }
-            
+
             control.setReturnValue( archiver );
         }
 
@@ -601,7 +601,7 @@
     }
 
     interface TestFinalizerFilteredArchiver
-        extends Archiver, FilterEnabled, FinalizerEnabled
+        extends Archiver, FinalizerEnabled
     {
 
     }