in src/main/java/org/apache/maven/plugins/clean/Cleaner.java [132:189]
private boolean fastDelete(File baseDirFile) {
Path baseDir = baseDirFile.toPath();
Path fastDir = this.fastDir.toPath();
// Handle the case where we use ${maven.multiModuleProjectDirectory}/target/.clean for example
if (fastDir.toAbsolutePath().startsWith(baseDir.toAbsolutePath())) {
try {
String prefix = baseDir.getFileName().toString() + ".";
Path tmpDir = Files.createTempDirectory(baseDir.getParent(), prefix);
try {
Files.move(baseDir, tmpDir, StandardCopyOption.REPLACE_EXISTING);
if (session != null) {
session.getRepositorySession().getData().set(LAST_DIRECTORY_TO_DELETE, baseDir.toFile());
}
baseDir = tmpDir;
} catch (IOException e) {
Files.delete(tmpDir);
throw e;
}
} catch (IOException e) {
if (logDebug != null) {
// TODO: this Logger interface cannot log exceptions and needs refactoring
logDebug.log("Unable to fast delete directory: " + e);
}
return false;
}
}
// Create fastDir and the needed parents if needed
try {
if (!Files.isDirectory(fastDir)) {
Files.createDirectories(fastDir);
}
} catch (IOException e) {
if (logDebug != null) {
// TODO: this Logger interface cannot log exceptions and needs refactoring
logDebug.log("Unable to fast delete directory as the path " + fastDir
+ " does not point to a directory or cannot be created: " + e);
}
return false;
}
try {
Path tmpDir = Files.createTempDirectory(fastDir, "");
Path dstDir = tmpDir.resolve(baseDir.getFileName());
// Note that by specifying the ATOMIC_MOVE, we expect an exception to be thrown
// if the path leads to a directory on another mountpoint. If this is the case
// or any other exception occurs, an exception will be thrown in which case
// the method will return false and the usual deletion will be performed.
Files.move(baseDir, dstDir, StandardCopyOption.ATOMIC_MOVE);
BackgroundCleaner.delete(this, tmpDir.toFile(), fastMode);
return true;
} catch (IOException e) {
if (logDebug != null) {
// TODO: this Logger interface cannot log exceptions and needs refactoring
logDebug.log("Unable to fast delete directory: " + e);
}
return false;
}
}