You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2006/01/04 01:59:57 UTC

svn commit: r365787 - in /maven/plugins/trunk/maven-assembly-plugin/src/main: java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java java/org/apache/maven/plugin/assembly/DirectoryMojo.java mdo/descriptor.mdo

Author: brett
Date: Tue Jan  3 16:59:51 2006
New Revision: 365787

URL: http://svn.apache.org/viewcvs?rev=365787&view=rev
Log:
Allow for multiple descriptors to be processed in an assembly. Applied with modifications.
PR: MASSEMBLY-25
Submitted by: Jochen Wiedmann

Modified:
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DirectoryMojo.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java?rev=365787&r1=365786&r2=365787&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java Tue Jan  3 16:59:51 2006
@@ -60,8 +60,10 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -74,9 +76,25 @@
     extends AbstractUnpackingMojo
 {
     /**
+     * A list of descriptor files to generate from.
+     *
+     * @parameter
+     */
+    private File[] descriptors;
+
+    /**
+     * A list of built-in descriptor references to generate from. You can select from <code>bin</code>,
+     * <code>jar-with-dependencies</code>, or <code>src</code>.
+     *
+     * @parameter
+     */
+    private String[] descriptorRefs;
+
+    /**
      * Predefined Assembly Descriptor Id's.  You can select bin, jar-with-dependencies, or src.
      *
      * @parameter expression="${descriptorId}"
+     * @deprecated Please use descriptorRefs instead
      */
     protected String descriptorId;
 
@@ -84,6 +102,7 @@
      * Assembly XML Descriptor file.  This must be the path to your customized descriptor file.
      *
      * @parameter expression="${descriptor}"
+     * @deprecated Please use descriptors instead
      */
     protected File descriptor;
 
@@ -142,6 +161,7 @@
      * Set to true to include the site generated by site:site goal.
      *
      * @parameter expression="${includeSite}" default-value="false"
+     * @deprecated Please set this variable in the assembly descriptor instead
      */
     private boolean includeSite;
 
@@ -168,11 +188,21 @@
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
-        Assembly assembly = readAssembly();
+        List assemblies = readAssemblies();
 
         // TODO: include dependencies marked for distribution under certain formats
         // TODO: how, might we plug this into an installer, such as NSIS?
 
+        for ( Iterator i = assemblies.iterator(); i.hasNext(); )
+        {
+            Assembly assembly = (Assembly) i.next();
+            createAssembly( assembly );
+        }
+    }
+
+    private void createAssembly( Assembly assembly )
+        throws MojoExecutionException, MojoFailureException
+    {
         String fullName = getDistributionName( assembly );
 
         for ( Iterator i = assembly.getFormats().iterator(); i.hasNext(); )
@@ -287,41 +317,91 @@
         return destFile;
     }
 
