You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by ke...@apache.org on 2005/08/31 00:57:56 UTC

svn commit: r264888 - in /maven/components/trunk/maven-plugins/maven-assembly-plugin: pom.xml src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java src/main/mdo/descriptor.mdo

Author: kenney
Date: Tue Aug 30 15:57:50 2005
New Revision: 264888

URL: http://svn.apache.org/viewcvs?rev=264888&view=rev
Log:
o Fixed tabs -> spaces (sorry, makes diff hard to read) and some codingstyle
  issues.

o Modified model: added a 'BaseSet' type as a basetype
  for DependencySet and FileSet; it contains fileMode and
  directoryMode to work with the new plexus-archiver.

o Bumped plexus-archiver version to 1.0-alpha-2-SNAPSHOT.

o Added support for actually using fileMode and directoryMode.
  (tested this with a modified maven-core assembly descriptor,
  not committed as a test though).


Modified:
    maven/components/trunk/maven-plugins/maven-assembly-plugin/pom.xml
    maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java
    maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo

Modified: maven/components/trunk/maven-plugins/maven-assembly-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-assembly-plugin/pom.xml?rev=264888&r1=264887&r2=264888&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-assembly-plugin/pom.xml (original)
+++ maven/components/trunk/maven-plugins/maven-assembly-plugin/pom.xml Tue Aug 30 15:57:50 2005
@@ -44,7 +44,7 @@
     <dependency>
       <groupId>plexus</groupId>
       <artifactId>plexus-archiver</artifactId>
-      <version>1.0-alpha-1</version>
+      <version>1.0-alpha-2-SNAPSHOT</version>
     </dependency>
   </dependencies>
   <developers>

Modified: maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java?rev=264888&r1=264887&r2=264888&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java (original)
+++ maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblyMojo.java Tue Aug 30 15:57:50 2005
@@ -36,6 +36,7 @@
 import org.codehaus.plexus.archiver.zip.ZipArchiver;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
 import java.io.FileReader;
