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();