brett       2005/03/30 07:41:23

  Modified:    
maven-plugins/maven-assemble-plugin/src/main/java/org/apache/maven/plugin/assemble
                        AssembleMojo.java
               maven-plugins/maven-assemble-plugin build.sh
  Added:       maven-plugins/maven-assemble-plugin/src/main/resources/assemblies
                        bin.xml
  Log:
  standard assemly - bin
  
  Revision  Changes    Path
  1.5       +123 -71   
maven-components/maven-plugins/maven-assemble-plugin/src/main/java/org/apache/maven/plugin/assemble/AssembleMojo.java
  
  Index: AssembleMojo.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-assemble-plugin/src/main/java/org/apache/maven/plugin/assemble/AssembleMojo.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AssembleMojo.java 21 Mar 2005 07:59:28 -0000      1.4
  +++ AssembleMojo.java 30 Mar 2005 15:41:23 -0000      1.5
  @@ -25,9 +25,13 @@
   import org.codehaus.plexus.archiver.jar.JarArchiver;
   import org.codehaus.plexus.archiver.tar.TarArchiver;
   import org.codehaus.plexus.archiver.zip.ZipArchiver;
  +import org.codehaus.plexus.util.IOUtil;
   
   import java.io.File;
   import java.io.FileReader;
  +import java.io.InputStream;
  +import java.io.InputStreamReader;
  +import java.io.Reader;
   import java.util.Iterator;
   
   /**
  @@ -35,19 +39,28 @@
    * @version $Id$
    * @goal assemble
    * @description assemble an application bundle or distribution
  + * @parameter name="basedir" type="String" required="true" validator="" 
expression="#basedir" description=""
    * @parameter name="outputDirectory" type="java.io.File" required="true" 
validator="" expression="#project.build.directory" description=""
  - * @parameter name="descriptor" type="java.io.File" required="true" 
validator="" expression="#maven.assemble.descriptor" description=""
  + * @parameter name="descriptor" type="java.io.File" required="false" 
validator="" expression="#maven.assemble.descriptor" description=""
    * @parameter name="finalName" type="String" required="true" validator="" 
expression="#project.build.finalName" description=""
  + * @parameter name="descriptorId" type="String" required="false" 
validator="" expression="#maven.assemble.descriptorId" description=""
    */
   public class AssembleMojo
       extends AbstractPlugin
   {
       private static final String[] EMPTY_STRING_ARRAY = {};
   
  -    private File outputDirectory;
  +    private String basedir;
  +
  +    /**
  +     * @todo use java.io.File
  +     */
  +    private String outputDirectory;
   
       private File descriptor;
   
  +    private String descriptorId;
  +
       private String finalName;
   
       public void execute()
  @@ -67,92 +80,131 @@
       private void doExecute()
           throws Exception
       {
  -        AssemblyXpp3Reader reader = new AssemblyXpp3Reader();
  -        Assembly assembly = reader.read( new FileReader( descriptor ) );
  -
  -        // TODO: include dependencies marked for distribution under certain 
formats
  -        // TODO: have a default set of descriptors that can be used instead 
of the file
  -        // TODO: how, might we plugin this into an installer, such as NSIS?
  -        // TODO: allow file mode specifications?
  +        Reader r = null;
   
  -        String fullName = finalName + "-" + assembly.getId();
  +        if ( descriptor != null )
  +        {
  +            r = new FileReader( descriptor );
  +        }
  +        else if ( descriptorId != null )
  +        {
  +            InputStream resourceAsStream = getClass().getResourceAsStream( 
"/assemblies/" + descriptorId + ".xml" );
  +            if ( resourceAsStream == null )
  +            {
  +                // TODO: better exception
  +                throw new Exception( "Descriptor with ID '" + descriptorId + 
"' not found" );
  +            }
  +            r = new InputStreamReader( resourceAsStream );
  +        }
  +        else
  +        {
  +            // TODO: better exception
  +            throw new Exception( "You must specify descriptor or 
descriptorId" );
  +        }
   
  -        for ( Iterator i = assembly.getFormats().iterator(); i.hasNext(); )
  +        try
           {
  -            String format = (String) i.next();
  +            AssemblyXpp3Reader reader = new AssemblyXpp3Reader();
  +            Assembly assembly = reader.read( r );
   
  -            String filename = fullName + "." + format;
  +            // TODO: include dependencies marked for distribution under 
certain formats
  +            // TODO: how, might we plugin this into an installer, such as 
NSIS?
  +            // TODO: allow file mode specifications?
   
  -            // TODO: use component roles? Can we do that in a mojo?
  -            Archiver archiver;
  -            if ( format.startsWith( "tar" ) )
  +            String fullName = finalName + "-" + assembly.getId();
  +
  +            for ( Iterator i = assembly.getFormats().iterator(); 
i.hasNext(); )
               {
  -                TarArchiver tarArchiver = new TarArchiver();
  -                archiver = tarArchiver;
  -                int index = format.indexOf( '.' );
  -                if ( index >= 0 )
  +                String format = (String) i.next();
  +
  +                String filename = fullName + "." + format;
  +
  +                // TODO: use component roles? Can we do that in a mojo?
  +                Archiver archiver;
  +                if ( format.startsWith( "tar" ) )
                   {
  -                    // 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" ) )
  +                    TarArchiver tarArchiver = new TarArchiver();
  +                    archiver = tarArchiver;
  +                    int index = format.indexOf( '.' );
  +                    if ( index >= 0 )
                       {
  -                        tarCompressionMethod.setValue( "gzip" );
  +                        // 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 ( 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?
  -                archiver = new JarArchiver();
  -            }
  -            else
  -            {
  -                // TODO: better handling
  -                throw new IllegalArgumentException( "Unknown format: " + 
format );
  -            }
  -
  -            for ( Iterator j = assembly.getFilesets().iterator(); 
j.hasNext(); )
  -            {
  -                FileSet fileset = (FileSet) j.next();
  -                String directory = fileset.getDirectory();
  -                String output = fileset.getOutputDirectory();
  -                if ( output == null )
  +                else if ( format.startsWith( "zip" ) )
                   {
  -                    output = directory;
  +                    archiver = new ZipArchiver();
                   }
  -                if ( !output.endsWith( "/" ) && !output.endsWith( "\\" ) )
  +                else if ( format.startsWith( "jar" ) )
                   {
  -                    // TODO: shouldn't archiver do this?
  -                    output += '/';
  +                    // TODO: use MavenArchiver for manifest?
  +                    archiver = new JarArchiver();
  +                }
  +                else
  +                {
  +                    // TODO: better handling
  +                    throw new IllegalArgumentException( "Unknown format: " + 
format );
                   }
   
  -                String[] includes = (String[]) 
fileset.getIncludes().toArray( EMPTY_STRING_ARRAY );
  -                if ( includes.length == 0 )
  +                for ( Iterator j = assembly.getFilesets().iterator(); 
j.hasNext(); )
                   {
  -                    includes = null;
  +                    FileSet fileset = (FileSet) j.next();
  +                    String directory = fileset.getDirectory();
  +                    String output = fileset.getOutputDirectory();
  +                    if ( directory == null )
  +                    {
  +                        directory = basedir;
  +                        if ( output == null )
  +                        {
  +                            output = "/";
  +                        }
  +                    }
  +                    else
  +                    {
  +                        if ( output == null )
  +                        {
  +                            output = directory;
  +                        }
  +                    }
  +                    if ( !output.endsWith( "/" ) && !output.endsWith( "\\" ) 
)
  +                    {
  +                        // TODO: shouldn't archiver do this?
  +                        output += '/';
  +                    }
  +
  +                    String[] includes = (String[]) 
fileset.getIncludes().toArray( EMPTY_STRING_ARRAY );
  +                    if ( includes.length == 0 )
  +                    {
  +                        includes = null;
  +                    }
  +                    String[] excludes = (String[]) 
fileset.getExcludes().toArray( EMPTY_STRING_ARRAY );
  +                    archiver.addDirectory( new File( directory ), output, 
includes, excludes );
                   }
  -                String[] excludes = (String[]) 
fileset.getExcludes().toArray( EMPTY_STRING_ARRAY );
  -                archiver.addDirectory( new File( directory ), output, 
includes, excludes );
  -            }
   
  -            archiver.setDestFile( new File( outputDirectory, filename ) );
  -            archiver.createArchive();
  +                archiver.setDestFile( new File( outputDirectory, filename ) 
);
  +                archiver.createArchive();
  +            }
  +        }
  +        finally
  +        {
  +            IOUtil.close( r );
           }
       }
   }
  
  
  
  1.1                  
maven-components/maven-plugins/maven-assemble-plugin/src/main/resources/assemblies/bin.xml
  
  Index: bin.xml
  ===================================================================
  <assembly>
    <id>bin</id>
    <formats>
      <format>tar.gz</format>
      <format>tar.bz2</format>
      <format>zip</format>
    </formats>
    <filesets>
      <fileset>
        <includes>
          <include>README*</include>
          <include>LICENSE*</include>
          <include>NOTICE*</include>
        </includes>
      </fileset>
      <!-- TODO: docs? -->
      <fileset>
        <!-- TODO: use expresssions instead: ${project.build.directory}, 
${project.build.finalName} -->
        <directory>target</directory>
        <outputDirectory>/</outputDirectory>
        <includes>
          <include>*.jar</include>
        </includes>
      </fileset>
    </filesets>
  </assembly>
  
  
  
  1.2       +2 -1      
maven-components/maven-plugins/maven-assemble-plugin/build.sh
  
  Index: build.sh
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-plugins/maven-assemble-plugin/build.sh,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- build.sh  18 Mar 2005 01:14:11 -0000      1.1
  +++ build.sh  30 Mar 2005 15:41:23 -0000      1.2
  @@ -5,4 +5,5 @@
   #
   
   m2 plugin:descriptor
  -m2 modello:xpp3-reader modello:xpp3-writer modello:java resources:resources 
compiler:compile resources:testResources compiler:testCompile surefire:test 
jar:jar install:install
  +m2 modello:xpp3-reader modello:xpp3-writer modello:java resources:resources 
compiler:compile resources:testResources compiler:testCompile surefire:test 
jar:jar
  +cp target/maven-assemble-plugin-1.0-SNAPSHOT.jar 
$HOME/repository-m2/org.apache.maven.plugins/maven-plugins
  
  
  

Reply via email to