Author: jdcasey
Date: Mon Feb 18 13:06:33 2008
New Revision: 628867

URL: http://svn.apache.org/viewvc?rev=628867&view=rev
Log:
[MASSEMBLY-278] Adding parameter ignoreMissingDescriptor (default value: false) 
to allow reuse of a single assembly configuration throughout a multimodule 
build, without failing on submodules that don't contain the assembly descriptor 
referenced by the configuration...instead, simply don't run for these cases.

Patch submitted by: Sejal Patel
NOTE: I added two unit tests to DefaultAssemblyReaderTest to test this new 
functionality.

Modified:
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java?rev=628867&r1=628866&r2=628867&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
 Mon Feb 18 13:06:33 2008
@@ -80,4 +80,5 @@
 
     boolean isIgnoreDirFormatExtensions();
 
+    boolean isIgnoreMissingDescriptor();
 }

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java?rev=628867&r1=628866&r2=628867&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java
 Mon Feb 18 13:06:33 2008
@@ -122,13 +122,13 @@
         if ( descriptor != null )
         {
             locator.setStrategies( strategies );
-            assemblies.add( getAssemblyFromDescriptor( descriptor, locator, 
configSource ) );
+            addAssemblyFromDescriptor( descriptor, locator, configSource, 
assemblies );
         }
 
         if ( descriptorId != null )
         {
             locator.setStrategies( refStrategies );
-            assemblies.add( getAssemblyForDescriptorReference( descriptorId, 
configSource ) );
+            addAssemblyForDescriptorReference( descriptorId, configSource, 
assemblies );
         }
 
         if ( ( descriptors != null ) && ( descriptors.length > 0 ) )
@@ -137,7 +137,7 @@
             for ( int i = 0; i < descriptors.length; i++ )
             {
                 getLogger().info( "Reading assembly descriptor: " + 
descriptors[i] );
-                assemblies.add( getAssemblyFromDescriptor( descriptors[i], 
locator, configSource ) );
+                addAssemblyFromDescriptor( descriptors[i], locator, 
configSource, assemblies );
             }
         }
 
@@ -146,7 +146,7 @@
             locator.setStrategies( refStrategies );
             for ( int i = 0; i < descriptorRefs.length; i++ )
             {
-                assemblies.add( getAssemblyForDescriptorReference( 
descriptorRefs[i], configSource ) );
+                addAssemblyForDescriptorReference( descriptorRefs[i], 
configSource, assemblies );
             }
         }
 