-    protected Assembly readAssembly()
+    protected List readAssemblies()
         throws MojoFailureException, MojoExecutionException
     {
-        Reader r;
+        List assemblies = new ArrayList();
 
         if ( descriptor != null )
         {
-            try
+            assemblies.add( getAssembly( descriptor ) );
+        }
+
+        if ( descriptorId != null )
+        {
+            assemblies.add( getAssembly( descriptorId ) );
+        }
+
+        if ( descriptors != null && descriptors.length > 0 )
+        {
+            for ( int i = 0; i < descriptors.length; i++ )
             {
-                r = new FileReader( descriptor );
+                assemblies.add( getAssembly( descriptors[i] ) );
             }
-            catch ( FileNotFoundException e )
+        }
+
+        if ( descriptorRefs != null && descriptorRefs.length > 0 )
+        {
+            for ( int i = 0; i < descriptorRefs.length; i++ )
             {
-                throw new MojoFailureException( "Unable to find descriptor: " + e.getMessage() );
+                assemblies.add( getAssembly( descriptorRefs[i] ) );
             }
         }
-        else if ( descriptorId != null )
+
+        if ( assemblies.isEmpty() )
+        {
+            throw new MojoFailureException( "No assembly descriptors found." );
+        }
+
+        // check unique IDs
+        Set ids = new HashSet();
+        for ( Iterator i = assemblies.iterator(); i.hasNext(); )
         {
-            InputStream resourceAsStream = getClass().getResourceAsStream( "/assemblies/" + descriptorId + ".xml" );
-            if ( resourceAsStream == null )
+            Assembly assembly = (Assembly) i.next();
+            if ( !ids.add( assembly.getId() ) )
             {
-                throw new MojoFailureException( "Descriptor with ID '" + descriptorId + "' not found" );
+                throw new MojoFailureException( "The assembly id " + assembly.getId() + " is used more than once." );
             }
-            r = new InputStreamReader( resourceAsStream );
+
+        }
+        return assemblies;
+    }
+
+    private Assembly getAssembly( String ref )
+        throws MojoFailureException, MojoExecutionException
+    {
+        InputStream resourceAsStream = getClass().getResourceAsStream( "/assemblies/" + ref + ".xml" );
+        if ( resourceAsStream == null )
+        {
+            throw new MojoFailureException( "Descriptor with ID '" + ref + "' not found" );
+        }
+        return getAssembly( new InputStreamReader( resourceAsStream ) );
+    }
+
+    private Assembly getAssembly( File file )
+        throws MojoFailureException, MojoExecutionException
+    {
+        Reader r;
+        try
+        {
+            r = new FileReader( file );
         }
-        else
+        catch ( FileNotFoundException e )
         {
-            throw new MojoFailureException( "You must specify descriptor or descriptorId" );
+            throw new MojoFailureException( "Unable to find descriptor: " + e.getMessage() );
         }
 
+        return getAssembly( r );
+    }
+
+    private Assembly getAssembly( Reader reader )
+        throws MojoExecutionException
+    {
         Assembly assembly;
         try
         {
-            AssemblyXpp3Reader reader = new AssemblyXpp3Reader();
-            assembly = reader.read( r );
+            AssemblyXpp3Reader r = new AssemblyXpp3Reader();
+            assembly = r.read( reader );
         }
         catch ( IOException e )
         {
@@ -333,10 +413,10 @@
         }
         finally
         {
-            IOUtil.close( r );
+            IOUtil.close( reader );
         }
 
-        if ( includeSite )
+        if ( includeSite || assembly.isIncludeSiteDirectory() )
         {
             includeSiteInAssembly( assembly );
         }

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DirectoryMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DirectoryMojo.java?rev=365787&r1=365786&r2=365787&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DirectoryMojo.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/DirectoryMojo.java Tue Jan  3 16:59:51 2006
@@ -25,6 +25,8 @@
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
 
 /**
  * Assemble an application bundle or distribution.
@@ -39,7 +41,17 @@
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
-        Assembly assembly = readAssembly();
+        List assemblies = readAssemblies();
+        for ( Iterator i = assemblies.iterator(); i.hasNext(); )
+        {
+            Assembly assembly = (Assembly) i.next();
+            createDirectory( assembly );
+        }
+    }
+
+    private void createDirectory( Assembly assembly )
+        throws MojoExecutionException, MojoFailureException
+    {
         String fullName = finalName;
 
         if ( appendAssemblyId )

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo?rev=365787&r1=365786&r2=365787&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/mdo/descriptor.mdo Tue Jan  3 16:59:51 2006
@@ -37,6 +37,11 @@
           <defaultValue>true</defaultValue>
         </field>
         <field>
+          <name>includeSiteDirectory</name>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+        </field>
+        <field>
           <name>fileSets</name>
           <version>1.0.0</version>
           <association>
@@ -52,7 +57,7 @@
             <multiplicity>*</multiplicity>
           </association>
         </field>
-        
+
         <field>
           <name>dependencySets</name>
           <version>1.0.0</version>
@@ -125,8 +130,8 @@
     <class>
       <name>FileItem</name>
       <version>1.0.0</version>
-      <description>Allows individual file copy with option to change destination 
-                   file name not supported by fileSet</description>
+      <description>Allows individual file copy with option to change destination
+        file name not supported by fileSet</description>
       <fields>
         <field>
           <name>source</name>
@@ -162,7 +167,7 @@
         </field>
       </fields>
     </class>
-    
+
     <class>
       <name>DependencySet</name>
       <version>1.0.0</version>