in wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java [222:286]
public void fillOutputData(OutputData outputData) throws TransferFailedException {
OutputStream os;
Resource resource = outputData.getResource();
RepositoryPermissions permissions = repository.getPermissions();
try {
if (!ftp.changeWorkingDirectory(getRepository().getBasedir())) {
throw new TransferFailedException(
"Required directory: '" + getRepository().getBasedir() + "' " + "is missing");
}
String[] dirs = PathUtils.dirnames(resource.getName());
for (String dir : dirs) {
boolean dirChanged = ftp.changeWorkingDirectory(dir);
if (!dirChanged) {
// first, try to create it
boolean success = ftp.makeDirectory(dir);
if (success) {
if (permissions != null && permissions.getGroup() != null) {
// ignore failures
ftp.sendSiteCommand("CHGRP " + permissions.getGroup() + " " + dir);
}
if (permissions != null && permissions.getDirectoryMode() != null) {
// ignore failures
ftp.sendSiteCommand("CHMOD " + permissions.getDirectoryMode() + " " + dir);
}
dirChanged = ftp.changeWorkingDirectory(dir);
}
}
if (!dirChanged) {
throw new TransferFailedException("Unable to create directory " + dir);
}
}
// we come back to original basedir so
// FTP wagon is ready for next requests
if (!ftp.changeWorkingDirectory(getRepository().getBasedir())) {
throw new TransferFailedException("Unable to return to the base directory");
}
os = ftp.storeFileStream(resource.getName());
if (os == null) {
String msg = "Cannot transfer resource: '" + resource
+ "'. Output stream is null. FTP Server response: " + ftp.getReplyString();
throw new TransferFailedException(msg);
}
fireTransferDebug("resource = " + resource);
} catch (IOException e) {
throw new TransferFailedException("Error transferring over FTP", e);
}
outputData.setOutputStream(os);
}