@@ -190,14 +190,21 @@
             {
                 for ( int i = 0; i < paths.length; i++ )
                 {
-                    assemblies.add( getAssemblyFromDescriptor( paths[i], 
locator, configSource ) );
+                    addAssemblyFromDescriptor( paths[i], locator, 
configSource, assemblies );
                 }
             }
         }
 
         if ( assemblies.isEmpty() )
         {
-            throw new AssemblyReadException( "No assembly descriptors found." 
);
+            if ( configSource.isIgnoreMissingDescriptor() )
+            {
+                getLogger().debug( "Ignoring missing assembly descriptors per 
configuration. See messages above for specifics." );
+            }
+            else
+            {
+                throw new AssemblyReadException( "No assembly descriptors 
found." );
+            }
         }
 
         // check unique IDs
@@ -217,17 +224,40 @@
     public Assembly getAssemblyForDescriptorReference( String ref, 
AssemblerConfigurationSource configSource )
         throws AssemblyReadException, InvalidAssemblerConfigurationException
     {
+        return addAssemblyForDescriptorReference( ref, configSource, new 
ArrayList( 1 ) );
+    }
+
+    public Assembly getAssemblyFromDescriptorFile( File file, 
AssemblerConfigurationSource configSource )
+        throws AssemblyReadException, InvalidAssemblerConfigurationException
+    {
+        return addAssemblyFromDescriptorFile( file, configSource, new 
ArrayList( 1 ) );
+    }
+
+    private Assembly addAssemblyForDescriptorReference( String ref, 
AssemblerConfigurationSource configSource, List assemblies )
+        throws AssemblyReadException, InvalidAssemblerConfigurationException
+    {
         InputStream resourceAsStream = getClass().getResourceAsStream( 
"/assemblies/" + ref + ".xml" );
 
         if ( resourceAsStream == null )
         {
-            throw new AssemblyReadException( "Descriptor with ID '" + ref + "' 
not found" );
+            if ( configSource.isIgnoreMissingDescriptor() )
+            {
+                getLogger().debug( "Ignoring missing assembly descriptor with 
ID '" + ref + "' per configuration." );
+                return null;
+            }
+            else
+            {
+                throw new AssemblyReadException( "Descriptor with ID '" + ref 
+ "' not found" );
+            }
         }
 
         try
         {
             // TODO use ReaderFactory.newXmlReader() when plexus-utils is 
upgraded to 1.4.5+
-            return readAssembly( new InputStreamReader( resourceAsStream, 
"UTF-8" ), ref, configSource );
+            Assembly assembly = readAssembly( new InputStreamReader( 
resourceAsStream, "UTF-8" ), ref, configSource );
+
+            assemblies.add( assembly );
+            return assembly;
         }
         catch ( UnsupportedEncodingException e )
         {
@@ -236,15 +266,32 @@
         }
     }
 
-    public Assembly getAssemblyFromDescriptorFile( File descriptor, 
AssemblerConfigurationSource configSource )
+    private Assembly addAssemblyFromDescriptorFile( File descriptor, 
AssemblerConfigurationSource configSource, List assemblies )
         throws AssemblyReadException, InvalidAssemblerConfigurationException
     {
+        if ( !descriptor.exists() )
+        {
+            if ( configSource.isIgnoreMissingDescriptor() )
+            {
+                getLogger().debug( "Ignoring missing assembly descriptor: '" + 
descriptor + "' per configuration." );
+                return null;
+            }
+            else
+            {
+                throw new AssemblyReadException( "Descriptor: '" + descriptor 
+ "' not found" );
+            }
+        }
+
         Reader r = null;
         try
         {
             // TODO use ReaderFactory.newXmlReader() when plexus-utils is 
upgraded to 1.4.5+
             r = new InputStreamReader( new FileInputStream( descriptor ), 
"UTF-8" );
-            return readAssembly( r, descriptor.getAbsolutePath(), configSource 
);
+            Assembly assembly = readAssembly( r, descriptor.getAbsolutePath(), 
configSource );
+
+            assemblies.add( assembly );
+
+            return assembly;
         }
         catch ( IOException e )
         {
@@ -256,14 +303,25 @@
         }
     }
 
-    public Assembly getAssemblyFromDescriptor( String spec, Locator locator, 
AssemblerConfigurationSource configSource )
+    private Assembly addAssemblyFromDescriptor( String spec, Locator locator, 
AssemblerConfigurationSource configSource, List assemblies )
         throws AssemblyReadException, InvalidAssemblerConfigurationException
     {
         Location location = locator.resolve( spec );
 
         if ( location == null )
         {
-            throw new AssemblyReadException( "Error locating assembly 
descriptor: " + spec + "\n\n" + locator.getMessageHolder().render() );
+            if ( configSource.isIgnoreMissingDescriptor() )
+            {
+                getLogger().debug( "Ignoring missing assembly descriptor with 
ID '" + spec
+                                   + "' per configuration.\nLocator output 
was:\n\n"
+                                   + locator.getMessageHolder().render() );
+                return null;
+            }
+            else
+            {
+                throw new AssemblyReadException( "Error locating assembly 
descriptor: " + spec
+                                                 + "\n\n" + 
locator.getMessageHolder().render() );
+            }
         }
 
         Reader r = null;
@@ -271,7 +329,11 @@
         {
          // TODO use ReaderFactory.newXmlReader() when plexus-utils is 
upgraded to 1.4.5+
             r = new InputStreamReader( location.getInputStream(), "UTF-8" );
-            return readAssembly( r, spec, configSource );
+            Assembly assembly = readAssembly( r, spec, configSource );
+
+            assemblies.add( assembly );
+
+            return assembly;
         }
         catch ( IOException e )
         {

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java?rev=628867&r1=628866&r2=628867&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
 Mon Feb 18 13:06:33 2008
@@ -238,6 +238,12 @@
     protected boolean appendAssemblyId;
 
     /**
+     * Set to true in order to not fail when a descriptor is missing.
+     * @parameter expression="${ignoreMissingDescriptor}" default-value="false"
+     */
+    protected boolean ignoreMissingDescriptor;
+
+    /**
      * This is a set of instructions to the archive builder, especially for 
building .jar files. It enables you to
      * specify a Manifest file for the jar, in addition to other options.
      *
@@ -625,4 +631,11 @@
         return ignoreDirFormatExtensions;
     }
 
+    public boolean isIgnoreMissingDescriptor() {
+        return ignoreMissingDescriptor;
+    }
+
+    public void setIgnoreMissingDescriptor(boolean ignoreMissingDescriptor) {
+        this.ignoreMissingDescriptor = ignoreMissingDescriptor;
+    }
 }

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java?rev=628867&r1=628866&r2=628867&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java
 Mon Feb 18 13:06:33 2008
@@ -935,6 +935,57 @@
         assertEquals( assembly.getId(), result.getId() );
     }
 
+    public void testReadAssemblies_ShouldFailWhenSingleDescriptorFileMissing()
+        throws IOException, InvalidAssemblerConfigurationException
+    {
+        File basedir = fileManager.createTempDir();
+
+        File assemblyFile = new File( basedir, "test.xml" );
+        assemblyFile.delete();
+
+        try
+        {
+            performReadAssemblies( basedir,
+                                   assemblyFile.getAbsolutePath(),
+                                   null,
+                                   null,
+                                   null,
+                                   null,
+                                   false );
+
+            fail( "Should fail when descriptor file is missing and 
ignoreDescriptors == false" );
+        }
+        catch ( AssemblyReadException e )
+        {
+            // expected.
+        }
+    }
+
+    public void 
testReadAssemblies_ShouldIgnoreMissingSingleDescriptorFileWhenIgnoreIsConfigured()
+        throws IOException, InvalidAssemblerConfigurationException
+    {
+        File basedir = fileManager.createTempDir();
+
+        File assemblyFile = new File( basedir, "test.xml" );
+        assemblyFile.delete();
+
+        try
+        {
+            performReadAssemblies( basedir,
+                                   assemblyFile.getAbsolutePath(),
+                                   null,
+                                   null,
+                                   null,
+                                   null,
+                                   true );
+        }
+        catch ( AssemblyReadException e )
+        {
+            e.printStackTrace();
+            fail( "Setting ignoreMissingDescriptor == true (true flag in 
performReadAssemblies, above) should NOT produce an exception." );
+        }
+    }
+
     public void testReadAssemblies_ShouldGetAssemblyDescriptorFromSingleRef()
         throws IOException, AssemblyReadException, 
InvalidAssemblerConfigurationException
     {
@@ -1056,7 +1107,9 @@
 
         writeAssembliesToFile( assemblies, basedir );
 
-        fileManager.createFile( basedir, "readme.txt", "This is just a readme 
file, not a descriptor." );
+        fileManager.createFile( basedir,
+                                "readme.txt",
+                                "This is just a readme file, not a 
descriptor." );
 
         List results = performReadAssemblies( basedir, null, null, null, null, 
basedir );
 
@@ -1109,6 +1162,24 @@
                                         File descriptorDir )
         throws AssemblyReadException, InvalidAssemblerConfigurationException
     {
+        return performReadAssemblies( basedir,
+                                      descriptor,
+                                      descriptorRef,
+                                      descriptors,
+                                      descriptorRefs,
+                                      descriptorDir,
+                                      false );
+    }
+
+    private List performReadAssemblies( File basedir,
+                                        String descriptor,
+                                        String descriptorRef,
+                                        String[] descriptors,
+                                        String[] descriptorRefs,
+                                        File descriptorDir,
+                                        boolean ignoreMissing )
+        throws AssemblyReadException, InvalidAssemblerConfigurationException
+    {
         configSource.getDescriptor();
         configSourceControl.setReturnValue( descriptor );
 
@@ -1133,6 +1204,9 @@
 
         configSource.isSiteIncluded();
         configSourceControl.setReturnValue( false, MockControl.ZERO_OR_MORE );
+
+        configSource.isIgnoreMissingDescriptor();
+        configSourceControl.setReturnValue( ignoreMissing, 
MockControl.ZERO_OR_MORE );
 
         mockManager.replayAll();
 


Reply via email to