in src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java [276:329]
public void execute() {
validate();
final Resource targetArchive = getDest();
if (!targetArchive.isExists()) {
// force create mode
mode = new Mode();
mode.setValue(Mode.FORCE_CREATE);
}
Collection sourceResources;
try {
sourceResources = findSources();
} catch (IOException ioex) {
throw new BuildException("Failed to read sources", ioex);
}
if (sourceResources.size() == 0) {
if (WhenEmpty.SKIP.equals(emptyBehavior.getValue())) {
log(NO_SOURCES_MSG, Project.MSG_WARN);
} else {
throw new BuildException(NO_SOURCES_MSG);
}
} else {
File copyOfDest = maybeCopyTarget();
Resource destOrCopy = copyOfDest == null
? targetArchive
: new FileResource(copyOfDest);
ArchiveFileSet existingEntries =
fileSetBuilder.buildFileSet(destOrCopy);
existingEntries.setProject(getProject());
try {
List/*<ResourceWithFlags>*/ toAdd
= new ArrayList/*<ResourceWithFlags>*/();
toAdd.addAll(sourceResources);
if (checkAndLogUpToDate(toAdd, targetArchive,
existingEntries)) {
return;
}
addResourcesToKeep(toAdd, existingEntries, sourceResources);
sort(toAdd);
try {
writeArchive(toAdd);
} catch (IOException ioex) {
throw new BuildException("Failed to write archive", ioex);
}
} finally {
if (copyOfDest != null) {
FILE_UTILS.tryHardToDelete(copyOfDest);
}
}
}
}