FileDocCategorySizeDatePackage
War.javaAPI DocApache Ant 1.708015Wed Dec 13 06:16:20 GMT 2006org.apache.tools.ant.taskdefs

War

public class War extends Jar
An extension of <jar> to create a WAR archive. Contains special treatment for files that should end up in the WEB-INF/lib, WEB-INF/classes or WEB-INF directories of the Web Application Archive.

(The War task is a shortcut for specifying the particular layout of a WAR file. The same thing can be accomplished by using the prefix and fullpath attributes of zipfilesets in a Zip or Jar task.)

The extended zipfileset element from the zip task (with attributes prefix, fullpath, and src) is available in the War task.

since
Ant 1.2
ant.task
category="packaging"
see
Jar

Fields Summary
private File
deploymentDescriptor
our web.xml deployment descriptor
private boolean
needxmlfile
flag set if the descriptor is added
private File
addedWebXmlFile
private static final org.apache.tools.ant.util.FileUtils
FILE_UTILS
private static final String
XML_DESCRIPTOR_PATH
path to web.xml file
private static final String
XML_DESCRIPTOR_PATH_LC
lower case version for comparisons
Constructors Summary
public War()
Constructor for the War Task.


          
      
        super();
        archiveType = "war";
        emptyBehavior = "create";
    
Methods Summary
public voidaddClasses(org.apache.tools.ant.types.ZipFileSet fs)
add files under WEB-INF/classes

param
fs the zip file set to add

        // We just set the prefix for this fileset, and pass it up.
        fs.setPrefix("WEB-INF/classes/");
        super.addFileset(fs);
    
public voidaddLib(org.apache.tools.ant.types.ZipFileSet fs)
add files under WEB-INF/lib/

param
fs the zip file set to add

        // We just set the prefix for this fileset, and pass it up.
        fs.setPrefix("WEB-INF/lib/");
        super.addFileset(fs);
    
public voidaddWebinf(org.apache.tools.ant.types.ZipFileSet fs)
files to add under WEB-INF;

param
fs the zip file set to add

        // We just set the prefix for this fileset, and pass it up.
        fs.setPrefix("WEB-INF/");
        super.addFileset(fs);
    
protected voidcleanUp()
Make sure we don't think we already have a web.xml next time this task gets executed.

        if (addedWebXmlFile == null
            && deploymentDescriptor == null
            && needxmlfile
            && !isInUpdateMode()) {
            throw new BuildException("No WEB-INF/web.xml file was added.\n"
                    + "If this is your intent, set needxml='false' ");
        }
        addedWebXmlFile = null;
        super.cleanUp();
    
protected voidinitZipOutputStream(org.apache.tools.zip.ZipOutputStream zOut)
override of parent; validates configuration before initializing the output stream.

param
zOut the zip output stream
throws
IOException on output error
throws
BuildException if invalid configuration

        super.initZipOutputStream(zOut);
    
public voidsetNeedxmlfile(boolean needxmlfile)
Set the policy on the web.xml file, that is, whether or not it is needed

param
needxmlfile whether a web.xml file is needed. Default: true

        this.needxmlfile = needxmlfile;
    
public voidsetWarfile(java.io.File warFile)
Deprecated name of the file to create -use destfile instead.

param
warFile the destination file
deprecated
since 1.5.x. Use setDestFile(File) instead
ant.attribute
ignore="true"

        setDestFile(warFile);
    
public voidsetWebxml(java.io.File descr)
set the deployment descriptor to use (WEB-INF/web.xml); required unless update=true

param
descr the deployment descriptor file

        deploymentDescriptor = descr;
        if (!deploymentDescriptor.exists()) {
            throw new BuildException("Deployment descriptor: "
                                     + deploymentDescriptor
                                     + " does not exist.");
        }

        // Create a ZipFileSet for this file, and pass it up.
        ZipFileSet fs = new ZipFileSet();
        fs.setFile(deploymentDescriptor);
        fs.setFullpath(XML_DESCRIPTOR_PATH);
        super.addFileset(fs);
    
protected voidzipFile(java.io.File file, org.apache.tools.zip.ZipOutputStream zOut, java.lang.String vPath, int mode)
Overridden from Zip class to deal with web.xml Here are cases that can arise -not a web.xml file : add -first web.xml : add, remember we added it -same web.xml again: skip -alternate web.xml : warn and skip

param
file the file to add to the archive
param
zOut the stream to write to
param
vPath the name this entry shall have in the archive
param
mode the Unix permissions to set.
throws
IOException on output error

        // If the file being added is WEB-INF/web.xml, we warn if it's
        // not the one specified in the "webxml" attribute - or if
        // it's being added twice, meaning the same file is specified
        // by the "webxml" attribute and in a <fileset> element.
        String vPathLowerCase = vPath.toLowerCase(Locale.ENGLISH);
        //by default, we add the file.
        boolean addFile = true;
        if (XML_DESCRIPTOR_PATH_LC.equals(vPathLowerCase)) {
            //a web.xml file was found. See if it is a duplicate or not
            if (addedWebXmlFile != null) {
                //a second web.xml file, so skip it
                addFile = false;
                //check to see if we warn or not
                if (!FILE_UTILS.fileNameEquals(addedWebXmlFile, file)) {
                    log("Warning: selected " + archiveType
                            + " files include a second " + XML_DESCRIPTOR_PATH
                            + " which will be ignored.\n"
                            + "The duplicate entry is at " + file + '\n"
                            + "The file that will be used is "
                            + addedWebXmlFile,
                            Project.MSG_WARN);
                }
            } else {
                //no added file, yet
                addedWebXmlFile = file;
                //there is no web.xml file, so add it
                addFile = true;
                //and remember that we did
                deploymentDescriptor = file;
            }
        }
        if (addFile) {
            super.zipFile(file, zOut, vPath, mode);
        }