@@ -64,21 +65,23 @@
     extends AbstractUnpackingMojo
 {
 
-	/**
-	 * @parameter expression="${maven.assembly.descriptorId}"
-	 */
-	protected String descriptorId;
-	/**
-	 * @parameter expression="${maven.assembly.descriptor}"
-	 */
-	protected File descriptor;
-	/**
-	 * @parameter expression="${basedir}"
-	 * @required
-	 * @readonly
-	 */
-	private String basedir;
-	
+    /**
+     * @parameter expression="${maven.assembly.descriptorId}"
+     */
+    protected String descriptorId;
+
+    /**
+     * @parameter expression="${maven.assembly.descriptor}"
+     */
+    protected File descriptor;
+
+    /**
+     * @parameter expression="${basedir}"
+     * @required
+     * @readonly
+     */
+    private String basedir;
+    
     /**
      * @parameter expression="${project}"
      * @required
@@ -93,337 +96,370 @@
      */
     private MavenProjectHelper projectHelper;
 
-	
 
-	public void execute() throws MojoExecutionException {
-	    try
-	    {
-	        doExecute();
-	    }
-	    catch ( Exception e )
-	    {
-	        // TODO: don't catch exception
-	        throw new MojoExecutionException( "Error creating assembly", e );
-	    }
-	}
-
-	private void doExecute() throws Exception {
-	    Reader r = null;
-	
-	    if ( descriptor != null )
-	    {
-	        r = new FileReader( descriptor );
-	    }
-	    else if ( descriptorId != null )
-	    {
-	        InputStream resourceAsStream = getClass().getResourceAsStream( "/assemblies/" + descriptorId + ".xml" );
-	        if ( resourceAsStream == null )
-	        {
-	            throw new MojoExecutionException( "Descriptor with ID '" + descriptorId + "' not found" );
-	        }
-	        r = new InputStreamReader( resourceAsStream );
-	    }
-	    else
-	    {
-	        // TODO: better exception
-	        throw new MojoExecutionException( "You must specify descriptor or descriptorId" );
-	    }
-	
-	    try
-	    {
-	        AssemblyXpp3Reader reader = new AssemblyXpp3Reader();
-	        Assembly assembly = reader.read( r );
-	
-	        // TODO: include dependencies marked for distribution under certain formats
-	        // TODO: how, might we plug this into an installer, such as NSIS?
-	        // TODO: allow file mode specifications?
-	
-	        String fullName = finalName + "-" + assembly.getId();
-	
-	        for ( Iterator i = assembly.getFormats().iterator(); i.hasNext(); )
-	        {
-	            String format = (String) i.next();
-	
-	            String filename = fullName + "." + format;
-	
-	            // TODO: use component roles? Can we do that in a mojo?
-	            Archiver archiver = createArchiver( format );
-	
-	            processFileSets( archiver, assembly.getFileSets(), assembly.isIncludeBaseDirectory() );
-	            processDependencySets( archiver, assembly.getDependencySets(), assembly.isIncludeBaseDirectory() );
-	
-	            File destFile = new File( outputDirectory, filename );
-	            archiver.setDestFile( destFile );
-	            archiver.createArchive();
-	            
+    public void execute()
+        throws MojoExecutionException
+    {
+        try
+        {
+            doExecute();
+        }
+        catch ( Exception e )
+        {
+            // TODO: don't catch exception
+            throw new MojoExecutionException( "Error creating assembly", e );
+        }
+    }
+
+    private void doExecute()
+        throws ArchiverException, IOException, MojoExecutionException, XmlPullParserException
+    {
+        Reader r = null;
+    
+        if ( descriptor != null )
+        {
+            r = new FileReader( descriptor );
+        }
+        else if ( descriptorId != null )
+        {
+            InputStream resourceAsStream = getClass().getResourceAsStream( "/assemblies/" + descriptorId + ".xml" );
+            if ( resourceAsStream == null )
+            {
+                throw new MojoExecutionException( "Descriptor with ID '" + descriptorId + "' not found" );
+            }
+            r = new InputStreamReader( resourceAsStream );
+        }
+        else
+        {
+            // TODO: better exception
+            throw new MojoExecutionException( "You must specify descriptor or descriptorId" );
+        }
+    
+        try
+        {
+            AssemblyXpp3Reader reader = new AssemblyXpp3Reader();
+            Assembly assembly = reader.read( r );
+    
+            // TODO: include dependencies marked for distribution under certain formats
+            // TODO: how, might we plug this into an installer, such as NSIS?
+            // TODO: allow file mode specifications?
+    
+            String fullName = finalName + "-" + assembly.getId();
+    
+            for ( Iterator i = assembly.getFormats().iterator(); i.hasNext(); )
+            {
+                String format = (String) i.next();
+    
+                String filename = fullName + "." + format;
+    
+                // TODO: use component roles? Can we do that in a mojo?
+                Archiver archiver = createArchiver( format );
+    
+                processFileSets( archiver, assembly.getFileSets(), assembly.isIncludeBaseDirectory() );
+                processDependencySets( archiver, assembly.getDependencySets(), assembly.isIncludeBaseDirectory() );
+    
+                File destFile = new File( outputDirectory, filename );
+                archiver.setDestFile( destFile );
+                archiver.createArchive();
+                
                 projectHelper.attachArtifact(project, format, format + "-assembly", destFile );
-	        }
-	    }
-	    finally
-	    {
-	        IOUtil.close( r );
-	    }
-	}
-
-	private void processDependencySets(Archiver archiver, List dependencySets, boolean includeBaseDirectory) throws ArchiverException, IOException, Exception {
-	        for ( Iterator i = dependencySets.iterator(); i.hasNext(); )
-	        {
-	            DependencySet dependencySet = (DependencySet) i.next();
-	            String output = dependencySet.getOutputDirectory();
-	            output = getOutputDirectory( output, includeBaseDirectory );
-	
-	            AndArtifactFilter filter = new AndArtifactFilter();
-	            filter.add( new ScopeArtifactFilter( dependencySet.getScope() ) );
-	            if ( !dependencySet.getIncludes().isEmpty() )
-	            {
-	                filter.add( new IncludesArtifactFilter( dependencySet.getIncludes() ) );
-	            }
-	            if ( !dependencySet.getExcludes().isEmpty() )
-	            {
-	                filter.add( new ExcludesArtifactFilter( dependencySet.getExcludes() ) );
-	            }
-	
-	            // TODO: includes and excludes
-	            for ( Iterator j = dependencies.iterator(); j.hasNext(); )
-	            {
-	                Artifact artifact = (Artifact) j.next();
-	
-	                if ( filter.include( artifact ) )
-	                {
-	                    String name = artifact.getFile().getName();
-	                    if ( dependencySet.isUnpack() )
-	                    {
-	                        // TODO: something like zipfileset in plexus-archiver
-	//                        archiver.addJar(  )
-	
-	                        File tempLocation = new File( workDirectory, name.substring( 0, name.length() - 4 ) );
-	                        boolean process = false;
-	                        if ( !tempLocation.exists() )
-	                        {
-	                            tempLocation.mkdirs();
-	                            process = true;
-	                        }
-	                        else if ( artifact.getFile().lastModified() > tempLocation.lastModified() )
-	                        {
-	                            process = true;
-	                        }
-	
-	                        if ( process )
-	                        {
-	                            unpack( artifact.getFile(), tempLocation );
-	                        }
-	                        archiver.addDirectory( tempLocation, null,
-	                                               (String[]) getJarExcludes().toArray( EMPTY_STRING_ARRAY ) );
-	                    }
-	                    else
-	                    {
-	                        archiver.addFile( artifact.getFile(), output +
-	                            evaluateFileNameMapping( dependencySet.getOutputFileNameMapping(), artifact ) );
-	                    }
-	                }
-	            }
-	        }
-	    }
-
-	private void processFileSets(Archiver archiver, List fileSets, boolean includeBaseDirecetory) throws ArchiverException {
-	    for ( Iterator i = fileSets.iterator(); i.hasNext(); )
-	    {
-	        FileSet fileSet = (FileSet) i.next();
-	        String directory = fileSet.getDirectory();
-	        String output = fileSet.getOutputDirectory();
-	        if ( directory == null )
-	        {
-	            directory = basedir;
-	            if ( output == null )
-	            {
-	                output = "";
-	            }
-	        }
-	        else
-	        {
-	            if ( output == null )
-	            {
-	                output = directory;
-	            }
-	        }
-	        output = getOutputDirectory( output, includeBaseDirecetory );
-	
-	        String[] includes = (String[]) fileSet.getIncludes().toArray( EMPTY_STRING_ARRAY );
-	        if ( includes.length == 0 )
-	        {
-	            includes = null;
-	        }
-	
-	        List excludesList = fileSet.getExcludes();
-	        excludesList.addAll( getDefaultExcludes() );
-	        String[] excludes = (String[]) excludesList.toArray( EMPTY_STRING_ARRAY );
-	
-	        // TODO: default excludes should be in the archiver?
-	        archiver.addDirectory( new File( directory ), output, includes, excludes );
-	    }
-	}
-	
-	private String evaluateFileNameMapping( String expression, Artifact artifact )
-    throws Exception
-	{
-	    // this matches the last ${...} string
-	    Pattern pat = Pattern.compile( "^(.*)\\$\\{([^\\}]+)\\}(.*)$" );
-	    Matcher mat = pat.matcher( expression );
-	
-	    String left,right;
-	    Object middle;
-	
-	    if ( mat.matches() )
-	    {
-	        left = evaluateFileNameMapping( mat.group( 1 ), artifact );
-	        middle = ReflectionValueExtractor.evaluate( "dep." + mat.group( 2 ), artifact );
-	        right = mat.group( 3 );
-	
-	        if ( middle == null )
-	        {
-	            // TODO: There should be a more generic way dealing with that. Having magic words is not good at all.
-	            // probe for magic word
-	            if ( mat.group( 2 ).trim().equals( "extension" ) )
-	            {
-	                ArtifactHandler artifactHandler = artifact.getArtifactHandler();
-	                middle = artifactHandler.getExtension();
-	            }
-	            else
-	            {
-	                middle = "${" + mat.group( 2 ) + "}";
-	            }
-	        }
-	
-	        return left + middle + right;
-	    }
-	
-	    return expression;
-	}
-	
-	private List getJarExcludes()
-	{
-	    List l = new ArrayList( getDefaultExcludes() );
-	    l.add( "META-INF/**" );
-	    return l;
-	}
-	
-	private String getOutputDirectory( String output, boolean includeBaseDirectory )
-	{
-	    if ( output == null )
-	    {
-	        output = "";
-	    }
-	    if ( !output.endsWith( "/" ) && !output.endsWith( "\\" ) )
-	    {
-	        // TODO: shouldn't archiver do this?
-	        output += '/';
-	    }
-	
-	    if ( includeBaseDirectory )
-	    {
-	        if ( output.startsWith( "/" ) )
-	        {
-	            output = finalName + output;
-	        }
-	        else
-	        {
-	            output = finalName + "/" + output;
-	        }
-	    }
-	    else
-	    {
-	        if ( output.startsWith( "/" ) )
-	        {
-	            output = output.substring( 1 );
-	        }
-	    }
-	    return output;
-	}
-	
-	private Archiver createArchiver( String format )
-	    throws ArchiverException
-	{
-	    Archiver archiver;
-	    if ( format.startsWith( "tar" ) )
-	    {
-	        TarArchiver tarArchiver = new TarArchiver();
-	        archiver = tarArchiver;
-	        int index = format.indexOf( '.' );
-	        if ( index >= 0 )
-	        {
-	            // TODO: this needs a cleanup in plexus archiver - use a real typesafe enum
-	            TarArchiver.TarCompressionMethod tarCompressionMethod = new TarArchiver.TarCompressionMethod();
-	            // TODO: this should accept gz and bz2 as well so we can skip over the switch
-	            String compression = format.substring( index + 1 );
-	            if ( compression.equals( "gz" ) )
-	            {
-	                tarCompressionMethod.setValue( "gzip" );
-	            }
-	            else if ( compression.equals( "bz2" ) )
-	            {
-	                tarCompressionMethod.setValue( "bzip2" );
-	            }
-	            else
-	            {
-	                // TODO: better handling
-	                throw new IllegalArgumentException( "Unknown compression format: " + compression );
-	            }
-	            tarArchiver.setCompression( tarCompressionMethod );
-	        }
-	
-	        // TODO: should be able to do this on a file/dir basis
-	        tarArchiver.getOptions().setDirMode( "0700" );
-	        tarArchiver.getOptions().setMode( "0700" );
-	    }
-	    else if ( format.startsWith( "zip" ) )
-	    {
-	        archiver = new ZipArchiver();
-	    }
-	    else if ( format.startsWith( "jar" ) )
-	    {
-	        // TODO: use MavenArchiver for manifest?
-	        JarArchiver jarArchiver = new JarArchiver();
-	        jarArchiver.setCompress( true );
-	        archiver = jarArchiver;
-	
-	    }
-	    else
-	    {
-	        // TODO: better handling
-	        throw new IllegalArgumentException( "Unknown format: " + format );
-	    }
-	    return archiver;
-	}
-	
-	public List getDefaultExcludes()
-	{
-	    List defaultExcludes = new ArrayList();
-	    defaultExcludes.add( "**/*~" );
-	    defaultExcludes.add( "**/#*#" );
-	    defaultExcludes.add( "**/.#*" );
-	    defaultExcludes.add( "**/%*%" );
-	    defaultExcludes.add( "**/._*" );
-	
-	    // CVS
-	    defaultExcludes.add( "**/CVS" );
-	    defaultExcludes.add( "**/CVS/**" );
-	    defaultExcludes.add( "**/.cvsignore" );
-	
-	    // SCCS
-	    defaultExcludes.add( "**/SCCS" );
-	    defaultExcludes.add( "**/SCCS/**" );
-	
-	    // Visual SourceSafe
-	    defaultExcludes.add( "**/vssver.scc" );
-	
-	    // Subversion
-	    defaultExcludes.add( "**/.svn" );
-	    defaultExcludes.add( "**/.svn/**" );
-	
-	    // Mac
-	    defaultExcludes.add( "**/.DS_Store" );
-	
-	    return defaultExcludes;
-	}
-	
+            }
+        }
+        finally
+        {
+            IOUtil.close( r );
+        }
+    }
+
+    private void processDependencySets( Archiver archiver, List dependencySets, boolean includeBaseDirectory )
+        throws ArchiverException, IOException, MojoExecutionException
+    {
+        for ( Iterator i = dependencySets.iterator(); i.hasNext(); )
+        {
+            DependencySet dependencySet = (DependencySet) i.next();
+            String output = dependencySet.getOutputDirectory();
+            output = getOutputDirectory( output, includeBaseDirectory );
+
+            archiver.setDefaultDirectoryMode( Integer.parseInt( 
+                    dependencySet.getDirectoryMode(), 8 ) );
+
+            archiver.setDefaultFileMode( Integer.parseInt( 
+                    dependencySet.getFileMode(), 8 ) );
+
+            getLog().debug("DependencySet["+output+"]" +
+                " dir perms: " + Integer.toString( archiver.getDefaultDirectoryMode(), 8 ) +
+                " file perms: " + Integer.toString( archiver.getDefaultFileMode(), 8 ) );
+
+            AndArtifactFilter filter = new AndArtifactFilter();
+            filter.add( new ScopeArtifactFilter( dependencySet.getScope() ) );
+
+            if ( !dependencySet.getIncludes().isEmpty() )
+            {
+                filter.add( new IncludesArtifactFilter( dependencySet.getIncludes() ) );
+            }
+            if ( !dependencySet.getExcludes().isEmpty() )
+            {
+                filter.add( new ExcludesArtifactFilter( dependencySet.getExcludes() ) );
+            }
+
+            // TODO: includes and excludes
+            for ( Iterator j = dependencies.iterator(); j.hasNext(); )
+            {
+                Artifact artifact = (Artifact) j.next();
+
+                if ( filter.include( artifact ) )
+                {
+                    String name = artifact.getFile().getName();
+                    
+                    if ( dependencySet.isUnpack() )
+                    {
+                        // TODO: something like zipfileset in plexus-archiver
+//                        archiver.addJar(  )
+
+                        File tempLocation = new File( workDirectory, name.substring( 0, name.length() - 4 ) );
+                        boolean process = false;
+                        if ( !tempLocation.exists() )
+                        {
+                            tempLocation.mkdirs();
+                            process = true;
+                        }
+                        else if ( artifact.getFile().lastModified() > tempLocation.lastModified() )
+                        {
+                            process = true;
+                        }
+
+                        if ( process )
+                        {
+                            unpack( artifact.getFile(), tempLocation );
+                        }
+                        archiver.addDirectory( tempLocation, null,
+                                               (String[]) getJarExcludes().toArray( EMPTY_STRING_ARRAY ) );
+                    }
+                    else
+                    {
+                        archiver.addFile( artifact.getFile(), output +
+                            evaluateFileNameMapping( dependencySet.getOutputFileNameMapping(), artifact ) );
+                    }
+                }
+            }
+        } 
+    }
+
+
+    private void processFileSets( Archiver archiver, List fileSets, boolean includeBaseDirecetory )
+        throws ArchiverException
+    {
+        for ( Iterator i = fileSets.iterator(); i.hasNext(); )
+        {
+            FileSet fileSet = (FileSet) i.next();
+            String directory = fileSet.getDirectory();
+            String output = fileSet.getOutputDirectory();
+
+            archiver.setDefaultDirectoryMode( Integer.parseInt( 
+                    fileSet.getDirectoryMode(), 8 ) );
+
+            archiver.setDefaultFileMode( Integer.parseInt( 
+                    fileSet.getFileMode(), 8 ) );
+            
+            getLog().debug("FileSet["+output+"]" +
+                " dir perms: " + Integer.toString( archiver.getDefaultDirectoryMode(), 8 ) +
+                " file perms: " + Integer.toString( archiver.getDefaultFileMode(), 8 ) );
+
+            if ( directory == null )
+            {
+                directory = basedir;
+                if ( output == null )
+                {
+                    output = "";
+                }
+            }
+            else
+            {
+                if ( output == null )
+                {
+                    output = directory;
+                }
+            }
+            output = getOutputDirectory( output, includeBaseDirecetory );
+    
+            String[] includes = (String[]) fileSet.getIncludes().toArray( EMPTY_STRING_ARRAY );
+            if ( includes.length == 0 )
+            {
+                includes = null;
+            }
+    
+            List excludesList = fileSet.getExcludes();
+            excludesList.addAll( getDefaultExcludes() );
+            String[] excludes = (String[]) excludesList.toArray( EMPTY_STRING_ARRAY );
+    
+            // TODO: default excludes should be in the archiver?
+            archiver.addDirectory( new File( directory ), output, includes, excludes );
+        }
+    }
+    
+    private static String evaluateFileNameMapping( String expression, Artifact artifact )
+        throws MojoExecutionException
+    {
+        // this matches the last ${...} string
+        Pattern pat = Pattern.compile( "^(.*)\\$\\{([^\\}]+)\\}(.*)$" );
+        Matcher mat = pat.matcher( expression );
+    
+        String left,right;
+        Object middle;
+    
+        if ( mat.matches() )
+        {
+            left = evaluateFileNameMapping( mat.group( 1 ), artifact );
+            try
+            {
+                middle = ReflectionValueExtractor.evaluate( "dep." + mat.group( 2 ), artifact );
+            }
+            catch (Exception e)
+            {
+                throw new MojoExecutionException("Cannot evaluate filenameMapping", e);
+            }
+            right = mat.group( 3 );
+    
+            if ( middle == null )
+            {
+                // TODO: There should be a more generic way dealing with that. Having magic words is not good at all.
+                // probe for magic word
+                if ( mat.group( 2 ).trim().equals( "extension" ) )
+                {
+                    ArtifactHandler artifactHandler = artifact.getArtifactHandler();
+                    middle = artifactHandler.getExtension();
+                }
+                else
+                {
+                    middle = "${" + mat.group( 2 ) + "}";
+                }
+            }
+    
+            return left + middle + right;
+        }
+    
+        return expression;
+    }
+    
+    private static List getJarExcludes()
+    {
+        List l = new ArrayList( getDefaultExcludes() );
+        l.add( "META-INF/**" );
+        return l;
+    }
+    
+    private String getOutputDirectory( String output, boolean includeBaseDirectory )
+    {
+        if ( output == null )
+        {
+            output = "";
+        }
+        if ( !output.endsWith( "/" ) && !output.endsWith( "\\" ) )
+        {
+            // TODO: shouldn't archiver do this?
+            output += '/';
+        }
+    
+        if ( includeBaseDirectory )
+        {
+            if ( output.startsWith( "/" ) )
+            {
+                output = finalName + output;
+            }
+            else
+            {
+                output = finalName + "/" + output;
+            }
+        }
+        else
+        {
+            if ( output.startsWith( "/" ) )
+            {
+                output = output.substring( 1 );
+            }
+        }
+        return output;
+    }
+    
+    private static Archiver createArchiver( String format )
+        throws ArchiverException
+    {
+        Archiver archiver;
+        if ( format.startsWith( "tar" ) )
+        {
+            TarArchiver tarArchiver = new TarArchiver();
+            archiver = tarArchiver;
+            int index = format.indexOf( '.' );
+            if ( index >= 0 )
+            {
+                // TODO: this needs a cleanup in plexus archiver - use a real typesafe enum
+                TarArchiver.TarCompressionMethod tarCompressionMethod = new TarArchiver.TarCompressionMethod();
+                // TODO: this should accept gz and bz2 as well so we can skip over the switch
+                String compression = format.substring( index + 1 );
+                if ( compression.equals( "gz" ) )
+                {
+                    tarCompressionMethod.setValue( "gzip" );
+                }
+                else if ( compression.equals( "bz2" ) )
+                {
+                    tarCompressionMethod.setValue( "bzip2" );
+                }
+                else
+                {
+                    // TODO: better handling
+                    throw new IllegalArgumentException( "Unknown compression format: " + compression );
+                }
+                tarArchiver.setCompression( tarCompressionMethod );
+            }
+        }
+        else if ( format.startsWith( "zip" ) )
+        {
+            archiver = new ZipArchiver();
+        }
+        else if ( format.startsWith( "jar" ) )
+        {
+            // TODO: use MavenArchiver for manifest?
+            JarArchiver jarArchiver = new JarArchiver();
+            jarArchiver.setCompress( true );
+            archiver = jarArchiver;
+        }
+        else
+        {
+            // TODO: better handling
+            throw new IllegalArgumentException( "Unknown format: " + format );
+        }
+        return archiver;
+    }
+    
+    public static List getDefaultExcludes()
+    {
+        List defaultExcludes = new ArrayList();
+        defaultExcludes.add( "**/*~" );
+        defaultExcludes.add( "**/#*#" );
+        defaultExcludes.add( "**/.#*" );
+        defaultExcludes.add( "**/%*%" );
+        defaultExcludes.add( "**/._*" );
+    
+        // CVS
+        defaultExcludes.add( "**/CVS" );
+        defaultExcludes.add( "**/CVS/**" );
+        defaultExcludes.add( "**/.cvsignore" );
+    
+        // SCCS
+        defaultExcludes.add( "**/SCCS" );
+        defaultExcludes.add( "**/SCCS/**" );
+    
+        // Visual SourceSafe
+        defaultExcludes.add( "**/vssver.scc" );
+    
+        // Subversion
+        defaultExcludes.add( "**/.svn" );
+        defaultExcludes.add( "**/.svn/**" );
+    
+        // Mac
+        defaultExcludes.add( "**/.DS_Store" );
+    
+        return defaultExcludes;
+    }
+    
 }

