diff --git a/docs/manual/CoreTasks/ear.html b/docs/manual/CoreTasks/ear.html new file mode 100644 index 000000000..3ce04541c --- /dev/null +++ b/docs/manual/CoreTasks/ear.html @@ -0,0 +1,100 @@ + + + + +Ant User Manual + + + + +

Ear

+

Description

+

An extension of the Jar task with special +treatment for files that should end up in an Enterprise Application archive.

+

(The Ear task is a shortcut for specifying the particular layout of a EAR 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.

+ +

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionRequired
earfilethe ear-file to create.Yes
appxmlThe deployment descriptor to use (META-INF/application.xml).Yes
basedirthe directory from which to jar the files.No
compressNot only store data but also compress them, defaults to trueNo
includescomma separated list of patterns of files that must be + included. All files are included when omitted.No
includesfilethe name of a file. Each line of this file is + taken to be an include patternNo
excludescomma separated list of patterns of files that must be + excluded. No files (except default excludes) are excluded when omitted.No
excludesfilethe name of a file. Each line of this file is + taken to be an exclude patternNo
defaultexcludesindicates whether default excludes should be used or not + ("yes"/"no"). Default excludes are used when omitted.No
manifestthe manifest file to use.No
whenemptyBehavior to use if no files match.No
+

Example

+
+    <ear earfile="${build.dir}/myapp.ear" appxml="${src.dir}/metadata/application.xml">
+      <fileset dir="${build.dir}" includes="*.jar,*.war"/>
+    </ear>
+
+
+

Copyright © 2000,2001 Apache Software Foundation. All rights +Reserved.

+ + + + + diff --git a/src/main/org/apache/tools/ant/taskdefs/Ear.java b/src/main/org/apache/tools/ant/taskdefs/Ear.java new file mode 100644 index 000000000..a52e6b676 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/Ear.java @@ -0,0 +1,146 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2000 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +package org.apache.tools.ant.taskdefs; + +import org.apache.tools.ant.*; +import org.apache.tools.ant.types.ZipFileSet; + +import java.io.*; +import java.util.Vector; +import java.util.zip.*; + +/** + * Creates a EAR archive. Based on WAR task + * + * @author Stefan Bodewig + * @author Les Hughes + */ +public class Ear extends Jar { + + private File deploymentDescriptor; + private boolean descriptorAdded; + + public Ear() { + super(); + archiveType = "ear"; + emptyBehavior = "create"; + } + + public void setEarfile(File earFile) { + super.setZipfile(earFile); + } + + public void setAppxml(File descr) { + 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.setDir(new File(deploymentDescriptor.getParent())); + fs.setIncludes(deploymentDescriptor.getName()); + fs.setFullpath("META-INF/application.xml"); + super.addFileset(fs); + } + + + public void addArchives(ZipFileSet fs) { + // We just set the prefix for this fileset, and pass it up. + // Do we need to do this? LH + log("addArchives called",Project.MSG_DEBUG); + fs.setPrefix("/"); + super.addFileset(fs); + } + + + protected void initZipOutputStream(ZipOutputStream zOut) + throws IOException, BuildException + { + // If no webxml file is specified, it's an error. + if (deploymentDescriptor == null) { + throw new BuildException("appxml attribute is required", location); + } + + super.initZipOutputStream(zOut); + } + + protected void zipFile(File file, ZipOutputStream zOut, String vPath) + throws IOException + { + // 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 element. + if (vPath.equalsIgnoreCase("META-INF/aplication.xml")) { + if (deploymentDescriptor == null || !deploymentDescriptor.equals(file) || descriptorAdded) { + log("Warning: selected "+archiveType+" files include a META-INF/application.xml which will be ignored " + + "(please use appxml attribute to "+archiveType+" task)", Project.MSG_WARN); + } else { + super.zipFile(file, zOut, vPath); + descriptorAdded = true; + } + } else { + super.zipFile(file, zOut, vPath); + } + } + + /** + * 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(); + } +}