git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270740 13f79535-47bb-0310-9956-ffa450edef68master
@@ -21,30 +21,27 @@ import org.apache.tools.zip.ZipOutputStream; | |||
*/ | |||
public class Ear extends Jar | |||
{ | |||
private File deploymentDescriptor; | |||
private boolean descriptorAdded; | |||
private File m_appxml; | |||
private boolean m_descriptorAdded; | |||
public Ear() | |||
{ | |||
super(); | |||
archiveType = "ear"; | |||
emptyBehavior = "create"; | |||
m_archiveType = "ear"; | |||
m_emptyBehavior = "create"; | |||
} | |||
public void setAppxml( File descr ) | |||
public void setAppxml( final File appxml ) | |||
throws TaskException | |||
{ | |||
deploymentDescriptor = descr; | |||
if( !deploymentDescriptor.exists() ) | |||
throw new TaskException( "Deployment descriptor: " + deploymentDescriptor + " does not exist." ); | |||
m_appxml = appxml; | |||
if( !m_appxml.exists() ) | |||
{ | |||
final String message = "Deployment descriptor: " + | |||
m_appxml + " does not exist."; | |||
throw new TaskException( message ); | |||
} | |||
// Create a ZipFileSet for this file, and pass it up. | |||
ZipFileSet fs = new ZipFileSet(); | |||
fs.setDir( new File( deploymentDescriptor.getParent() ) ); | |||
fs.setIncludes( deploymentDescriptor.getName() ); | |||
fs.setFullpath( "META-INF/application.xml" ); | |||
super.addFileset( fs ); | |||
addFileAs( m_appxml, "META-INF/application.xml" ); | |||
} | |||
public void addArchives( ZipFileSet fs ) | |||
@@ -56,23 +53,13 @@ public class Ear extends Jar | |||
super.addFileset( fs ); | |||
} | |||
/** | |||
* Make sure we don't think we already have a web.xml next time this task | |||
* gets executed. | |||
*/ | |||
protected void cleanUp() | |||
{ | |||
descriptorAdded = false; | |||
super.cleanUp(); | |||
} | |||
protected void initZipOutputStream( ZipOutputStream zOut ) | |||
protected void initZipOutputStream( final ZipOutputStream zOut ) | |||
throws IOException, TaskException | |||
{ | |||
// If no webxml file is specified, it's an error. | |||
if( deploymentDescriptor == null && !isInUpdateMode() ) | |||
if( m_appxml == null && !isInUpdateMode() ) | |||
{ | |||
throw new TaskException( "appxml attribute is required" ); | |||
final String message = "appxml attribute is required"; | |||
throw new TaskException( message ); | |||
} | |||
super.initZipOutputStream( zOut ); | |||
@@ -87,17 +74,19 @@ public class Ear extends Jar | |||
// a <fileset> element. | |||
if( vPath.equalsIgnoreCase( "META-INF/aplication.xml" ) ) | |||
{ | |||
if( deploymentDescriptor == null || !deploymentDescriptor.equals( file ) || descriptorAdded ) | |||
if( m_appxml == null || | |||
!m_appxml.equals( file ) || | |||
m_descriptorAdded ) | |||
{ | |||
final String message = "Warning: selected " + archiveType + | |||
final String message = "Warning: selected " + m_archiveType + | |||
" files include a META-INF/application.xml which will be ignored " + | |||
"(please use appxml attribute to " + archiveType + " task)"; | |||
"(please use appxml attribute to " + m_archiveType + " task)"; | |||
getLogger().warn( message ); | |||
} | |||
else | |||
{ | |||
super.zipFile( file, zOut, vPath ); | |||
descriptorAdded = true; | |||
m_descriptorAdded = true; | |||
} | |||
} | |||
else | |||
@@ -29,7 +29,8 @@ import org.apache.tools.zip.ZipOutputStream; | |||
* | |||
* @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a> | |||
*/ | |||
public class Jar extends Zip | |||
public class Jar | |||
extends Zip | |||
{ | |||
/** | |||
* The index file name. | |||
@@ -39,16 +40,15 @@ public class Jar extends Zip | |||
/** | |||
* true if a manifest has been specified in the task | |||
*/ | |||
private boolean buildFileManifest = false; | |||
private boolean buildFileManifest; | |||
/** | |||
* jar index is JDK 1.3+ only | |||
*/ | |||
private boolean index = false; | |||
private Manifest execManifest; | |||
private Manifest manifest; | |||
private File manifestFile; | |||
private boolean m_index; | |||
private Manifest m_execManifest; | |||
private Manifest m_manifest; | |||
private File m_manifestFile; | |||
/** | |||
* constructor | |||
@@ -56,8 +56,8 @@ public class Jar extends Zip | |||
public Jar() | |||
{ | |||
super(); | |||
archiveType = "jar"; | |||
emptyBehavior = "create"; | |||
m_archiveType = "jar"; | |||
m_emptyBehavior = "create"; | |||
setEncoding( "UTF8" ); | |||
} | |||
@@ -69,7 +69,7 @@ public class Jar extends Zip | |||
*/ | |||
public void setIndex( boolean flag ) | |||
{ | |||
index = flag; | |||
m_index = flag; | |||
} | |||
public void setManifest( File manifestFile ) | |||
@@ -77,30 +77,33 @@ public class Jar extends Zip | |||
{ | |||
if( !manifestFile.exists() ) | |||
{ | |||
throw new TaskException( "Manifest file: " + manifestFile + " does not exist." ); | |||
final String message = "Manifest file: " + manifestFile + " does not exist."; | |||
throw new TaskException( message ); | |||
} | |||
this.manifestFile = manifestFile; | |||
this.m_manifestFile = manifestFile; | |||
Reader r = null; | |||
try | |||
{ | |||
r = new FileReader( manifestFile ); | |||
Manifest newManifest = new Manifest( r ); | |||
if( manifest == null ) | |||
if( m_manifest == null ) | |||
{ | |||
manifest = Manifest.getDefaultManifest(); | |||
m_manifest = Manifest.getDefaultManifest(); | |||
} | |||
manifest.merge( newManifest ); | |||
m_manifest.merge( newManifest ); | |||
} | |||
catch( ManifestException e ) | |||
{ | |||
getLogger().error( "Manifest is invalid: " + e.getMessage() ); | |||
throw new TaskException( "Invalid Manifest: " + manifestFile, e ); | |||
final String message = "Manifest " + manifestFile + " is invalid: " + e.getMessage(); | |||
getLogger().error( message ); | |||
throw new TaskException( message, e ); | |||
} | |||
catch( IOException e ) | |||
{ | |||
throw new TaskException( "Unable to read manifest file: " + manifestFile, e ); | |||
final String message = "Unable to read manifest file: " + manifestFile; | |||
throw new TaskException( message, e ); | |||
} | |||
finally | |||
{ | |||
@@ -127,11 +130,11 @@ public class Jar extends Zip | |||
public void addConfiguredManifest( Manifest newManifest ) | |||
throws ManifestException, TaskException | |||
{ | |||
if( manifest == null ) | |||
if( m_manifest == null ) | |||
{ | |||
manifest = Manifest.getDefaultManifest(); | |||
m_manifest = Manifest.getDefaultManifest(); | |||
} | |||
manifest.merge( newManifest ); | |||
m_manifest.merge( newManifest ); | |||
buildFileManifest = true; | |||
} | |||
@@ -155,7 +158,7 @@ public class Jar extends Zip | |||
throws TaskException | |||
{ | |||
// need to handle manifest as a special check | |||
if( buildFileManifest || manifestFile == null ) | |||
if( buildFileManifest || m_manifestFile == null ) | |||
{ | |||
java.util.zip.ZipFile theZipFile = null; | |||
try | |||
@@ -168,11 +171,11 @@ public class Jar extends Zip | |||
return false; | |||
} | |||
Manifest currentManifest = new Manifest( new InputStreamReader( theZipFile.getInputStream( entry ) ) ); | |||
if( manifest == null ) | |||
if( m_manifest == null ) | |||
{ | |||
manifest = Manifest.getDefaultManifest(); | |||
m_manifest = Manifest.getDefaultManifest(); | |||
} | |||
if( !currentManifest.equals( manifest ) ) | |||
if( !currentManifest.equals( m_manifest ) ) | |||
{ | |||
getLogger().debug( "Updating jar since jar manifest has changed" ); | |||
return false; | |||
@@ -199,22 +202,13 @@ public class Jar extends Zip | |||
} | |||
} | |||
} | |||
else if( manifestFile.lastModified() > zipFile.lastModified() ) | |||
else if( m_manifestFile.lastModified() > zipFile.lastModified() ) | |||
{ | |||
return false; | |||
} | |||
return super.isUpToDate( scanners, zipFile ); | |||
} | |||
/** | |||
* Make sure we don't think we already have a MANIFEST next time this task | |||
* gets executed. | |||
*/ | |||
protected void cleanUp() | |||
{ | |||
super.cleanUp(); | |||
} | |||
protected boolean createEmptyZip( File zipFile ) | |||
{ | |||
// Jar files always contain a manifest and can never be empty | |||
@@ -224,7 +218,7 @@ public class Jar extends Zip | |||
protected void finalizeZipOutputStream( ZipOutputStream zOut ) | |||
throws IOException, TaskException | |||
{ | |||
if( index ) | |||
if( m_index ) | |||
{ | |||
createIndexList( zOut ); | |||
} | |||
@@ -235,13 +229,13 @@ public class Jar extends Zip | |||
{ | |||
try | |||
{ | |||
execManifest = Manifest.getDefaultManifest(); | |||
m_execManifest = Manifest.getDefaultManifest(); | |||
if( manifest != null ) | |||
if( m_manifest != null ) | |||
{ | |||
execManifest.merge( manifest ); | |||
m_execManifest.merge( m_manifest ); | |||
} | |||
for( Iterator e = execManifest.getWarnings(); e.hasNext(); ) | |||
for( Iterator e = m_execManifest.getWarnings(); e.hasNext(); ) | |||
{ | |||
getLogger().warn( "Manifest warning: " + (String)e.next() ); | |||
} | |||
@@ -250,7 +244,7 @@ public class Jar extends Zip | |||
// time to write the manifest | |||
ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |||
PrintWriter writer = new PrintWriter( baos ); | |||
execManifest.write( writer ); | |||
m_execManifest.write( writer ); | |||
writer.flush(); | |||
ByteArrayInputStream bais = new ByteArrayInputStream( baos.toByteArray() ); | |||
@@ -273,9 +267,9 @@ public class Jar extends Zip | |||
// a <fileset> element. | |||
if( vPath.equalsIgnoreCase( "META-INF/MANIFEST.MF" ) ) | |||
{ | |||
final String message = "Warning: selected " + archiveType + | |||
final String message = "Warning: selected " + m_archiveType + | |||
" files include a META-INF/MANIFEST.MF which will be ignored " + | |||
"(please use manifest attribute to " + archiveType + " task)"; | |||
"(please use manifest attribute to " + m_archiveType + " task)"; | |||
getLogger().warn( message ); | |||
} | |||
else | |||
@@ -328,12 +322,12 @@ public class Jar extends Zip | |||
writer.println(); | |||
// header newline | |||
writer.println( zipFile.getName() ); | |||
writer.println( m_file.getName() ); | |||
// JarIndex is sorting the directories by ascending order. | |||
// it's painful to do in JDK 1.1 and it has no value but cosmetic | |||
// since it will be read into a hashtable by the classloader. | |||
Enumeration enum = addedDirs.keys(); | |||
Enumeration enum = m_addedDirs.keys(); | |||
while( enum.hasMoreElements() ) | |||
{ | |||
String dir = (String)enum.nextElement(); | |||
@@ -377,13 +371,13 @@ public class Jar extends Zip | |||
{ | |||
try | |||
{ | |||
if( execManifest == null ) | |||
if( m_execManifest == null ) | |||
{ | |||
execManifest = new Manifest( new InputStreamReader( is ) ); | |||
m_execManifest = new Manifest( new InputStreamReader( is ) ); | |||
} | |||
else if( isAddingNewFiles() ) | |||
{ | |||
execManifest.merge( new Manifest( new InputStreamReader( is ) ) ); | |||
m_execManifest.merge( new Manifest( new InputStreamReader( is ) ) ); | |||
} | |||
} | |||
catch( ManifestException e ) | |||
@@ -18,70 +18,59 @@ import org.apache.tools.zip.ZipOutputStream; | |||
* | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
*/ | |||
public class War extends Jar | |||
public class War | |||
extends Jar | |||
{ | |||
private File deploymentDescriptor; | |||
private boolean descriptorAdded; | |||
private File m_webxml; | |||
private boolean m_descriptorAdded; | |||
public War() | |||
{ | |||
super(); | |||
archiveType = "war"; | |||
emptyBehavior = "create"; | |||
m_archiveType = "war"; | |||
m_emptyBehavior = "create"; | |||
} | |||
public void setWebxml( File descr ) | |||
public void setWebxml( final File descr ) | |||
throws TaskException | |||
{ | |||
deploymentDescriptor = descr; | |||
if( !deploymentDescriptor.exists() ) | |||
throw new TaskException( "Deployment descriptor: " + deploymentDescriptor + " does not exist." ); | |||
m_webxml = descr; | |||
if( !m_webxml.exists() ) | |||
{ | |||
final String message = "Deployment descriptor: " + | |||
m_webxml + " does not exist."; | |||
throw new TaskException( message ); | |||
} | |||
// Create a ZipFileSet for this file, and pass it up. | |||
ZipFileSet fs = new ZipFileSet(); | |||
fs.setDir( new File( deploymentDescriptor.getParent() ) ); | |||
fs.setIncludes( deploymentDescriptor.getName() ); | |||
fs.setFullpath( "WEB-INF/web.xml" ); | |||
super.addFileset( fs ); | |||
addFileAs(descr, "WEB-INF/web.xml" ); | |||
} | |||
public void addClasses( ZipFileSet fs ) | |||
public void addClasses( final ZipFileSet fs ) | |||
{ | |||
// We just set the prefix for this fileset, and pass it up. | |||
fs.setPrefix( "WEB-INF/classes/" ); | |||
super.addFileset( fs ); | |||
} | |||
public void addLib( ZipFileSet fs ) | |||
public void addLib( final ZipFileSet fs ) | |||
{ | |||
// We just set the prefix for this fileset, and pass it up. | |||
fs.setPrefix( "WEB-INF/lib/" ); | |||
super.addFileset( fs ); | |||
} | |||
public void addWebinf( ZipFileSet fs ) | |||
public void addWebinf( final ZipFileSet fs ) | |||
{ | |||
// We just set the prefix for this fileset, and pass it up. | |||
fs.setPrefix( "WEB-INF/" ); | |||
super.addFileset( fs ); | |||
} | |||
/** | |||
* Make sure we don't think we already have a web.xml next time this task | |||
* gets executed. | |||
*/ | |||
protected void cleanUp() | |||
{ | |||
descriptorAdded = false; | |||
super.cleanUp(); | |||
} | |||
protected void initZipOutputStream( ZipOutputStream zOut ) | |||
protected void initZipOutputStream( final ZipOutputStream zOut ) | |||
throws IOException, TaskException | |||
{ | |||
// If no webxml file is specified, it's an error. | |||
if( deploymentDescriptor == null && !isInUpdateMode() ) | |||
if( m_webxml == null && !isInUpdateMode() ) | |||
{ | |||
throw new TaskException( "webxml attribute is required" ); | |||
} | |||
@@ -89,7 +78,9 @@ public class War extends Jar | |||
super.initZipOutputStream( zOut ); | |||
} | |||
protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||
protected void zipFile( final File file, | |||
final ZipOutputStream zOut, | |||
final String vPath ) | |||
throws IOException, TaskException | |||
{ | |||
// If the file being added is WEB-INF/web.xml, we warn if it's not the | |||
@@ -98,17 +89,17 @@ public class War extends Jar | |||
// a <fileset> element. | |||
if( vPath.equalsIgnoreCase( "WEB-INF/web.xml" ) ) | |||
{ | |||
if( deploymentDescriptor == null || !deploymentDescriptor.equals( file ) || descriptorAdded ) | |||
if( m_webxml == null || !m_webxml.equals( file ) || m_descriptorAdded ) | |||
{ | |||
final String message = "Warning: selected " + archiveType + | |||
final String message = "Warning: selected " + m_archiveType + | |||
" files include a WEB-INF/web.xml which will be ignored " + | |||
"(please use webxml attribute to " + archiveType + " task)"; | |||
"(please use webxml attribute to " + m_archiveType + " task)"; | |||
getLogger().warn( message ); | |||
} | |||
else | |||
{ | |||
super.zipFile( file, zOut, vPath ); | |||
descriptorAdded = true; | |||
m_descriptorAdded = true; | |||
} | |||
} | |||
else | |||
@@ -0,0 +1,22 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.tools.ant.taskdefs; | |||
import org.apache.tools.ant.types.EnumeratedAttribute; | |||
/** | |||
* Possible behaviors when there are no matching files for the task. | |||
*/ | |||
public class WhenEmpty | |||
extends EnumeratedAttribute | |||
{ | |||
public String[] getValues() | |||
{ | |||
return new String[]{"fail", "skip", "create"}; | |||
} | |||
} |
@@ -23,12 +23,11 @@ import java.util.zip.ZipInputStream; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.tools.ant.types.DirectoryScanner; | |||
import org.apache.tools.ant.types.FileScanner; | |||
import org.apache.tools.ant.types.EnumeratedAttribute; | |||
import org.apache.tools.ant.types.FileSet; | |||
import org.apache.tools.ant.types.SourceFileScanner; | |||
import org.apache.tools.ant.types.ZipFileSet; | |||
import org.apache.tools.ant.types.ZipScanner; | |||
import org.apache.tools.ant.util.mappers.MergingMapper; | |||
import org.apache.tools.ant.types.SourceFileScanner; | |||
import org.apache.tools.zip.ZipEntry; | |||
import org.apache.tools.zip.ZipOutputStream; | |||
@@ -39,36 +38,35 @@ import org.apache.tools.zip.ZipOutputStream; | |||
* @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a> | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
*/ | |||
public class Zip extends MatchingTask | |||
public class Zip | |||
extends MatchingTask | |||
{ | |||
// For directories: | |||
private final static long EMPTY_CRC = new CRC32().getValue(); | |||
private boolean doCompress = true; | |||
private boolean doUpdate = false; | |||
private boolean doFilesonly = false; | |||
protected String archiveType = "zip"; | |||
protected String emptyBehavior = "skip"; | |||
private ArrayList filesets = new ArrayList(); | |||
protected Hashtable addedDirs = new Hashtable(); | |||
private ArrayList addedFiles = new ArrayList(); | |||
protected File zipFile; | |||
private boolean m_compress = true; | |||
private boolean m_update; | |||
private boolean m_filesonly; | |||
protected String m_archiveType = "zip"; | |||
protected String m_emptyBehavior = "skip"; | |||
private ArrayList m_filesets = new ArrayList(); | |||
protected Hashtable m_addedDirs = new Hashtable(); | |||
private ArrayList m_addedFiles = new ArrayList(); | |||
protected File m_file; | |||
/** | |||
* true when we are adding new files into the Zip file, as opposed to adding | |||
* back the unchanged files | |||
*/ | |||
private boolean addingNewFiles; | |||
private File baseDir; | |||
private boolean m_addingNewFiles; | |||
private File m_baseDir; | |||
/** | |||
* Encoding to use for filenames, defaults to the platform's default | |||
* encoding. | |||
*/ | |||
private String encoding; | |||
private String m_encoding; | |||
protected static String[][] grabFileNames( FileScanner[] scanners ) | |||
private static String[][] grabFileNames( final FileScanner[] scanners ) | |||
throws TaskException | |||
{ | |||
String[][] result = new String[ scanners.length ][]; | |||
@@ -83,15 +81,17 @@ public class Zip extends MatchingTask | |||
return result; | |||
} | |||
protected static File[] grabFiles( FileScanner[] scanners, | |||
String[][] fileNames ) | |||
private static File[] grabFiles( final FileScanner[] scanners, | |||
final String[][] filenames ) | |||
{ | |||
ArrayList files = new ArrayList(); | |||
for( int i = 0; i < fileNames.length; i++ ) | |||
final ArrayList files = new ArrayList(); | |||
for( int i = 0; i < filenames.length; i++ ) | |||
{ | |||
File thisBaseDir = scanners[ i ].getBasedir(); | |||
for( int j = 0; j < fileNames[ i ].length; j++ ) | |||
files.add( new File( thisBaseDir, fileNames[ i ][ j ] ) ); | |||
final File baseDir = scanners[ i ].getBasedir(); | |||
for( int j = 0; j < filenames[ i ].length; j++ ) | |||
{ | |||
files.add( new File( baseDir, filenames[ i ][ j ] ) ); | |||
} | |||
} | |||
final File[] toret = new File[ files.size() ]; | |||
return (File[])files.toArray( toret ); | |||
@@ -102,9 +102,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param baseDir The new Basedir value | |||
*/ | |||
public void setBasedir( File baseDir ) | |||
public void setBasedir( final File baseDir ) | |||
{ | |||
this.baseDir = baseDir; | |||
m_baseDir = baseDir; | |||
} | |||
/** | |||
@@ -112,9 +112,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param c The new Compress value | |||
*/ | |||
public void setCompress( boolean c ) | |||
public void setCompress( final boolean compress ) | |||
{ | |||
doCompress = c; | |||
m_compress = compress; | |||
} | |||
/** | |||
@@ -128,9 +128,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param encoding The new Encoding value | |||
*/ | |||
public void setEncoding( String encoding ) | |||
public void setEncoding( final String encoding ) | |||
{ | |||
this.encoding = encoding; | |||
m_encoding = encoding; | |||
} | |||
/** | |||
@@ -138,9 +138,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param file The new File value | |||
*/ | |||
public void setFile( File file ) | |||
public void setFile( final File file ) | |||
{ | |||
this.zipFile = file; | |||
m_file = file; | |||
} | |||
/** | |||
@@ -148,9 +148,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param f The new Filesonly value | |||
*/ | |||
public void setFilesonly( boolean f ) | |||
public void setFilesonly( final boolean filesonly ) | |||
{ | |||
doFilesonly = f; | |||
m_filesonly = filesonly; | |||
} | |||
/** | |||
@@ -159,9 +159,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param c The new Update value | |||
*/ | |||
public void setUpdate( boolean c ) | |||
public void setUpdate( final boolean update ) | |||
{ | |||
doUpdate = c; | |||
m_update = update; | |||
} | |||
/** | |||
@@ -173,9 +173,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param we The new Whenempty value | |||
*/ | |||
public void setWhenempty( WhenEmpty we ) | |||
public void setWhenempty( final WhenEmpty we ) | |||
{ | |||
emptyBehavior = we.getValue(); | |||
m_emptyBehavior = we.getValue(); | |||
} | |||
/** | |||
@@ -183,19 +183,17 @@ public class Zip extends MatchingTask | |||
* | |||
* @return The InUpdateMode value | |||
*/ | |||
public boolean isInUpdateMode() | |||
protected final boolean isInUpdateMode() | |||
{ | |||
return doUpdate; | |||
return m_update; | |||
} | |||
/** | |||
* Adds a set of files (nested fileset attribute). | |||
* | |||
* @param set The feature to be added to the Fileset attribute | |||
*/ | |||
public void addFileset( FileSet set ) | |||
public void addFileset( final FileSet set ) | |||
{ | |||
filesets.add( set ); | |||
m_filesets.add( set ); | |||
} | |||
/** | |||
@@ -204,23 +202,27 @@ public class Zip extends MatchingTask | |||
* | |||
* @param set The feature to be added to the Zipfileset attribute | |||
*/ | |||
public void addZipfileset( ZipFileSet set ) | |||
public void addZipfileset( final ZipFileSet set ) | |||
{ | |||
filesets.add( set ); | |||
m_filesets.add( set ); | |||
} | |||
public void execute() | |||
throws TaskException | |||
{ | |||
if( baseDir == null && filesets.size() == 0 && "zip".equals( archiveType ) ) | |||
if( m_baseDir == null && m_filesets.size() == 0 && | |||
"zip".equals( m_archiveType ) ) | |||
{ | |||
throw new TaskException( "basedir attribute must be set, or at least " + | |||
"one fileset must be given!" ); | |||
final String message = "basedir attribute must be set, or at least " + | |||
"one fileset must be given!"; | |||
throw new TaskException( message ); | |||
} | |||
if( zipFile == null ) | |||
if( m_file == null ) | |||
{ | |||
throw new TaskException( "You must specify the " + archiveType + " file to create!" ); | |||
final String message = "You must specify the " + | |||
m_archiveType + " file to create!"; | |||
throw new TaskException( message ); | |||
} | |||
// Renamed version of original file, if it exists | |||
@@ -228,14 +230,14 @@ public class Zip extends MatchingTask | |||
// Whether or not an actual update is required - | |||
// we don't need to update if the original file doesn't exist | |||
addingNewFiles = true; | |||
doUpdate = doUpdate && zipFile.exists(); | |||
if( doUpdate ) | |||
m_addingNewFiles = true; | |||
m_update = m_update && m_file.exists(); | |||
if( m_update ) | |||
{ | |||
try | |||
{ | |||
renamedFile = File.createTempFile( "zip", ".tmp", | |||
zipFile.getParentFile() ); | |||
m_file.getParentFile() ); | |||
} | |||
catch( final IOException ioe ) | |||
{ | |||
@@ -244,7 +246,7 @@ public class Zip extends MatchingTask | |||
try | |||
{ | |||
if( !zipFile.renameTo( renamedFile ) ) | |||
if( !m_file.renameTo( renamedFile ) ) | |||
{ | |||
throw new TaskException( "Unable to rename old file to temporary file" ); | |||
} | |||
@@ -257,13 +259,13 @@ public class Zip extends MatchingTask | |||
// Create the scanners to pass to isUpToDate(). | |||
ArrayList dss = new ArrayList(); | |||
if( baseDir != null ) | |||
if( m_baseDir != null ) | |||
{ | |||
dss.add( getDirectoryScanner( baseDir ) ); | |||
dss.add( getDirectoryScanner( m_baseDir ) ); | |||
} | |||
for( int i = 0; i < filesets.size(); i++ ) | |||
for( int i = 0; i < m_filesets.size(); i++ ) | |||
{ | |||
FileSet fs = (FileSet)filesets.get( i ); | |||
FileSet fs = (FileSet)m_filesets.get( i ); | |||
dss.add( fs.getDirectoryScanner() ); | |||
} | |||
int dssSize = dss.size(); | |||
@@ -272,24 +274,24 @@ public class Zip extends MatchingTask | |||
// quick exit if the target is up to date | |||
// can also handle empty archives | |||
if( isUpToDate( scanners, zipFile ) ) | |||
if( isUpToDate( scanners, m_file ) ) | |||
{ | |||
return; | |||
} | |||
String action = doUpdate ? "Updating " : "Building "; | |||
String action = m_update ? "Updating " : "Building "; | |||
getLogger().info( action + archiveType + ": " + zipFile.getAbsolutePath() ); | |||
getLogger().info( action + m_archiveType + ": " + m_file.getAbsolutePath() ); | |||
boolean success = false; | |||
try | |||
{ | |||
ZipOutputStream zOut = | |||
new ZipOutputStream( new FileOutputStream( zipFile ) ); | |||
zOut.setEncoding( encoding ); | |||
new ZipOutputStream( new FileOutputStream( m_file ) ); | |||
zOut.setEncoding( m_encoding ); | |||
try | |||
{ | |||
if( doCompress ) | |||
if( m_compress ) | |||
{ | |||
zOut.setMethod( ZipOutputStream.DEFLATED ); | |||
} | |||
@@ -300,26 +302,26 @@ public class Zip extends MatchingTask | |||
initZipOutputStream( zOut ); | |||
// Add the implicit fileset to the archive. | |||
if( baseDir != null ) | |||
if( m_baseDir != null ) | |||
{ | |||
addFiles( getDirectoryScanner( baseDir ), zOut, "", "" ); | |||
addFiles( getDirectoryScanner( m_baseDir ), zOut, "", "" ); | |||
} | |||
// Add the explicit filesets to the archive. | |||
addFiles( filesets, zOut ); | |||
if( doUpdate ) | |||
addFiles( m_filesets, zOut ); | |||
if( m_update ) | |||
{ | |||
addingNewFiles = false; | |||
m_addingNewFiles = false; | |||
ZipFileSet oldFiles = new ZipFileSet(); | |||
oldFiles.setSrc( renamedFile ); | |||
StringBuffer exclusionPattern = new StringBuffer(); | |||
for( int i = 0; i < addedFiles.size(); i++ ) | |||
for( int i = 0; i < m_addedFiles.size(); i++ ) | |||
{ | |||
if( i != 0 ) | |||
{ | |||
exclusionPattern.append( "," ); | |||
} | |||
exclusionPattern.append( (String)addedFiles.get( i ) ); | |||
exclusionPattern.append( (String)m_addedFiles.get( i ) ); | |||
} | |||
oldFiles.setExcludes( exclusionPattern.toString() ); | |||
ArrayList tmp = new ArrayList(); | |||
@@ -354,17 +356,17 @@ public class Zip extends MatchingTask | |||
} | |||
catch( IOException ioe ) | |||
{ | |||
String msg = "Problem creating " + archiveType + ": " + ioe.getMessage(); | |||
String msg = "Problem creating " + m_archiveType + ": " + ioe.getMessage(); | |||
// delete a bogus ZIP file | |||
if( !zipFile.delete() ) | |||
if( !m_file.delete() ) | |||
{ | |||
msg += " (and the archive is probably corrupt but I could not delete it)"; | |||
} | |||
if( doUpdate ) | |||
if( m_update ) | |||
{ | |||
if( !renamedFile.renameTo( zipFile ) ) | |||
if( !renamedFile.renameTo( m_file ) ) | |||
{ | |||
msg += " (and I couldn't rename the temporary file " + | |||
renamedFile.getName() + " back)"; | |||
@@ -373,13 +375,9 @@ public class Zip extends MatchingTask | |||
throw new TaskException( msg, ioe ); | |||
} | |||
finally | |||
{ | |||
cleanUp(); | |||
} | |||
// If we've been successful on an update, delete the temporary file | |||
if( success && doUpdate ) | |||
if( success && m_update ) | |||
{ | |||
if( !renamedFile.delete() ) | |||
{ | |||
@@ -390,15 +388,26 @@ public class Zip extends MatchingTask | |||
} | |||
} | |||
protected void addFileAs( final File file, final String name ) | |||
throws TaskException | |||
{ | |||
// Create a ZipFileSet for this file, and pass it up. | |||
final ZipFileSet fs = new ZipFileSet(); | |||
fs.setDir( file.getParentFile() ); | |||
fs.setIncludes( file.getName() ); | |||
fs.setFullpath( name ); | |||
addFileset( fs ); | |||
} | |||
/** | |||
* Indicates if the task is adding new files into the archive as opposed to | |||
* copying back unchanged files from the backup copy | |||
* | |||
* @return The AddingNewFiles value | |||
*/ | |||
protected boolean isAddingNewFiles() | |||
protected final boolean isAddingNewFiles() | |||
{ | |||
return addingNewFiles; | |||
return m_addingNewFiles; | |||
} | |||
/** | |||
@@ -418,16 +427,16 @@ public class Zip extends MatchingTask | |||
File[] files = grabFiles( scanners, fileNames ); | |||
if( files.length == 0 ) | |||
{ | |||
if( emptyBehavior.equals( "skip" ) ) | |||
if( m_emptyBehavior.equals( "skip" ) ) | |||
{ | |||
final String message = "Warning: skipping " + archiveType + " archive " + zipFile + | |||
final String message = "Warning: skipping " + m_archiveType + " archive " + zipFile + | |||
" because no files were included."; | |||
getLogger().warn( message ); | |||
return true; | |||
} | |||
else if( emptyBehavior.equals( "fail" ) ) | |||
else if( m_emptyBehavior.equals( "fail" ) ) | |||
{ | |||
throw new TaskException( "Cannot create " + archiveType + " archive " + zipFile + | |||
throw new TaskException( "Cannot create " + m_archiveType + " archive " + zipFile + | |||
": no files were included." ); | |||
} | |||
else | |||
@@ -597,7 +606,7 @@ public class Zip extends MatchingTask | |||
ZipOutputStream zOut, String prefix ) | |||
throws IOException | |||
{ | |||
if( !doFilesonly ) | |||
if( !m_filesonly ) | |||
{ | |||
Stack directories = new Stack(); | |||
int slashPos = entry.length(); | |||
@@ -605,7 +614,7 @@ public class Zip extends MatchingTask | |||
while( ( slashPos = entry.lastIndexOf( (int)'/', slashPos - 1 ) ) != -1 ) | |||
{ | |||
String dir = entry.substring( 0, slashPos + 1 ); | |||
if( addedDirs.get( prefix + dir ) != null ) | |||
if( m_addedDirs.get( prefix + dir ) != null ) | |||
{ | |||
break; | |||
} | |||
@@ -677,26 +686,6 @@ public class Zip extends MatchingTask | |||
} | |||
} | |||
/** | |||
* Do any clean up necessary to allow this instance to be used again. <p> | |||
* | |||
* When we get here, the Zip file has been closed and all we need to do is | |||
* to reset some globals.</p> | |||
*/ | |||
protected void cleanUp() | |||
{ | |||
addedDirs = new Hashtable(); | |||
addedFiles = new ArrayList(); | |||
filesets = new ArrayList(); | |||
zipFile = null; | |||
baseDir = null; | |||
doCompress = true; | |||
doUpdate = false; | |||
doFilesonly = false; | |||
addingNewFiles = false; | |||
encoding = null; | |||
} | |||
/** | |||
* Create an empty zip file | |||
* | |||
@@ -709,7 +698,7 @@ public class Zip extends MatchingTask | |||
// In this case using java.util.zip will not work | |||
// because it does not permit a zero-entry archive. | |||
// Must create it manually. | |||
getLogger().info( "Note: creating empty " + archiveType + " archive " + zipFile ); | |||
getLogger().info( "Note: creating empty " + m_archiveType + " archive " + zipFile ); | |||
try | |||
{ | |||
OutputStream os = new FileOutputStream( zipFile ); | |||
@@ -749,13 +738,13 @@ public class Zip extends MatchingTask | |||
protected void zipDir( File dir, ZipOutputStream zOut, String vPath ) | |||
throws IOException | |||
{ | |||
if( addedDirs.get( vPath ) != null ) | |||
if( m_addedDirs.get( vPath ) != null ) | |||
{ | |||
// don't add directories we've already added. | |||
// no warning if we try, it is harmless in and of itself | |||
return; | |||
} | |||
addedDirs.put( vPath, vPath ); | |||
m_addedDirs.put( vPath, vPath ); | |||
ZipEntry ze = new ZipEntry( vPath ); | |||
if( dir != null && dir.exists() ) | |||
@@ -794,7 +783,7 @@ public class Zip extends MatchingTask | |||
* I couldn't find any documentation on this, just found out by try | |||
* and error. | |||
*/ | |||
if( !doCompress ) | |||
if( !m_compress ) | |||
{ | |||
long size = 0; | |||
CRC32 cal = new CRC32(); | |||
@@ -844,13 +833,13 @@ public class Zip extends MatchingTask | |||
} | |||
count = in.read( buffer, 0, buffer.length ); | |||
} while( count != -1 ); | |||
addedFiles.add( vPath ); | |||
m_addedFiles.add( vPath ); | |||
} | |||
protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||
throws IOException, TaskException | |||
{ | |||
if( file.equals( zipFile ) ) | |||
if( file.equals( m_file ) ) | |||
{ | |||
throw new TaskException( "A zip file cannot include itself" ); | |||
} | |||
@@ -865,17 +854,4 @@ public class Zip extends MatchingTask | |||
fIn.close(); | |||
} | |||
} | |||
/** | |||
* Possible behaviors when there are no matching files for the task. | |||
* | |||
* @author RT | |||
*/ | |||
public static class WhenEmpty extends EnumeratedAttribute | |||
{ | |||
public String[] getValues() | |||
{ | |||
return new String[]{"fail", "skip", "create"}; | |||
} | |||
} | |||
} |
@@ -21,30 +21,27 @@ import org.apache.tools.zip.ZipOutputStream; | |||
*/ | |||
public class Ear extends Jar | |||
{ | |||
private File deploymentDescriptor; | |||
private boolean descriptorAdded; | |||
private File m_appxml; | |||
private boolean m_descriptorAdded; | |||
public Ear() | |||
{ | |||
super(); | |||
archiveType = "ear"; | |||
emptyBehavior = "create"; | |||
m_archiveType = "ear"; | |||
m_emptyBehavior = "create"; | |||
} | |||
public void setAppxml( File descr ) | |||
public void setAppxml( final File appxml ) | |||
throws TaskException | |||
{ | |||
deploymentDescriptor = descr; | |||
if( !deploymentDescriptor.exists() ) | |||
throw new TaskException( "Deployment descriptor: " + deploymentDescriptor + " does not exist." ); | |||
m_appxml = appxml; | |||
if( !m_appxml.exists() ) | |||
{ | |||
final String message = "Deployment descriptor: " + | |||
m_appxml + " does not exist."; | |||
throw new TaskException( message ); | |||
} | |||
// Create a ZipFileSet for this file, and pass it up. | |||
ZipFileSet fs = new ZipFileSet(); | |||
fs.setDir( new File( deploymentDescriptor.getParent() ) ); | |||
fs.setIncludes( deploymentDescriptor.getName() ); | |||
fs.setFullpath( "META-INF/application.xml" ); | |||
super.addFileset( fs ); | |||
addFileAs( m_appxml, "META-INF/application.xml" ); | |||
} | |||
public void addArchives( ZipFileSet fs ) | |||
@@ -56,23 +53,13 @@ public class Ear extends Jar | |||
super.addFileset( fs ); | |||
} | |||
/** | |||
* Make sure we don't think we already have a web.xml next time this task | |||
* gets executed. | |||
*/ | |||
protected void cleanUp() | |||
{ | |||
descriptorAdded = false; | |||
super.cleanUp(); | |||
} | |||
protected void initZipOutputStream( ZipOutputStream zOut ) | |||
protected void initZipOutputStream( final ZipOutputStream zOut ) | |||
throws IOException, TaskException | |||
{ | |||
// If no webxml file is specified, it's an error. | |||
if( deploymentDescriptor == null && !isInUpdateMode() ) | |||
if( m_appxml == null && !isInUpdateMode() ) | |||
{ | |||
throw new TaskException( "appxml attribute is required" ); | |||
final String message = "appxml attribute is required"; | |||
throw new TaskException( message ); | |||
} | |||
super.initZipOutputStream( zOut ); | |||
@@ -87,17 +74,19 @@ public class Ear extends Jar | |||
// a <fileset> element. | |||
if( vPath.equalsIgnoreCase( "META-INF/aplication.xml" ) ) | |||
{ | |||
if( deploymentDescriptor == null || !deploymentDescriptor.equals( file ) || descriptorAdded ) | |||
if( m_appxml == null || | |||
!m_appxml.equals( file ) || | |||
m_descriptorAdded ) | |||
{ | |||
final String message = "Warning: selected " + archiveType + | |||
final String message = "Warning: selected " + m_archiveType + | |||
" files include a META-INF/application.xml which will be ignored " + | |||
"(please use appxml attribute to " + archiveType + " task)"; | |||
"(please use appxml attribute to " + m_archiveType + " task)"; | |||
getLogger().warn( message ); | |||
} | |||
else | |||
{ | |||
super.zipFile( file, zOut, vPath ); | |||
descriptorAdded = true; | |||
m_descriptorAdded = true; | |||
} | |||
} | |||
else | |||
@@ -29,7 +29,8 @@ import org.apache.tools.zip.ZipOutputStream; | |||
* | |||
* @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a> | |||
*/ | |||
public class Jar extends Zip | |||
public class Jar | |||
extends Zip | |||
{ | |||
/** | |||
* The index file name. | |||
@@ -39,16 +40,15 @@ public class Jar extends Zip | |||
/** | |||
* true if a manifest has been specified in the task | |||
*/ | |||
private boolean buildFileManifest = false; | |||
private boolean buildFileManifest; | |||
/** | |||
* jar index is JDK 1.3+ only | |||
*/ | |||
private boolean index = false; | |||
private Manifest execManifest; | |||
private Manifest manifest; | |||
private File manifestFile; | |||
private boolean m_index; | |||
private Manifest m_execManifest; | |||
private Manifest m_manifest; | |||
private File m_manifestFile; | |||
/** | |||
* constructor | |||
@@ -56,8 +56,8 @@ public class Jar extends Zip | |||
public Jar() | |||
{ | |||
super(); | |||
archiveType = "jar"; | |||
emptyBehavior = "create"; | |||
m_archiveType = "jar"; | |||
m_emptyBehavior = "create"; | |||
setEncoding( "UTF8" ); | |||
} | |||
@@ -69,7 +69,7 @@ public class Jar extends Zip | |||
*/ | |||
public void setIndex( boolean flag ) | |||
{ | |||
index = flag; | |||
m_index = flag; | |||
} | |||
public void setManifest( File manifestFile ) | |||
@@ -77,30 +77,33 @@ public class Jar extends Zip | |||
{ | |||
if( !manifestFile.exists() ) | |||
{ | |||
throw new TaskException( "Manifest file: " + manifestFile + " does not exist." ); | |||
final String message = "Manifest file: " + manifestFile + " does not exist."; | |||
throw new TaskException( message ); | |||
} | |||
this.manifestFile = manifestFile; | |||
this.m_manifestFile = manifestFile; | |||
Reader r = null; | |||
try | |||
{ | |||
r = new FileReader( manifestFile ); | |||
Manifest newManifest = new Manifest( r ); | |||
if( manifest == null ) | |||
if( m_manifest == null ) | |||
{ | |||
manifest = Manifest.getDefaultManifest(); | |||
m_manifest = Manifest.getDefaultManifest(); | |||
} | |||
manifest.merge( newManifest ); | |||
m_manifest.merge( newManifest ); | |||
} | |||
catch( ManifestException e ) | |||
{ | |||
getLogger().error( "Manifest is invalid: " + e.getMessage() ); | |||
throw new TaskException( "Invalid Manifest: " + manifestFile, e ); | |||
final String message = "Manifest " + manifestFile + " is invalid: " + e.getMessage(); | |||
getLogger().error( message ); | |||
throw new TaskException( message, e ); | |||
} | |||
catch( IOException e ) | |||
{ | |||
throw new TaskException( "Unable to read manifest file: " + manifestFile, e ); | |||
final String message = "Unable to read manifest file: " + manifestFile; | |||
throw new TaskException( message, e ); | |||
} | |||
finally | |||
{ | |||
@@ -127,11 +130,11 @@ public class Jar extends Zip | |||
public void addConfiguredManifest( Manifest newManifest ) | |||
throws ManifestException, TaskException | |||
{ | |||
if( manifest == null ) | |||
if( m_manifest == null ) | |||
{ | |||
manifest = Manifest.getDefaultManifest(); | |||
m_manifest = Manifest.getDefaultManifest(); | |||
} | |||
manifest.merge( newManifest ); | |||
m_manifest.merge( newManifest ); | |||
buildFileManifest = true; | |||
} | |||
@@ -155,7 +158,7 @@ public class Jar extends Zip | |||
throws TaskException | |||
{ | |||
// need to handle manifest as a special check | |||
if( buildFileManifest || manifestFile == null ) | |||
if( buildFileManifest || m_manifestFile == null ) | |||
{ | |||
java.util.zip.ZipFile theZipFile = null; | |||
try | |||
@@ -168,11 +171,11 @@ public class Jar extends Zip | |||
return false; | |||
} | |||
Manifest currentManifest = new Manifest( new InputStreamReader( theZipFile.getInputStream( entry ) ) ); | |||
if( manifest == null ) | |||
if( m_manifest == null ) | |||
{ | |||
manifest = Manifest.getDefaultManifest(); | |||
m_manifest = Manifest.getDefaultManifest(); | |||
} | |||
if( !currentManifest.equals( manifest ) ) | |||
if( !currentManifest.equals( m_manifest ) ) | |||
{ | |||
getLogger().debug( "Updating jar since jar manifest has changed" ); | |||
return false; | |||
@@ -199,22 +202,13 @@ public class Jar extends Zip | |||
} | |||
} | |||
} | |||
else if( manifestFile.lastModified() > zipFile.lastModified() ) | |||
else if( m_manifestFile.lastModified() > zipFile.lastModified() ) | |||
{ | |||
return false; | |||
} | |||
return super.isUpToDate( scanners, zipFile ); | |||
} | |||
/** | |||
* Make sure we don't think we already have a MANIFEST next time this task | |||
* gets executed. | |||
*/ | |||
protected void cleanUp() | |||
{ | |||
super.cleanUp(); | |||
} | |||
protected boolean createEmptyZip( File zipFile ) | |||
{ | |||
// Jar files always contain a manifest and can never be empty | |||
@@ -224,7 +218,7 @@ public class Jar extends Zip | |||
protected void finalizeZipOutputStream( ZipOutputStream zOut ) | |||
throws IOException, TaskException | |||
{ | |||
if( index ) | |||
if( m_index ) | |||
{ | |||
createIndexList( zOut ); | |||
} | |||
@@ -235,13 +229,13 @@ public class Jar extends Zip | |||
{ | |||
try | |||
{ | |||
execManifest = Manifest.getDefaultManifest(); | |||
m_execManifest = Manifest.getDefaultManifest(); | |||
if( manifest != null ) | |||
if( m_manifest != null ) | |||
{ | |||
execManifest.merge( manifest ); | |||
m_execManifest.merge( m_manifest ); | |||
} | |||
for( Iterator e = execManifest.getWarnings(); e.hasNext(); ) | |||
for( Iterator e = m_execManifest.getWarnings(); e.hasNext(); ) | |||
{ | |||
getLogger().warn( "Manifest warning: " + (String)e.next() ); | |||
} | |||
@@ -250,7 +244,7 @@ public class Jar extends Zip | |||
// time to write the manifest | |||
ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |||
PrintWriter writer = new PrintWriter( baos ); | |||
execManifest.write( writer ); | |||
m_execManifest.write( writer ); | |||
writer.flush(); | |||
ByteArrayInputStream bais = new ByteArrayInputStream( baos.toByteArray() ); | |||
@@ -273,9 +267,9 @@ public class Jar extends Zip | |||
// a <fileset> element. | |||
if( vPath.equalsIgnoreCase( "META-INF/MANIFEST.MF" ) ) | |||
{ | |||
final String message = "Warning: selected " + archiveType + | |||
final String message = "Warning: selected " + m_archiveType + | |||
" files include a META-INF/MANIFEST.MF which will be ignored " + | |||
"(please use manifest attribute to " + archiveType + " task)"; | |||
"(please use manifest attribute to " + m_archiveType + " task)"; | |||
getLogger().warn( message ); | |||
} | |||
else | |||
@@ -328,12 +322,12 @@ public class Jar extends Zip | |||
writer.println(); | |||
// header newline | |||
writer.println( zipFile.getName() ); | |||
writer.println( m_file.getName() ); | |||
// JarIndex is sorting the directories by ascending order. | |||
// it's painful to do in JDK 1.1 and it has no value but cosmetic | |||
// since it will be read into a hashtable by the classloader. | |||
Enumeration enum = addedDirs.keys(); | |||
Enumeration enum = m_addedDirs.keys(); | |||
while( enum.hasMoreElements() ) | |||
{ | |||
String dir = (String)enum.nextElement(); | |||
@@ -377,13 +371,13 @@ public class Jar extends Zip | |||
{ | |||
try | |||
{ | |||
if( execManifest == null ) | |||
if( m_execManifest == null ) | |||
{ | |||
execManifest = new Manifest( new InputStreamReader( is ) ); | |||
m_execManifest = new Manifest( new InputStreamReader( is ) ); | |||
} | |||
else if( isAddingNewFiles() ) | |||
{ | |||
execManifest.merge( new Manifest( new InputStreamReader( is ) ) ); | |||
m_execManifest.merge( new Manifest( new InputStreamReader( is ) ) ); | |||
} | |||
} | |||
catch( ManifestException e ) | |||
@@ -18,70 +18,59 @@ import org.apache.tools.zip.ZipOutputStream; | |||
* | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
*/ | |||
public class War extends Jar | |||
public class War | |||
extends Jar | |||
{ | |||
private File deploymentDescriptor; | |||
private boolean descriptorAdded; | |||
private File m_webxml; | |||
private boolean m_descriptorAdded; | |||
public War() | |||
{ | |||
super(); | |||
archiveType = "war"; | |||
emptyBehavior = "create"; | |||
m_archiveType = "war"; | |||
m_emptyBehavior = "create"; | |||
} | |||
public void setWebxml( File descr ) | |||
public void setWebxml( final File descr ) | |||
throws TaskException | |||
{ | |||
deploymentDescriptor = descr; | |||
if( !deploymentDescriptor.exists() ) | |||
throw new TaskException( "Deployment descriptor: " + deploymentDescriptor + " does not exist." ); | |||
m_webxml = descr; | |||
if( !m_webxml.exists() ) | |||
{ | |||
final String message = "Deployment descriptor: " + | |||
m_webxml + " does not exist."; | |||
throw new TaskException( message ); | |||
} | |||
// Create a ZipFileSet for this file, and pass it up. | |||
ZipFileSet fs = new ZipFileSet(); | |||
fs.setDir( new File( deploymentDescriptor.getParent() ) ); | |||
fs.setIncludes( deploymentDescriptor.getName() ); | |||
fs.setFullpath( "WEB-INF/web.xml" ); | |||
super.addFileset( fs ); | |||
addFileAs(descr, "WEB-INF/web.xml" ); | |||
} | |||
public void addClasses( ZipFileSet fs ) | |||
public void addClasses( final ZipFileSet fs ) | |||
{ | |||
// We just set the prefix for this fileset, and pass it up. | |||
fs.setPrefix( "WEB-INF/classes/" ); | |||
super.addFileset( fs ); | |||
} | |||
public void addLib( ZipFileSet fs ) | |||
public void addLib( final ZipFileSet fs ) | |||
{ | |||
// We just set the prefix for this fileset, and pass it up. | |||
fs.setPrefix( "WEB-INF/lib/" ); | |||
super.addFileset( fs ); | |||
} | |||
public void addWebinf( ZipFileSet fs ) | |||
public void addWebinf( final ZipFileSet fs ) | |||
{ | |||
// We just set the prefix for this fileset, and pass it up. | |||
fs.setPrefix( "WEB-INF/" ); | |||
super.addFileset( fs ); | |||
} | |||
/** | |||
* Make sure we don't think we already have a web.xml next time this task | |||
* gets executed. | |||
*/ | |||
protected void cleanUp() | |||
{ | |||
descriptorAdded = false; | |||
super.cleanUp(); | |||
} | |||
protected void initZipOutputStream( ZipOutputStream zOut ) | |||
protected void initZipOutputStream( final ZipOutputStream zOut ) | |||
throws IOException, TaskException | |||
{ | |||
// If no webxml file is specified, it's an error. | |||
if( deploymentDescriptor == null && !isInUpdateMode() ) | |||
if( m_webxml == null && !isInUpdateMode() ) | |||
{ | |||
throw new TaskException( "webxml attribute is required" ); | |||
} | |||
@@ -89,7 +78,9 @@ public class War extends Jar | |||
super.initZipOutputStream( zOut ); | |||
} | |||
protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||
protected void zipFile( final File file, | |||
final ZipOutputStream zOut, | |||
final String vPath ) | |||
throws IOException, TaskException | |||
{ | |||
// If the file being added is WEB-INF/web.xml, we warn if it's not the | |||
@@ -98,17 +89,17 @@ public class War extends Jar | |||
// a <fileset> element. | |||
if( vPath.equalsIgnoreCase( "WEB-INF/web.xml" ) ) | |||
{ | |||
if( deploymentDescriptor == null || !deploymentDescriptor.equals( file ) || descriptorAdded ) | |||
if( m_webxml == null || !m_webxml.equals( file ) || m_descriptorAdded ) | |||
{ | |||
final String message = "Warning: selected " + archiveType + | |||
final String message = "Warning: selected " + m_archiveType + | |||
" files include a WEB-INF/web.xml which will be ignored " + | |||
"(please use webxml attribute to " + archiveType + " task)"; | |||
"(please use webxml attribute to " + m_archiveType + " task)"; | |||
getLogger().warn( message ); | |||
} | |||
else | |||
{ | |||
super.zipFile( file, zOut, vPath ); | |||
descriptorAdded = true; | |||
m_descriptorAdded = true; | |||
} | |||
} | |||
else | |||
@@ -0,0 +1,22 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.tools.ant.taskdefs; | |||
import org.apache.tools.ant.types.EnumeratedAttribute; | |||
/** | |||
* Possible behaviors when there are no matching files for the task. | |||
*/ | |||
public class WhenEmpty | |||
extends EnumeratedAttribute | |||
{ | |||
public String[] getValues() | |||
{ | |||
return new String[]{"fail", "skip", "create"}; | |||
} | |||
} |
@@ -23,12 +23,11 @@ import java.util.zip.ZipInputStream; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.tools.ant.types.DirectoryScanner; | |||
import org.apache.tools.ant.types.FileScanner; | |||
import org.apache.tools.ant.types.EnumeratedAttribute; | |||
import org.apache.tools.ant.types.FileSet; | |||
import org.apache.tools.ant.types.SourceFileScanner; | |||
import org.apache.tools.ant.types.ZipFileSet; | |||
import org.apache.tools.ant.types.ZipScanner; | |||
import org.apache.tools.ant.util.mappers.MergingMapper; | |||
import org.apache.tools.ant.types.SourceFileScanner; | |||
import org.apache.tools.zip.ZipEntry; | |||
import org.apache.tools.zip.ZipOutputStream; | |||
@@ -39,36 +38,35 @@ import org.apache.tools.zip.ZipOutputStream; | |||
* @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a> | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
*/ | |||
public class Zip extends MatchingTask | |||
public class Zip | |||
extends MatchingTask | |||
{ | |||
// For directories: | |||
private final static long EMPTY_CRC = new CRC32().getValue(); | |||
private boolean doCompress = true; | |||
private boolean doUpdate = false; | |||
private boolean doFilesonly = false; | |||
protected String archiveType = "zip"; | |||
protected String emptyBehavior = "skip"; | |||
private ArrayList filesets = new ArrayList(); | |||
protected Hashtable addedDirs = new Hashtable(); | |||
private ArrayList addedFiles = new ArrayList(); | |||
protected File zipFile; | |||
private boolean m_compress = true; | |||
private boolean m_update; | |||
private boolean m_filesonly; | |||
protected String m_archiveType = "zip"; | |||
protected String m_emptyBehavior = "skip"; | |||
private ArrayList m_filesets = new ArrayList(); | |||
protected Hashtable m_addedDirs = new Hashtable(); | |||
private ArrayList m_addedFiles = new ArrayList(); | |||
protected File m_file; | |||
/** | |||
* true when we are adding new files into the Zip file, as opposed to adding | |||
* back the unchanged files | |||
*/ | |||
private boolean addingNewFiles; | |||
private File baseDir; | |||
private boolean m_addingNewFiles; | |||
private File m_baseDir; | |||
/** | |||
* Encoding to use for filenames, defaults to the platform's default | |||
* encoding. | |||
*/ | |||
private String encoding; | |||
private String m_encoding; | |||
protected static String[][] grabFileNames( FileScanner[] scanners ) | |||
private static String[][] grabFileNames( final FileScanner[] scanners ) | |||
throws TaskException | |||
{ | |||
String[][] result = new String[ scanners.length ][]; | |||
@@ -83,15 +81,17 @@ public class Zip extends MatchingTask | |||
return result; | |||
} | |||
protected static File[] grabFiles( FileScanner[] scanners, | |||
String[][] fileNames ) | |||
private static File[] grabFiles( final FileScanner[] scanners, | |||
final String[][] filenames ) | |||
{ | |||
ArrayList files = new ArrayList(); | |||
for( int i = 0; i < fileNames.length; i++ ) | |||
final ArrayList files = new ArrayList(); | |||
for( int i = 0; i < filenames.length; i++ ) | |||
{ | |||
File thisBaseDir = scanners[ i ].getBasedir(); | |||
for( int j = 0; j < fileNames[ i ].length; j++ ) | |||
files.add( new File( thisBaseDir, fileNames[ i ][ j ] ) ); | |||
final File baseDir = scanners[ i ].getBasedir(); | |||
for( int j = 0; j < filenames[ i ].length; j++ ) | |||
{ | |||
files.add( new File( baseDir, filenames[ i ][ j ] ) ); | |||
} | |||
} | |||
final File[] toret = new File[ files.size() ]; | |||
return (File[])files.toArray( toret ); | |||
@@ -102,9 +102,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param baseDir The new Basedir value | |||
*/ | |||
public void setBasedir( File baseDir ) | |||
public void setBasedir( final File baseDir ) | |||
{ | |||
this.baseDir = baseDir; | |||
m_baseDir = baseDir; | |||
} | |||
/** | |||
@@ -112,9 +112,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param c The new Compress value | |||
*/ | |||
public void setCompress( boolean c ) | |||
public void setCompress( final boolean compress ) | |||
{ | |||
doCompress = c; | |||
m_compress = compress; | |||
} | |||
/** | |||
@@ -128,9 +128,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param encoding The new Encoding value | |||
*/ | |||
public void setEncoding( String encoding ) | |||
public void setEncoding( final String encoding ) | |||
{ | |||
this.encoding = encoding; | |||
m_encoding = encoding; | |||
} | |||
/** | |||
@@ -138,9 +138,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param file The new File value | |||
*/ | |||
public void setFile( File file ) | |||
public void setFile( final File file ) | |||
{ | |||
this.zipFile = file; | |||
m_file = file; | |||
} | |||
/** | |||
@@ -148,9 +148,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param f The new Filesonly value | |||
*/ | |||
public void setFilesonly( boolean f ) | |||
public void setFilesonly( final boolean filesonly ) | |||
{ | |||
doFilesonly = f; | |||
m_filesonly = filesonly; | |||
} | |||
/** | |||
@@ -159,9 +159,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param c The new Update value | |||
*/ | |||
public void setUpdate( boolean c ) | |||
public void setUpdate( final boolean update ) | |||
{ | |||
doUpdate = c; | |||
m_update = update; | |||
} | |||
/** | |||
@@ -173,9 +173,9 @@ public class Zip extends MatchingTask | |||
* | |||
* @param we The new Whenempty value | |||
*/ | |||
public void setWhenempty( WhenEmpty we ) | |||
public void setWhenempty( final WhenEmpty we ) | |||
{ | |||
emptyBehavior = we.getValue(); | |||
m_emptyBehavior = we.getValue(); | |||
} | |||
/** | |||
@@ -183,19 +183,17 @@ public class Zip extends MatchingTask | |||
* | |||
* @return The InUpdateMode value | |||
*/ | |||
public boolean isInUpdateMode() | |||
protected final boolean isInUpdateMode() | |||
{ | |||
return doUpdate; | |||
return m_update; | |||
} | |||
/** | |||
* Adds a set of files (nested fileset attribute). | |||
* | |||
* @param set The feature to be added to the Fileset attribute | |||
*/ | |||
public void addFileset( FileSet set ) | |||
public void addFileset( final FileSet set ) | |||
{ | |||
filesets.add( set ); | |||
m_filesets.add( set ); | |||
} | |||
/** | |||
@@ -204,23 +202,27 @@ public class Zip extends MatchingTask | |||
* | |||
* @param set The feature to be added to the Zipfileset attribute | |||
*/ | |||
public void addZipfileset( ZipFileSet set ) | |||
public void addZipfileset( final ZipFileSet set ) | |||
{ | |||
filesets.add( set ); | |||
m_filesets.add( set ); | |||
} | |||
public void execute() | |||
throws TaskException | |||
{ | |||
if( baseDir == null && filesets.size() == 0 && "zip".equals( archiveType ) ) | |||
if( m_baseDir == null && m_filesets.size() == 0 && | |||
"zip".equals( m_archiveType ) ) | |||
{ | |||
throw new TaskException( "basedir attribute must be set, or at least " + | |||
"one fileset must be given!" ); | |||
final String message = "basedir attribute must be set, or at least " + | |||
"one fileset must be given!"; | |||
throw new TaskException( message ); | |||
} | |||
if( zipFile == null ) | |||
if( m_file == null ) | |||
{ | |||
throw new TaskException( "You must specify the " + archiveType + " file to create!" ); | |||
final String message = "You must specify the " + | |||
m_archiveType + " file to create!"; | |||
throw new TaskException( message ); | |||
} | |||
// Renamed version of original file, if it exists | |||
@@ -228,14 +230,14 @@ public class Zip extends MatchingTask | |||
// Whether or not an actual update is required - | |||
// we don't need to update if the original file doesn't exist | |||
addingNewFiles = true; | |||
doUpdate = doUpdate && zipFile.exists(); | |||
if( doUpdate ) | |||
m_addingNewFiles = true; | |||
m_update = m_update && m_file.exists(); | |||
if( m_update ) | |||
{ | |||
try | |||
{ | |||
renamedFile = File.createTempFile( "zip", ".tmp", | |||
zipFile.getParentFile() ); | |||
m_file.getParentFile() ); | |||
} | |||
catch( final IOException ioe ) | |||
{ | |||
@@ -244,7 +246,7 @@ public class Zip extends MatchingTask | |||
try | |||
{ | |||
if( !zipFile.renameTo( renamedFile ) ) | |||
if( !m_file.renameTo( renamedFile ) ) | |||
{ | |||
throw new TaskException( "Unable to rename old file to temporary file" ); | |||
} | |||
@@ -257,13 +259,13 @@ public class Zip extends MatchingTask | |||
// Create the scanners to pass to isUpToDate(). | |||
ArrayList dss = new ArrayList(); | |||
if( baseDir != null ) | |||
if( m_baseDir != null ) | |||
{ | |||
dss.add( getDirectoryScanner( baseDir ) ); | |||
dss.add( getDirectoryScanner( m_baseDir ) ); | |||
} | |||
for( int i = 0; i < filesets.size(); i++ ) | |||
for( int i = 0; i < m_filesets.size(); i++ ) | |||
{ | |||
FileSet fs = (FileSet)filesets.get( i ); | |||
FileSet fs = (FileSet)m_filesets.get( i ); | |||
dss.add( fs.getDirectoryScanner() ); | |||
} | |||
int dssSize = dss.size(); | |||
@@ -272,24 +274,24 @@ public class Zip extends MatchingTask | |||
// quick exit if the target is up to date | |||
// can also handle empty archives | |||
if( isUpToDate( scanners, zipFile ) ) | |||
if( isUpToDate( scanners, m_file ) ) | |||
{ | |||
return; | |||
} | |||
String action = doUpdate ? "Updating " : "Building "; | |||
String action = m_update ? "Updating " : "Building "; | |||
getLogger().info( action + archiveType + ": " + zipFile.getAbsolutePath() ); | |||
getLogger().info( action + m_archiveType + ": " + m_file.getAbsolutePath() ); | |||
boolean success = false; | |||
try | |||
{ | |||
ZipOutputStream zOut = | |||
new ZipOutputStream( new FileOutputStream( zipFile ) ); | |||
zOut.setEncoding( encoding ); | |||
new ZipOutputStream( new FileOutputStream( m_file ) ); | |||
zOut.setEncoding( m_encoding ); | |||
try | |||
{ | |||
if( doCompress ) | |||
if( m_compress ) | |||
{ | |||
zOut.setMethod( ZipOutputStream.DEFLATED ); | |||
} | |||
@@ -300,26 +302,26 @@ public class Zip extends MatchingTask | |||
initZipOutputStream( zOut ); | |||
// Add the implicit fileset to the archive. | |||
if( baseDir != null ) | |||
if( m_baseDir != null ) | |||
{ | |||
addFiles( getDirectoryScanner( baseDir ), zOut, "", "" ); | |||
addFiles( getDirectoryScanner( m_baseDir ), zOut, "", "" ); | |||
} | |||
// Add the explicit filesets to the archive. | |||
addFiles( filesets, zOut ); | |||
if( doUpdate ) | |||
addFiles( m_filesets, zOut ); | |||
if( m_update ) | |||
{ | |||
addingNewFiles = false; | |||
m_addingNewFiles = false; | |||
ZipFileSet oldFiles = new ZipFileSet(); | |||
oldFiles.setSrc( renamedFile ); | |||
StringBuffer exclusionPattern = new StringBuffer(); | |||
for( int i = 0; i < addedFiles.size(); i++ ) | |||
for( int i = 0; i < m_addedFiles.size(); i++ ) | |||
{ | |||
if( i != 0 ) | |||
{ | |||
exclusionPattern.append( "," ); | |||
} | |||
exclusionPattern.append( (String)addedFiles.get( i ) ); | |||
exclusionPattern.append( (String)m_addedFiles.get( i ) ); | |||
} | |||
oldFiles.setExcludes( exclusionPattern.toString() ); | |||
ArrayList tmp = new ArrayList(); | |||
@@ -354,17 +356,17 @@ public class Zip extends MatchingTask | |||
} | |||
catch( IOException ioe ) | |||
{ | |||
String msg = "Problem creating " + archiveType + ": " + ioe.getMessage(); | |||
String msg = "Problem creating " + m_archiveType + ": " + ioe.getMessage(); | |||
// delete a bogus ZIP file | |||
if( !zipFile.delete() ) | |||
if( !m_file.delete() ) | |||
{ | |||
msg += " (and the archive is probably corrupt but I could not delete it)"; | |||
} | |||
if( doUpdate ) | |||
if( m_update ) | |||
{ | |||
if( !renamedFile.renameTo( zipFile ) ) | |||
if( !renamedFile.renameTo( m_file ) ) | |||
{ | |||
msg += " (and I couldn't rename the temporary file " + | |||
renamedFile.getName() + " back)"; | |||
@@ -373,13 +375,9 @@ public class Zip extends MatchingTask | |||
throw new TaskException( msg, ioe ); | |||
} | |||
finally | |||
{ | |||
cleanUp(); | |||
} | |||
// If we've been successful on an update, delete the temporary file | |||
if( success && doUpdate ) | |||
if( success && m_update ) | |||
{ | |||
if( !renamedFile.delete() ) | |||
{ | |||
@@ -390,15 +388,26 @@ public class Zip extends MatchingTask | |||
} | |||
} | |||
protected void addFileAs( final File file, final String name ) | |||
throws TaskException | |||
{ | |||
// Create a ZipFileSet for this file, and pass it up. | |||
final ZipFileSet fs = new ZipFileSet(); | |||
fs.setDir( file.getParentFile() ); | |||
fs.setIncludes( file.getName() ); | |||
fs.setFullpath( name ); | |||
addFileset( fs ); | |||
} | |||
/** | |||
* Indicates if the task is adding new files into the archive as opposed to | |||
* copying back unchanged files from the backup copy | |||
* | |||
* @return The AddingNewFiles value | |||
*/ | |||
protected boolean isAddingNewFiles() | |||
protected final boolean isAddingNewFiles() | |||
{ | |||
return addingNewFiles; | |||
return m_addingNewFiles; | |||
} | |||
/** | |||
@@ -418,16 +427,16 @@ public class Zip extends MatchingTask | |||
File[] files = grabFiles( scanners, fileNames ); | |||
if( files.length == 0 ) | |||
{ | |||
if( emptyBehavior.equals( "skip" ) ) | |||
if( m_emptyBehavior.equals( "skip" ) ) | |||
{ | |||
final String message = "Warning: skipping " + archiveType + " archive " + zipFile + | |||
final String message = "Warning: skipping " + m_archiveType + " archive " + zipFile + | |||
" because no files were included."; | |||
getLogger().warn( message ); | |||
return true; | |||
} | |||
else if( emptyBehavior.equals( "fail" ) ) | |||
else if( m_emptyBehavior.equals( "fail" ) ) | |||
{ | |||
throw new TaskException( "Cannot create " + archiveType + " archive " + zipFile + | |||
throw new TaskException( "Cannot create " + m_archiveType + " archive " + zipFile + | |||
": no files were included." ); | |||
} | |||
else | |||
@@ -597,7 +606,7 @@ public class Zip extends MatchingTask | |||
ZipOutputStream zOut, String prefix ) | |||
throws IOException | |||
{ | |||
if( !doFilesonly ) | |||
if( !m_filesonly ) | |||
{ | |||
Stack directories = new Stack(); | |||
int slashPos = entry.length(); | |||
@@ -605,7 +614,7 @@ public class Zip extends MatchingTask | |||
while( ( slashPos = entry.lastIndexOf( (int)'/', slashPos - 1 ) ) != -1 ) | |||
{ | |||
String dir = entry.substring( 0, slashPos + 1 ); | |||
if( addedDirs.get( prefix + dir ) != null ) | |||
if( m_addedDirs.get( prefix + dir ) != null ) | |||
{ | |||
break; | |||
} | |||
@@ -677,26 +686,6 @@ public class Zip extends MatchingTask | |||
} | |||
} | |||
/** | |||
* Do any clean up necessary to allow this instance to be used again. <p> | |||
* | |||
* When we get here, the Zip file has been closed and all we need to do is | |||
* to reset some globals.</p> | |||
*/ | |||
protected void cleanUp() | |||
{ | |||
addedDirs = new Hashtable(); | |||
addedFiles = new ArrayList(); | |||
filesets = new ArrayList(); | |||
zipFile = null; | |||
baseDir = null; | |||
doCompress = true; | |||
doUpdate = false; | |||
doFilesonly = false; | |||
addingNewFiles = false; | |||
encoding = null; | |||
} | |||
/** | |||
* Create an empty zip file | |||
* | |||
@@ -709,7 +698,7 @@ public class Zip extends MatchingTask | |||
// In this case using java.util.zip will not work | |||
// because it does not permit a zero-entry archive. | |||
// Must create it manually. | |||
getLogger().info( "Note: creating empty " + archiveType + " archive " + zipFile ); | |||
getLogger().info( "Note: creating empty " + m_archiveType + " archive " + zipFile ); | |||
try | |||
{ | |||
OutputStream os = new FileOutputStream( zipFile ); | |||
@@ -749,13 +738,13 @@ public class Zip extends MatchingTask | |||
protected void zipDir( File dir, ZipOutputStream zOut, String vPath ) | |||
throws IOException | |||
{ | |||
if( addedDirs.get( vPath ) != null ) | |||
if( m_addedDirs.get( vPath ) != null ) | |||
{ | |||
// don't add directories we've already added. | |||
// no warning if we try, it is harmless in and of itself | |||
return; | |||
} | |||
addedDirs.put( vPath, vPath ); | |||
m_addedDirs.put( vPath, vPath ); | |||
ZipEntry ze = new ZipEntry( vPath ); | |||
if( dir != null && dir.exists() ) | |||
@@ -794,7 +783,7 @@ public class Zip extends MatchingTask | |||
* I couldn't find any documentation on this, just found out by try | |||
* and error. | |||
*/ | |||
if( !doCompress ) | |||
if( !m_compress ) | |||
{ | |||
long size = 0; | |||
CRC32 cal = new CRC32(); | |||
@@ -844,13 +833,13 @@ public class Zip extends MatchingTask | |||
} | |||
count = in.read( buffer, 0, buffer.length ); | |||
} while( count != -1 ); | |||
addedFiles.add( vPath ); | |||
m_addedFiles.add( vPath ); | |||
} | |||
protected void zipFile( File file, ZipOutputStream zOut, String vPath ) | |||
throws IOException, TaskException | |||
{ | |||
if( file.equals( zipFile ) ) | |||
if( file.equals( m_file ) ) | |||
{ | |||
throw new TaskException( "A zip file cannot include itself" ); | |||
} | |||
@@ -865,17 +854,4 @@ public class Zip extends MatchingTask | |||
fIn.close(); | |||
} | |||
} | |||
/** | |||
* Possible behaviors when there are no matching files for the task. | |||
* | |||
* @author RT | |||
*/ | |||
public static class WhenEmpty extends EnumeratedAttribute | |||
{ | |||
public String[] getValues() | |||
{ | |||
return new String[]{"fail", "skip", "create"}; | |||
} | |||
} | |||
} |