Modified: maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo?rev=264888&r1=264887&r2=264888&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo (original)
+++ maven/components/trunk/maven-plugins/maven-assembly-plugin/src/main/mdo/descriptor.mdo Tue Aug 30 15:57:50 2005
@@ -1,3 +1,5 @@
+<?xml version="1.0"?>
+
 <model>
   <id>assembly</id>
   <name>Assembly</name>
@@ -53,16 +55,10 @@
       </fields>
     </class>
     <class>
-      <name>FileSet</name>
+      <name>SetBase</name>
       <version>1.0.0</version>
       <fields>
         <field>
-          <name>directory</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <required>true</required>
-        </field>
-        <field>
           <name>outputDirectory</name>
           <version>1.0.0</version>
           <type>String</type>
@@ -83,17 +79,38 @@
             <multiplicity>*</multiplicity>
           </association>
         </field>
+        <field>
+          <name>fileMode</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <defaultValue>0644</defaultValue>
+        </field>
+        <field>
+          <name>directoryMode</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <defaultValue>0755</defaultValue>
+        </field>
       </fields>
     </class>
     <class>
-      <name>DependencySet</name>
+      <name>FileSet</name>
       <version>1.0.0</version>
+      <superClass>SetBase</superClass>
       <fields>
         <field>
-          <name>outputDirectory</name>
+          <name>directory</name>
           <version>1.0.0</version>
           <type>String</type>
+          <required>true</required>
         </field>
+      </fields>
+    </class>
+    <class>
+      <name>DependencySet</name>
+      <version>1.0.0</version>
+      <superClass>SetBase</superClass>
+      <fields>
         <field>
           <name>outputFileNameMapping</name>
           <version>1.0.0</version>
@@ -113,20 +130,10 @@
           <required>true</required>
         </field>
         <field>
-          <name>includes</name>
-          <version>1.0.0</version>
-          <association>
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-        </field>
-        <field>
-          <name>excludes</name>
+          <name>lineEndings</name>
           <version>1.0.0</version>
-          <association>
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
+          <type>String</type>
+          <!-- native, cr, lf, crlf, ..? -->
         </field>
       </fields>
     </class>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org