diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ear.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ear.java | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ear.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ear.java new file mode 100644 index 00000000..6e08ecda --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ear.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs; + +import java.io.File; +import java.io.IOException; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.ZipFileSet; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.zip.ZipOutputStream; + +/** + * Creates a EAR archive. Based on WAR task + * + * @since Ant 1.4 + * + * @ant.task category="packaging" + */ +public class Ear extends Jar { + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); + + private File deploymentDescriptor; + private boolean descriptorAdded; + private static final String XML_DESCRIPTOR_PATH = "META-INF/application.xml"; + + /** + * Create an Ear task. + */ + public Ear() { + super(); + archiveType = "ear"; + emptyBehavior = "create"; + } + + /** + * Set the destination file. + * @param earFile the destination file + * @deprecated since 1.5.x. + * Use setDestFile(destfile) instead. + */ + public void setEarfile(File earFile) { + setDestFile(earFile); + } + + /** + * File to incorporate as application.xml. + * @param descr the descriptor file + */ + 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.setFile(deploymentDescriptor); + fs.setFullpath(XML_DESCRIPTOR_PATH); + super.addFileset(fs); + } + + + /** + * Adds zipfileset. + * + * @param fs zipfileset to add + */ + public void addArchives(ZipFileSet fs) { + // We just set the prefix for this fileset, and pass it up. + // Do we need to do this? LH + fs.setPrefix("/"); + super.addFileset(fs); + } + + + /** + * Initialize the output stream. + * @param zOut the zip output stream. + * @throws IOException on I/O errors + * @throws BuildException on other errors + */ + protected void initZipOutputStream(ZipOutputStream zOut) + throws IOException, BuildException { + // If no webxml file is specified, it's an error. + if (deploymentDescriptor == null && !isInUpdateMode()) { + throw new BuildException("appxml attribute is required", getLocation()); + } + + super.initZipOutputStream(zOut); + } + + /** + * Overridden from Zip class to deal with application.xml + * @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 error + */ + protected void zipFile(File file, ZipOutputStream zOut, String vPath, + int mode) + throws IOException { + // If the file being added is META-INF/application.xml, we + // warn if it's not the one specified in the "appxml" + // attribute - or if it's being added twice, meaning the same + // file is specified by the "appxml" attribute and in a + // <fileset> element. + if (XML_DESCRIPTOR_PATH.equalsIgnoreCase(vPath)) { + if (deploymentDescriptor == null + || !FILE_UTILS.fileNameEquals(deploymentDescriptor, file) + || descriptorAdded) { + logWhenWriting("Warning: selected " + archiveType + + " files include a " + XML_DESCRIPTOR_PATH + + " which will" + + " be ignored (please use appxml attribute to " + + archiveType + " task)", + Project.MSG_WARN); + } else { + super.zipFile(file, zOut, vPath, mode); + descriptorAdded = true; + } + } else { + super.zipFile(file, zOut, vPath, mode); + } + } + + /** + * Make sure we don't think we already have a application.xml next + * time this task gets executed. + */ + protected void cleanUp() { + descriptorAdded = false; + super.cleanUp(); + } +} |