You are viewing a plain text version of this content. The canonical link for it is here.
Posted to m2-dev@maven.apache.org by ev...@apache.org on 2005/03/05 15:52:12 UTC

cvs commit: maven-components/maven-archiver/src/main/java/org/apache/maven/archiver MavenArchiver.java

evenisse    2005/03/05 06:52:12

  Modified:    maven-mboot2/src/main/java MBoot.java
               maven-plugins/maven-jar-plugin pom.xml
               maven-plugins/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar
                        JarMojo.java
               maven-plugins/maven-war-plugin pom.xml
               maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war
                        WarMojo.java
               maven-plugins pom.xml
  Added:       maven-archiver .cvsignore pom.xml
               maven-archiver/src/main/java/org/apache/maven/archiver
                        MavenArchiver.java
  Log:
  - Externalize archiver methods
  - Update JarMojo
  - Implements WarMojo (Not tested yet)
  
  Revision  Changes    Path
  1.56      +2 -1      maven-components/maven-mboot2/src/main/java/MBoot.java
  
  Index: MBoot.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-mboot2/src/main/java/MBoot.java,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- MBoot.java	4 Mar 2005 09:04:14 -0000	1.55
  +++ MBoot.java	5 Mar 2005 14:52:11 -0000	1.56
  @@ -40,7 +40,7 @@
           "modello/jars/modello-xdoc-plugin-1.0-SNAPSHOT.jar",
           "modello/jars/modello-xml-plugin-1.0-SNAPSHOT.jar",
           "modello/jars/modello-xpp3-plugin-1.0-SNAPSHOT.jar",
  -        "plexus/jars/plexus-utils-1.0-alpha-1-SNAPSHOT.jar",
  +        "plexus/jars/plexus-utils-1.0-alpha-2-SNAPSHOT.jar",
           "surefire/jars/surefire-booter-1.2-SNAPSHOT.jar",
           "surefire/jars/surefire-1.2-SNAPSHOT.jar",
           "qdox/jars/qdox-1.2.jar" };
  @@ -83,6 +83,7 @@
           "maven-artifact",
           "maven-script/maven-script-marmalade",
           "maven-core",
  +        "maven-archiver",
           "maven-plugin-tools/maven-plugin-tools-api",
           "maven-plugin-tools/maven-plugin-tools-java",
           "maven-plugin-tools/maven-plugin-tools-pluggy",
  
  
  
  1.10      +5 -0      maven-components/maven-plugins/maven-jar-plugin/pom.xml
  
  Index: pom.xml
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-plugins/maven-jar-plugin/pom.xml,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- pom.xml	27 Feb 2005 17:45:41 -0000	1.9
  +++ pom.xml	5 Mar 2005 14:52:11 -0000	1.10
  @@ -26,6 +26,11 @@
       </dependency>
       <dependency>
         <groupId>maven</groupId>
  +      <artifactId>maven-archiver</artifactId>
  +      <version>1.0-SNAPSHOT</version>
  +    </dependency>
  +    <dependency>
  +      <groupId>maven</groupId>
         <artifactId>maven-artifact</artifactId>
         <version>2.0-SNAPSHOT</version>
       </dependency>
  
  
  
  1.15      +8 -28     maven-components/maven-plugins/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarMojo.java
  
  Index: JarMojo.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-plugins/maven-jar-plugin/src/main/java/org/apache/maven/plugin/jar/JarMojo.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- JarMojo.java	27 Feb 2005 23:58:41 -0000	1.14
  +++ JarMojo.java	5 Mar 2005 14:52:11 -0000	1.15
  @@ -16,10 +16,10 @@
    * limitations under the License.
    */
   
  +import org.apache.maven.archiver.MavenArchiver;
   import org.apache.maven.plugin.PluginExecutionRequest;
   import org.apache.maven.plugin.PluginExecutionResponse;
   import org.apache.maven.project.MavenProject;
  -import org.codehaus.plexus.archiver.jar.JarArchiver;
   
   import java.io.File;
   
  @@ -120,45 +120,25 @@
           //
           // ----------------------------------------------------------------------
   
  -        MavenProject project = (MavenProject)request.getParameter("project");
  -
  -        String manifest = (String) request.getParameter( "manifest" );
  -
           File basedir = new File( (String) request.getParameter( "basedir" ) );
   
           String outputDirectory = (String) request.getParameter( "outputDirectory" );
   
           String jarName = (String) request.getParameter( "jarName" );
   
  -        boolean compress = new Boolean( (String) request.getParameter( "compress" ) ).booleanValue();
  -
  -        boolean index = new Boolean( (String) request.getParameter( "index" ) ).booleanValue();
  -
           // ----------------------------------------------------------------------
           //
           // ----------------------------------------------------------------------
   
  -
           File jarFile = new File( basedir, jarName + ".jar" );
   
  -        JarArchiver archiver = new JarArchiver();
  -        archiver.addDirectory( new File( outputDirectory ), new String[] { "**/**" }, new String[] { "**/package.html" } );
  -        archiver.addFile( project.getFile(), "META-INF/maven/pom.xml" );
  -
  -        if (manifest != null && ! "".equals( manifest ) )
  -        {
  -            File manifestFile = new File( manifest );
  -            archiver.setManifest( manifestFile );
  -        }
  -
  -        // Configure the jar
  -        archiver.addConfiguredManifest( getManifest( request ) );
  -
  -        archiver.setCompress( compress );
  -        archiver.setIndex( index );
  -        archiver.setDestFile( jarFile );
  +        MavenArchiver archiver = new MavenArchiver();
  +
  +        archiver.setOutputFile( jarFile );
  +
  +        archiver.getArchiver().addDirectory( new File( outputDirectory ), new String[] { "**/**" }, new String[] { "**/package.html" } );
   
           // create archive
  -        archiver.createArchive();
  +        archiver.createArchive( request );
       }
   }
  
  
  
  1.3       +10 -6     maven-components/maven-plugins/maven-war-plugin/pom.xml
  
  Index: pom.xml
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-plugins/maven-war-plugin/pom.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- pom.xml	4 Mar 2005 09:04:26 -0000	1.2
  +++ pom.xml	5 Mar 2005 14:52:11 -0000	1.3
  @@ -20,12 +20,6 @@
         <version>2.0-SNAPSHOT</version>
       </dependency>
       <dependency>
  -      <groupId>maven</groupId>
  -      <artifactId>maven-jar-plugin</artifactId>
  -      <version>1.0-SNAPSHOT</version>
  -      <type>plugin</type>
  -    </dependency>
  -    <dependency>
         <groupId>plexus</groupId>
         <artifactId>plexus-container-default</artifactId>
         <version>1.0-alpha-2-SNAPSHOT</version>
  @@ -37,6 +31,11 @@
       </dependency>
       <dependency>
         <groupId>maven</groupId>
  +      <artifactId>maven-archiver</artifactId>
  +      <version>1.0-SNAPSHOT</version>
  +    </dependency>
  +    <dependency>
  +      <groupId>maven</groupId>
         <artifactId>maven-artifact</artifactId>
         <version>2.0-SNAPSHOT</version>
       </dependency>
  @@ -50,5 +49,10 @@
         <artifactId>maven-model</artifactId>
         <version>2.0-SNAPSHOT</version>
       </dependency>
  +    <dependency>
  +      <groupId>maven</groupId>
  +      <artifactId>wagon-api</artifactId>
  +      <version>1.0-alpha-1-SNAPSHOT</version>
  +    </dependency>
     </dependencies>
   </project>
  
  
  
  1.3       +213 -13   maven-components/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/WarMojo.java
  
  Index: WarMojo.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-plugins/maven-war-plugin/src/main/java/org/apache/maven/plugin/war/WarMojo.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WarMojo.java	4 Mar 2005 09:04:14 -0000	1.2
  +++ WarMojo.java	5 Mar 2005 14:52:11 -0000	1.3
  @@ -16,19 +16,30 @@
    * limitations under the License.
    */
   
  +import java.io.IOException;
  +import java.io.File;
  +import java.util.Iterator;
  +import java.util.Set;
  +
  +import org.apache.maven.archiver.MavenArchiver;
  +import org.apache.maven.artifact.Artifact;
  +import org.apache.maven.artifact.repository.ArtifactRepository;
   import org.apache.maven.plugin.AbstractPlugin;
   import org.apache.maven.plugin.PluginExecutionRequest;
   import org.apache.maven.plugin.PluginExecutionResponse;
   import org.apache.maven.project.MavenProject;
   
  +import org.codehaus.plexus.archiver.war.WarArchiver;
  +import org.codehaus.plexus.util.FileUtils;
  +
   /**
    * @goal war
    * @phase package
    *
  - * @description build a jar
  + * @description build a war/webapp
    *
    * @parameter
  - *  name="jarName"
  + *  name="warName"
    *  type="String"
    *  required="true"
    *  validator=""
  @@ -58,34 +69,66 @@
    *  expression="#maven.jar.manifest"
    *  description=""
    * @parameter
  - *  name="mainClass"
  + *  name="addExtensions"
    *  type="String"
    *  required="false"
    *  validator=""
  - *  expression="#maven.jar.mainClass"
  + *  expression="#maven.jar.addExtensions"
  + *  default="false"
  + *  description=""
  + * @parameter
  + *  name="warSourceDirectory"
  + *  type="String"
  + *  required="true"
  + *  validator=""
  + *  expression="#maven.war.src"
  + *  default="#basedir/src/webapp"
    *  description=""
    * @parameter
  - *  name="addClasspath"
  + *  name="warSourceIncludes"
    *  type="String"
    *  required="false"
    *  validator=""
  - *  expression="#maven.jar.addClasspath"
  - *  default="false"
  + *  expression="#maven.war.src.includes"
  + *  default="**"
    *  description=""
    * @parameter
  - *  name="addExtensions"
  + *  name="warSourceIncludes"
    *  type="String"
    *  required="false"
    *  validator=""
  - *  expression="#maven.jar.addExtensions"
  - *  default="false"
  + *  expression="#maven.war.src.excludes"
  + *  description=""
  + * @parameter
  + *  name="webXml"
  + *  type="String"
  + *  required="false"
  + *  validator=""
  + *  expression="#maven.war.webxml"
  + *  description=""
  + * @parameter
  + *  name="webappDirectory"
  + *  type="String"
  + *  required="true"
  + *  validator=""
  + *  expression="#maven.war.webapp.dir"
  + *  default="#project.build.output/#project.build.finalName"
  + *  description=""
  + * @parameter
  + *  name="mode"
  + *  type="String"
  + *  required="true"
  + *  validator=""
  + *  expression="#maven.war.mode"
  + *  default="war"
    *  description=""
    * @parameter
    *  name="outputDirectory"
    *  type="String"
    *  required="true"
    *  validator=""
  - *  expression="#project.build.output"
  + *  expression="#maven.war.build.dir"
  + *  default="#project.build.output"
    *  description=""
    * @parameter
    *  name="basedir"
  @@ -94,6 +137,12 @@
    *  validator=""
    *  expression="#project.build.directory"
    *  description=""
  + * @parameter name="localRepository"
  + *  type="org.apache.maven.artifact.repository.ArtifactRepository"
  + *  required="true"
  + *  validator=""
  + *  expression="#localRepository"
  + *  description=""
    * @parameter
    *  name="project"
    *  type="org.apache.maven.project.MavenProject"
  @@ -108,13 +157,164 @@
   public class WarMojo
       extends AbstractPlugin
   {
  +    public static final String WEB_INF = "WEB_INF";
  +
  +    private PluginExecutionRequest request;
  +
  +    private String mode;
  +
  +    private MavenProject project;
  +
  +    private ArtifactRepository localRepository;
  +
  +    private String outputDirectory;
  +
  +    private File webappDirectory;
  +
  +    private File warSourceDirectory;
  +
  +    private String warSourceIncludes;
  +
  +    private String warSourceExcludes;
  +
  +    private String webXml;
  +
  +    private File warFile;
  +
  +    public void copyResources( File sourceDirectory, File webappDirectory, String includes, String excludes, String webXml )
  +        throws IOException
  +    {
  +        if ( sourceDirectory != webappDirectory )
  +        {
  +            request.getLog().info( "Copy webapp resources to " + webappDirectory.getAbsolutePath() );
  +
  +            if ( warSourceDirectory.exists() )
  +            {
  +                FileUtils.copyDirectory( sourceDirectory, webappDirectory, includes, excludes );
  +            }
  +
  +            if ( webXml != null && ! "".equals( webXml ) )
  +            {
  +                FileUtils.copyFileToDirectory( new File( webXml ), new File( webappDirectory, WEB_INF ) );
  +            }
  +        }
  +    }
  +
  +    /**
  +     * @todo properties 'war.bundle' and 'war.target.path'
  +     * @todo copy classes to classes webapp directory
  +     */
  +    public void buildWebapp( MavenProject project )
  +        throws IOException
  +    {
  +        request.getLog().info( "Assembling webapp " + project.getArtifactId() );
  +
  +        File libDirectory = new File( webappDirectory, WEB_INF + "/lib" );
  +
  +        File tldDirectory = new File( webappDirectory, WEB_INF + "/tld" );
  +
  +        File classesDirectory = new File( webappDirectory, WEB_INF + "/classes" );
  +
  +        Set artifacts = project.getArtifacts();
  +
  +        for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
  +        {
  +            Artifact artifact = (Artifact) iter.next();
  +            if ( "jar".equals( artifact.getType() ) )
  +            {
  +                FileUtils.copyFileToDirectory( new File( localRepository.getBasedir(), artifact.toString() ) , libDirectory );
  +            }
  +            if ( "tld".equals( artifact.getType() ) )
  +            {
  +                FileUtils.copyFileToDirectory( new File( localRepository.getBasedir(), artifact.toString() ) , tldDirectory );
  +            }
  +        }
  +    }
  +
  +    public void generateExplodedWebapp()
  +        throws IOException
  +    {
  +        webappDirectory.mkdirs();
  +
  +        File webinfDir = new File( webappDirectory, WEB_INF );
  +
  +        webinfDir.mkdirs();
  +
  +        copyResources( warSourceDirectory, webappDirectory, warSourceIncludes, warSourceExcludes, webXml );
  +
  +        //buildWebapp( project );
  +    }
  +
  +    public void generateInPlaceWebapp()
  +        throws IOException
  +    {
  +        webappDirectory = warSourceDirectory;
  +
  +        generateExplodedWebapp();
  +    }
  +
       public void execute( PluginExecutionRequest request, PluginExecutionResponse response )
           throws Exception
       {
           // ----------------------------------------------------------------------
           //
           // ----------------------------------------------------------------------
  -        request.getLog().info("war");
   
  +        parseRequest( request );
  +
  +        // ----------------------------------------------------------------------
  +        //
  +        // ----------------------------------------------------------------------
  +
  +        if ( "inplace".equals( mode ) )
  +        {
  +            generateInPlaceWebapp();
  +        }
  +        else
  +        {
  +            generateExplodedWebapp();
  +
  +            if ( ! "exploded".equals( mode ) )
  +            {
  +                //generate war file
  +                request.getLog().info( "Generating war " + warFile.getAbsolutePath() );
  +
  +                MavenArchiver archiver = new MavenArchiver();
  +
  +                //archiver.setArchiver( new WarArchiver() );
  +
  +                archiver.setOutputFile( warFile );
  +
  +                archiver.getArchiver().addDirectory( webappDirectory, new String[] { "**/**" }, null );
  +
  +                // create archive
  +                archiver.createArchive( request );
  +            }
  +        }
  +    }
  +
  +    public void parseRequest( PluginExecutionRequest request )
  +    {
  +        this.request = request;
  +
  +        project = (MavenProject) request.getParameter( "project" );
  +
  +        localRepository = (ArtifactRepository) request.getParameter( "localRepository" );
  +
  +        outputDirectory = (String) request.getParameter( "outputDirectory" );
  +
  +        webappDirectory = new File( (String) request.getParameter( "webappDirectory" ) );
  +
  +        warSourceDirectory = new File( (String) request.getParameter( "warSourceDirectory" ) );
  +
  +        warSourceIncludes = (String) request.getParameter( "warSourceIncludes" );
  +
  +        warSourceExcludes = (String) request.getParameter( "warSourceExcludes" );
  +
  +        webXml = (String) request.getParameter( "webXml" );
  +
  +        mode = (String) request.getParameter( "mode" );
  +
  +        warFile = new File( outputDirectory, (String) request.getParameter( "warName" ) + ".war" );
       }
   }
  
  
  
  1.15      +1 -1      maven-components/maven-plugins/pom.xml
  
  Index: pom.xml
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-plugins/pom.xml,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- pom.xml	4 Mar 2005 09:04:20 -0000	1.14
  +++ pom.xml	5 Mar 2005 14:52:11 -0000	1.15
  @@ -58,7 +58,7 @@
       <dependency>
         <groupId>plexus</groupId>
         <artifactId>plexus-utils</artifactId>
  -      <version>1.0-alpha-1-SNAPSHOT</version>
  +      <version>1.0-alpha-2-SNAPSHOT</version>
       </dependency>    
     </dependencies>
   </project>
  
  
  
  1.1                  maven-components/maven-archiver/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  *~
  *.log
  target
  dist
  *.ipr
  *.iws
  *.iml
  dist
  target
  .classpath
  .project
  build.xml
  
  
  
  1.1                  maven-components/maven-archiver/pom.xml
  
  Index: pom.xml
  ===================================================================
  <project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
      <groupId>maven</groupId>
      <artifactId>maven-component</artifactId>
      <version>2.0-SNAPSHOT</version>
    </parent>
    <groupId>maven</groupId>
    <artifactId>maven-archiver</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>maven-monitor</artifactId>
        <version>2.0-SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>plexus</groupId>
        <artifactId>plexus-container-default</artifactId>
        <version>1.0-alpha-2-SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>plexus</groupId>
        <artifactId>plexus-archiver</artifactId>
        <version>1.0-alpha-1-SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>maven-artifact</artifactId>
        <version>2.0-SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>maven-core</artifactId>
        <version>2.0-SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>maven-model</artifactId>
        <version>2.0-SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>maven-plugin</artifactId>
        <version>2.0-SNAPSHOT</version>
      </dependency>
    </dependencies>
  </project>
  
  
  1.1                  maven-components/maven-archiver/src/main/java/org/apache/maven/archiver/MavenArchiver.java
  
  Index: MavenArchiver.java
  ===================================================================
  package org.apache.maven.archiver;
  
  /* ====================================================================
   *   Copyright 2001-2005 The Apache Software Foundation.
   *
   *   Licensed under the Apache License, Version 2.0 (the "License");
   *   you may not use this file except in compliance with the License.
   *   You may obtain a copy of the License at
   *
   *       http://www.apache.org/licenses/LICENSE-2.0
   *
   *   Unless required by applicable law or agreed to in writing, software
   *   distributed under the License is distributed on an "AS IS" BASIS,
   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *   See the License for the specific language governing permissions and
   *   limitations under the License.
   * ====================================================================
   */
  
  import org.apache.maven.artifact.Artifact;
  import org.apache.maven.model.Dependency;
  import org.apache.maven.plugin.PluginExecutionRequest;
  import org.apache.maven.project.MavenProject;
  
  import org.codehaus.plexus.archiver.jar.JarArchiver;
  import org.codehaus.plexus.archiver.jar.Manifest;
  
  import java.io.File;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Properties;
  import java.util.Set;
  
  /**
   * @author <a href="evenisse@apache.org">Emmanuel Venisse</a>
   * @version $Revision: 1.1 $ $Date: 2005/03/05 14:52:12 $
   */
  public class MavenArchiver
  {
      JarArchiver archiver = new JarArchiver();
  
      File archiveFile;
  
      /**
       * Return a pre-configured manifest
       * @todo Add user attributes list and user groups list
       */
      public Manifest getManifest( PluginExecutionRequest request )
          throws Exception
      {
          MavenProject project = (MavenProject)request.getParameter("project");
  
          String mainClass = (String) request.getParameter( "mainClass" );
  
          boolean addClasspath = new Boolean( (String) request.getParameter( "addClasspath" ) ).booleanValue();
  
          boolean addExtensions = new Boolean( (String) request.getParameter( "addExtensions" ) ).booleanValue();
  
          // Added basic entries
          Manifest m = new Manifest();
          Manifest.Attribute buildAttr = new Manifest.Attribute( "Built-By", System.getProperty( "user.name" ) );
          m.addConfiguredAttribute( buildAttr );
          Manifest.Attribute createdAttr = new Manifest.Attribute( "Created-By", "Apache Maven" );
          m.addConfiguredAttribute( createdAttr );
          Manifest.Attribute packageAttr = new Manifest.Attribute( "Package", project.getPackage() );
          m.addConfiguredAttribute( packageAttr );
          Manifest.Attribute buildJdkAttr = new Manifest.Attribute( "Build-Jdk", System.getProperty( "java.version" ) );
          m.addConfiguredAttribute( buildJdkAttr );
  
          if ( addClasspath )
          {
              StringBuffer classpath = new StringBuffer();
              List dependencies = project.getDependencies();
  
              for ( Iterator iter = dependencies.iterator(); iter.hasNext(); )
              {
                  Dependency dependency = (Dependency) iter.next();
                  Properties properties = dependency.getProperties();
                  if ( Boolean.valueOf(properties.getProperty("manifest.classpath")).booleanValue())
                  {
                      if (classpath.length() > 0 )
                      {
                          classpath.append( " " );
                      }
  
                      // TODO replace dependency by artifact
                      classpath.append( dependency.getArtifactId() + "-" + dependency.getVersion() + ".jar");
                  }
              }
              
              Manifest.Attribute classpathAttr = new Manifest.Attribute( "Class-Path", classpath.toString() );
              m.addConfiguredAttribute( classpathAttr );
          }
  
          // Added supplementary entries
          Manifest.Attribute extensionNameAttr = new Manifest.Attribute( "Extension-Name", project.getArtifactId() );
          m.addConfiguredAttribute( extensionNameAttr );
          
          if ( project.getShortDescription() != null )
          {
              Manifest.Attribute specificationTitleAttr = new Manifest.Attribute( "Specification-Title", project.getShortDescription() );
              m.addConfiguredAttribute( specificationTitleAttr );
          }
  
          if ( project.getOrganization() != null )
          {
              Manifest.Attribute specificationVendor = new Manifest.Attribute( "Specification-Vendor", project.getOrganization().getName() );
              m.addConfiguredAttribute( specificationVendor );
              Manifest.Attribute implementationVendorAttr = new Manifest.Attribute( "Implementation-Vendor", project.getOrganization().getName() );
              m.addConfiguredAttribute( implementationVendorAttr );
          }
  
          Manifest.Attribute implementationTitleAttr = new Manifest.Attribute( "Implementation-Title", project.getArtifactId() );
          m.addConfiguredAttribute( implementationTitleAttr );
          Manifest.Attribute implementationVersionAttr = new Manifest.Attribute( "Implementation-Version", project.getVersion() );
          m.addConfiguredAttribute( implementationVersionAttr );
  
          if ( mainClass != null && ! "".equals( mainClass ) )
          {
              Manifest.Attribute mainClassAttr = new Manifest.Attribute( "Main-Class", mainClass );
              m.addConfiguredAttribute( mainClassAttr );
          }
  
          // Added extensions
          if ( addExtensions )
          {
              StringBuffer extensionsList = new StringBuffer();
              Set artifacts = project.getArtifacts();
  
              for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
              {
                  Artifact artifact = (Artifact) iter.next();
                  if ( "jar".equals( artifact.getType() ) )
                  {
                      if (extensionsList.length() > 0 )
                      {
                          extensionsList.append( " " );
                      }
                      extensionsList.append( artifact.getArtifactId() );
                  }
              }
  
              if (extensionsList.length() > 0 )
              {
                  Manifest.Attribute extensionsListAttr = new Manifest.Attribute( "Extension-List", extensionsList.toString() );
                  m.addConfiguredAttribute( extensionsListAttr );
              }
  
              for ( Iterator iter = artifacts.iterator(); iter.hasNext(); )
              {
                  Artifact artifact = (Artifact) iter.next();
                  if ( "jar".equals( artifact.getType() ) )
                  {
                      Manifest.Attribute archExtNameAttr = new Manifest.Attribute( artifact.getArtifactId()
                          + "-Extension-Name", artifact.getArtifactId() );
                      m.addConfiguredAttribute( archExtNameAttr );
                      Manifest.Attribute archImplVersionAttr = new Manifest.Attribute( artifact.getArtifactId()
                          + "-Implementation-Version", artifact.getVersion() );
                      m.addConfiguredAttribute( archImplVersionAttr );
                      Manifest.Attribute archImplUrlAttr = new Manifest.Attribute( artifact.getArtifactId()
                          + "-Implementation-URL", "http://www.ibiblio.org/maven/" + artifact.toString() );
                      m.addConfiguredAttribute( archImplUrlAttr );
                  }
              }
          }
  
          return m;
      }
  
      public JarArchiver getArchiver()
      {
          return archiver;
      }
  
      public void setArchiver( JarArchiver archiver )
      {
          this.archiver = archiver;
      }
  
      public void setOutputFile( File outputFile )
      {
          archiveFile = outputFile;
      }
  
      public void createArchive( PluginExecutionRequest request )
          throws Exception
      {
          // ----------------------------------------------------------------------
          //
          // ----------------------------------------------------------------------
  
          MavenProject project = (MavenProject)request.getParameter("project");
  
          String manifest = (String) request.getParameter( "manifest" );
  
          boolean compress = new Boolean( (String) request.getParameter( "compress" ) ).booleanValue();
  
          boolean index = new Boolean( (String) request.getParameter( "index" ) ).booleanValue();
  
          // ----------------------------------------------------------------------
          //
          // ----------------------------------------------------------------------
  
          archiver.addFile( project.getFile(), "META-INF/maven/pom.xml" );
  
          if (manifest != null && ! "".equals( manifest ) )
          {
              File manifestFile = new File( manifest );
              archiver.setManifest( manifestFile );
          }
  
          // Configure the jar
          archiver.addConfiguredManifest( getManifest( request ) );
  
          archiver.setCompress( compress );
          archiver.setIndex( index );
          archiver.setDestFile( archiveFile );
  
          // create archive
          archiver.createArchive();
      }
  }