elements for the implicit fileset. Cosmetics. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272371 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -77,6 +77,8 @@ import java.util.Vector; | |||||
| * @author Glenn McAllister <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a> | * @author Glenn McAllister <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a> | ||||
| * @author Jon S. Stevens <a href="mailto:jon@latchkey.com">jon@latchkey.com</a> | * @author Jon S. Stevens <a href="mailto:jon@latchkey.com">jon@latchkey.com</a> | ||||
| * | * | ||||
| * @since 1.2 | |||||
| * | |||||
| * @ant.task category="filesystem" | * @ant.task category="filesystem" | ||||
| */ | */ | ||||
| public class Delete extends MatchingTask { | public class Delete extends MatchingTask { | ||||
| @@ -84,7 +86,8 @@ public class Delete extends MatchingTask { | |||||
| protected File dir = null; | protected File dir = null; | ||||
| protected Vector filesets = new Vector(); | protected Vector filesets = new Vector(); | ||||
| protected boolean usedMatchingTask = false; | protected boolean usedMatchingTask = false; | ||||
| protected boolean includeEmpty = false; // by default, remove matching empty dirs | |||||
| // by default, remove matching empty dirs | |||||
| protected boolean includeEmpty = false; | |||||
| private int verbosity = Project.MSG_VERBOSE; | private int verbosity = Project.MSG_VERBOSE; | ||||
| private boolean quiet = false; | private boolean quiet = false; | ||||
| @@ -168,6 +171,14 @@ public class Delete extends MatchingTask { | |||||
| return super.createInclude(); | return super.createInclude(); | ||||
| } | } | ||||
| /** | |||||
| * add a name entry on the include files list | |||||
| */ | |||||
| public PatternSet.NameEntry createIncludesFile() { | |||||
| usedMatchingTask = true; | |||||
| return super.createIncludesFile(); | |||||
| } | |||||
| /** | /** | ||||
| * add a name entry on the exclude list | * add a name entry on the exclude list | ||||
| */ | */ | ||||
| @@ -176,6 +187,14 @@ public class Delete extends MatchingTask { | |||||
| return super.createExclude(); | return super.createExclude(); | ||||
| } | } | ||||
| /** | |||||
| * add a name entry on the include files list | |||||
| */ | |||||
| public PatternSet.NameEntry createExcludesFile() { | |||||
| usedMatchingTask = true; | |||||
| return super.createExcludesFile(); | |||||
| } | |||||
| /** | /** | ||||
| * add a set of patterns | * add a set of patterns | ||||
| */ | */ | ||||
| @@ -245,16 +264,19 @@ public class Delete extends MatchingTask { | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| if (usedMatchingTask) { | if (usedMatchingTask) { | ||||
| log("DEPRECATED - Use of the implicit FileSet is deprecated. Use a nested fileset element instead."); | |||||
| log("DEPRECATED - Use of the implicit FileSet is deprecated. " | |||||
| + "Use a nested fileset element instead."); | |||||
| } | } | ||||
| if (file == null && dir == null && filesets.size() == 0) { | if (file == null && dir == null && filesets.size() == 0) { | ||||
| throw new BuildException("At least one of the file or dir attributes, or a fileset element, must be set."); | |||||
| throw new BuildException("At least one of the file or dir " | |||||
| + "attributes, or a fileset element, " | |||||
| + "must be set."); | |||||
| } | } | ||||
| if (quiet && failonerror) { | if (quiet && failonerror) { | ||||
| throw new BuildException("quiet and failonerror cannot both be set to true", | |||||
| location); | |||||
| throw new BuildException("quiet and failonerror cannot both be " | |||||
| + "set to true", location); | |||||
| } | } | ||||
| @@ -262,33 +284,39 @@ public class Delete extends MatchingTask { | |||||
| if (file != null) { | if (file != null) { | ||||
| if (file.exists()) { | if (file.exists()) { | ||||
| if (file.isDirectory()) { | if (file.isDirectory()) { | ||||
| log("Directory " + file.getAbsolutePath() + " cannot be removed using the file attribute. Use dir instead."); | |||||
| log("Directory " + file.getAbsolutePath() | |||||
| + " cannot be removed using the file attribute. " | |||||
| + "Use dir instead."); | |||||
| } else { | } else { | ||||
| log("Deleting: " + file.getAbsolutePath()); | log("Deleting: " + file.getAbsolutePath()); | ||||
| if (!file.delete()) { | if (!file.delete()) { | ||||
| String message="Unable to delete file " + file.getAbsolutePath(); | |||||
| String message="Unable to delete file " | |||||
| + file.getAbsolutePath(); | |||||
| if(failonerror) { | if(failonerror) { | ||||
| throw new BuildException(message); | throw new BuildException(message); | ||||
| } else { | } else { | ||||
| log(message, | |||||
| quiet ? Project.MSG_VERBOSE : Project.MSG_WARN); | |||||
| log(message, quiet ? Project.MSG_VERBOSE | |||||
| : Project.MSG_WARN); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } else { | } else { | ||||
| log("Could not find file " + file.getAbsolutePath() + " to delete.", | |||||
| log("Could not find file " + file.getAbsolutePath() | |||||
| + " to delete.", | |||||
| Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
| } | } | ||||
| } | } | ||||
| // delete the directory | // delete the directory | ||||
| if (dir != null && dir.exists() && dir.isDirectory() && !usedMatchingTask) { | |||||
| if (dir != null && dir.exists() && dir.isDirectory() && | |||||
| !usedMatchingTask) { | |||||
| /* | /* | ||||
| If verbosity is MSG_VERBOSE, that mean we are doing regular logging | |||||
| (backwards as that sounds). In that case, we want to print one | |||||
| message about deleting the top of the directory tree. Otherwise, | |||||
| the removeDir method will handle messages for _all_ directories. | |||||
| If verbosity is MSG_VERBOSE, that mean we are doing | |||||
| regular logging (backwards as that sounds). In that | |||||
| case, we want to print one message about deleting the | |||||
| top of the directory tree. Otherwise, the removeDir | |||||
| method will handle messages for _all_ directories. | |||||
| */ | */ | ||||
| if (verbosity == Project.MSG_VERBOSE) { | if (verbosity == Project.MSG_VERBOSE) { | ||||
| log("Deleting directory " + dir.getAbsolutePath()); | log("Deleting directory " + dir.getAbsolutePath()); | ||||
| @@ -341,7 +369,7 @@ public class Delete extends MatchingTask { | |||||
| protected void removeDir(File d) { | protected void removeDir(File d) { | ||||
| String[] list = d.list(); | String[] list = d.list(); | ||||
| if (list == null) { | if (list == null) { | ||||
| list = new String[0]; | |||||
| list = new String[0]; | |||||
| } | } | ||||
| for (int i = 0; i < list.length; i++) { | for (int i = 0; i < list.length; i++) { | ||||
| String s = list[i]; | String s = list[i]; | ||||
| @@ -351,7 +379,8 @@ public class Delete extends MatchingTask { | |||||
| } else { | } else { | ||||
| log("Deleting " + f.getAbsolutePath(), verbosity); | log("Deleting " + f.getAbsolutePath(), verbosity); | ||||
| if (!f.delete()) { | if (!f.delete()) { | ||||
| String message="Unable to delete file " + f.getAbsolutePath(); | |||||
| String message="Unable to delete file " | |||||
| + f.getAbsolutePath(); | |||||
| if(failonerror) { | if(failonerror) { | ||||
| throw new BuildException(message); | throw new BuildException(message); | ||||
| } else { | } else { | ||||
| @@ -363,7 +392,8 @@ public class Delete extends MatchingTask { | |||||
| } | } | ||||
| log("Deleting directory " + d.getAbsolutePath(), verbosity); | log("Deleting directory " + d.getAbsolutePath(), verbosity); | ||||
| if (!d.delete()) { | if (!d.delete()) { | ||||
| String message="Unable to delete directory " + dir.getAbsolutePath(); | |||||
| String message="Unable to delete directory " | |||||
| + dir.getAbsolutePath(); | |||||
| if(failonerror) { | if(failonerror) { | ||||
| throw new BuildException(message); | throw new BuildException(message); | ||||
| } else { | } else { | ||||
| @@ -382,12 +412,14 @@ public class Delete extends MatchingTask { | |||||
| */ | */ | ||||
| protected void removeFiles(File d, String[] files, String[] dirs) { | protected void removeFiles(File d, String[] files, String[] dirs) { | ||||
| if (files.length > 0) { | if (files.length > 0) { | ||||
| log("Deleting " + files.length + " files from " + d.getAbsolutePath()); | |||||
| log("Deleting " + files.length + " files from " | |||||
| + d.getAbsolutePath()); | |||||
| for (int j=0; j<files.length; j++) { | for (int j=0; j<files.length; j++) { | ||||
| File f = new File(d, files[j]); | File f = new File(d, files[j]); | ||||
| log("Deleting " + f.getAbsolutePath(), verbosity); | log("Deleting " + f.getAbsolutePath(), verbosity); | ||||
| if (!f.delete()) { | if (!f.delete()) { | ||||
| String message="Unable to delete file " + f.getAbsolutePath(); | |||||
| String message="Unable to delete file " | |||||
| + f.getAbsolutePath(); | |||||
| if(failonerror) { | if(failonerror) { | ||||
| throw new BuildException(message); | throw new BuildException(message); | ||||
| } else { | } else { | ||||
| @@ -110,6 +110,7 @@ import org.apache.tools.ant.types.FileList; | |||||
| * @author <a href="mailto:cstrong@arielpartners.com">Craeg Strong</a> | * @author <a href="mailto:cstrong@arielpartners.com">Craeg Strong</a> | ||||
| * @ant.task category="filesystem" | * @ant.task category="filesystem" | ||||
| * @version $Revision$ $Date$ | * @version $Revision$ $Date$ | ||||
| * @since Ant 1.4 | |||||
| */ | */ | ||||
| public class DependSet extends MatchingTask { | public class DependSet extends MatchingTask { | ||||
| @@ -159,11 +160,13 @@ public class DependSet extends MatchingTask { | |||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| if ( (sourceFileSets.size() == 0) && (sourceFileLists.size() == 0) ) { | if ( (sourceFileSets.size() == 0) && (sourceFileLists.size() == 0) ) { | ||||
| throw new BuildException("At least one <srcfileset> or <srcfilelist> element must be set"); | |||||
| throw new BuildException("At least one <srcfileset> or <srcfilelist>" | |||||
| + " element must be set"); | |||||
| } | } | ||||
| if ( (targetFileSets.size() == 0) && (targetFileLists.size() == 0) ) { | if ( (targetFileSets.size() == 0) && (targetFileLists.size() == 0) ) { | ||||
| throw new BuildException("At least one <targetfileset> or <targetfilelist> element must be set"); | |||||
| throw new BuildException("At least one <targetfileset> or" | |||||
| + " <targetfilelist> element must be set"); | |||||
| } | } | ||||
| long now = (new Date()).getTime(); | long now = (new Date()).getTime(); | ||||
| @@ -255,8 +258,8 @@ public class DependSet extends MatchingTask { | |||||
| Enumeration enumSourceLists = sourceFileLists.elements(); | Enumeration enumSourceLists = sourceFileLists.elements(); | ||||
| while (upToDate && enumSourceLists.hasMoreElements()) { | while (upToDate && enumSourceLists.hasMoreElements()) { | ||||
| FileList sourceFL = (FileList) enumSourceLists.nextElement(); | |||||
| String[] sourceFiles = sourceFL.getFiles(project); | |||||
| FileList sourceFL = (FileList) enumSourceLists.nextElement(); | |||||
| String[] sourceFiles = sourceFL.getFiles(project); | |||||
| for (int i=0; upToDate && i < sourceFiles.length; i++) { | for (int i=0; upToDate && i < sourceFiles.length; i++) { | ||||
| File src = new File(sourceFL.getDir(project), sourceFiles[i]); | File src = new File(sourceFL.getDir(project), sourceFiles[i]); | ||||
| @@ -267,7 +270,8 @@ public class DependSet extends MatchingTask { | |||||
| } | } | ||||
| if (!src.exists()) { | if (!src.exists()) { | ||||
| log(sourceFiles[i]+ " does not exist.", Project.MSG_VERBOSE); | |||||
| log(sourceFiles[i]+ " does not exist.", | |||||
| Project.MSG_VERBOSE); | |||||
| upToDate = false; | upToDate = false; | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -288,7 +292,7 @@ public class DependSet extends MatchingTask { | |||||
| Enumeration enumSourceSets = sourceFileSets.elements(); | Enumeration enumSourceSets = sourceFileSets.elements(); | ||||
| while (upToDate && enumSourceSets.hasMoreElements()) { | while (upToDate && enumSourceSets.hasMoreElements()) { | ||||
| FileSet sourceFS = (FileSet) enumSourceSets.nextElement(); | |||||
| FileSet sourceFS = (FileSet) enumSourceSets.nextElement(); | |||||
| DirectoryScanner sourceDS = sourceFS.getDirectoryScanner(project); | DirectoryScanner sourceDS = sourceFS.getDirectoryScanner(project); | ||||
| String[] sourceFiles = sourceDS.getIncludedFiles(); | String[] sourceFiles = sourceDS.getIncludedFiles(); | ||||
| @@ -313,11 +317,11 @@ public class DependSet extends MatchingTask { | |||||
| log("Deleting all target files. ", Project.MSG_VERBOSE); | log("Deleting all target files. ", Project.MSG_VERBOSE); | ||||
| for (Enumeration e = allTargets.elements(); e.hasMoreElements(); ) { | for (Enumeration e = allTargets.elements(); e.hasMoreElements(); ) { | ||||
| File fileToRemove = (File)e.nextElement(); | File fileToRemove = (File)e.nextElement(); | ||||
| log("Deleting file " + fileToRemove.getAbsolutePath(), Project.MSG_VERBOSE); | |||||
| log("Deleting file " + fileToRemove.getAbsolutePath(), | |||||
| Project.MSG_VERBOSE); | |||||
| fileToRemove.delete(); | fileToRemove.delete(); | ||||
| } | } | ||||
| } | } | ||||
| } //-- execute | } //-- execute | ||||
| @@ -61,13 +61,14 @@ import org.apache.tools.zip.ZipOutputStream; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| /** | /** | ||||
| * Creates a EAR archive. Based on WAR task | * Creates a EAR archive. Based on WAR task | ||||
| * | * | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| * @author <a href="mailto:leslie.hughes@rubus.com">Les Hughes</a> | * @author <a href="mailto:leslie.hughes@rubus.com">Les Hughes</a> | ||||
| * | * | ||||
| * @since Ant 1.4 | |||||
| * | |||||
| * @ant.task category="packaging" | * @ant.task category="packaging" | ||||
| */ | */ | ||||
| public class Ear extends Jar { | public class Ear extends Jar { | ||||
| @@ -94,7 +95,9 @@ public class Ear extends Jar { | |||||
| public void setAppxml(File descr) { | public void setAppxml(File descr) { | ||||
| deploymentDescriptor = descr; | deploymentDescriptor = descr; | ||||
| if (!deploymentDescriptor.exists()) { | if (!deploymentDescriptor.exists()) { | ||||
| throw new BuildException("Deployment descriptor: " + deploymentDescriptor + " does not exist."); | |||||
| throw new BuildException("Deployment descriptor: " | |||||
| + deploymentDescriptor | |||||
| + " does not exist."); | |||||
| } | } | ||||
| // Create a ZipFileSet for this file, and pass it up. | // Create a ZipFileSet for this file, and pass it up. | ||||
| @@ -109,7 +112,6 @@ public class Ear extends Jar { | |||||
| public void addArchives(ZipFileSet fs) { | public void addArchives(ZipFileSet fs) { | ||||
| // We just set the prefix for this fileset, and pass it up. | // We just set the prefix for this fileset, and pass it up. | ||||
| // Do we need to do this? LH | // Do we need to do this? LH | ||||
| log("addArchives called",Project.MSG_DEBUG); | |||||
| fs.setPrefix("/"); | fs.setPrefix("/"); | ||||
| super.addFileset(fs); | super.addFileset(fs); | ||||
| } | } | ||||
| @@ -129,14 +131,19 @@ public class Ear extends Jar { | |||||
| protected void zipFile(File file, ZipOutputStream zOut, String vPath) | protected void zipFile(File file, ZipOutputStream zOut, String vPath) | ||||
| throws IOException | 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 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 (vPath.equalsIgnoreCase("META-INF/application.xml")) { | if (vPath.equalsIgnoreCase("META-INF/application.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); | |||||
| 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 { | } else { | ||||
| super.zipFile(file, zOut, vPath); | super.zipFile(file, zOut, vPath); | ||||
| descriptorAdded = true; | descriptorAdded = true; | ||||
| @@ -147,8 +154,8 @@ public class Ear extends Jar { | |||||
| } | } | ||||
| /** | /** | ||||
| * Make sure we don't think we already have a application.xml next time this task | |||||
| * gets executed. | |||||
| * Make sure we don't think we already have a application.xml next | |||||
| * time this task gets executed. | |||||
| */ | */ | ||||
| protected void cleanUp() { | protected void cleanUp() { | ||||
| descriptorAdded = false; | descriptorAdded = false; | ||||
| @@ -68,6 +68,8 @@ import java.io.IOException; | |||||
| * | * | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| * | * | ||||
| * @since Ant 1.2 | |||||
| * | |||||
| * @ant.task category="packaging" | * @ant.task category="packaging" | ||||
| */ | */ | ||||
| public class War extends Jar { | public class War extends Jar { | ||||
| @@ -94,7 +96,9 @@ public class War extends Jar { | |||||
| public void setWebxml(File descr) { | public void setWebxml(File descr) { | ||||
| deploymentDescriptor = descr; | deploymentDescriptor = descr; | ||||
| if (!deploymentDescriptor.exists()) { | if (!deploymentDescriptor.exists()) { | ||||
| throw new BuildException("Deployment descriptor: " + deploymentDescriptor + " does not exist."); | |||||
| throw new BuildException("Deployment descriptor: " | |||||
| + deploymentDescriptor | |||||
| + " does not exist."); | |||||
| } | } | ||||
| // Create a ZipFileSet for this file, and pass it up. | // Create a ZipFileSet for this file, and pass it up. | ||||
| @@ -137,14 +141,18 @@ public class War extends Jar { | |||||
| protected void zipFile(File file, ZipOutputStream zOut, String vPath) | protected void zipFile(File file, ZipOutputStream zOut, String vPath) | ||||
| throws IOException | 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 <fileset> element. | |||||
| // 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. | |||||
| if (vPath.equalsIgnoreCase("WEB-INF/web.xml")) { | if (vPath.equalsIgnoreCase("WEB-INF/web.xml")) { | ||||
| if (deploymentDescriptor == null || !deploymentDescriptor.equals(file) || descriptorAdded) { | |||||
| log("Warning: selected "+archiveType+" files include a WEB-INF/web.xml which will be ignored " + | |||||
| "(please use webxml attribute to "+archiveType+" task)", Project.MSG_WARN); | |||||
| if (deploymentDescriptor == null | |||||
| || !deploymentDescriptor.equals(file) | |||||
| || descriptorAdded) { | |||||
| log("Warning: selected " + archiveType | |||||
| + " files include a WEB-INF/web.xml which will be ignored " | |||||
| + "(please use webxml attribute to " | |||||
| + archiveType + " task)", Project.MSG_WARN); | |||||
| } else { | } else { | ||||
| super.zipFile(file, zOut, vPath); | super.zipFile(file, zOut, vPath); | ||||
| descriptorAdded = true; | descriptorAdded = true; | ||||