in maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDeployer.java [279:373]
private void upload(
Collection<MetadataUpload> metadataUploads,
RepositorySystemSession session,
Metadata metadata,
RemoteRepository repository,
RepositoryConnector connector,
EventCatapult catapult)
throws DeploymentException {
LocalRepositoryManager lrm = session.getLocalRepositoryManager();
Path dstPath = lrm.getAbsolutePathForRemoteMetadata(metadata, repository, "");
if (metadata instanceof MergeableMetadata) {
if (!((MergeableMetadata) metadata).isMerged()) {
RepositoryEvent.Builder event = new RepositoryEvent.Builder(session, EventType.METADATA_RESOLVING);
event.setTrace(catapult.getTrace());
event.setMetadata(metadata);
event.setRepository(repository);
repositoryEventDispatcher.dispatch(event.build());
event = new RepositoryEvent.Builder(session, EventType.METADATA_DOWNLOADING);
event.setTrace(catapult.getTrace());
event.setMetadata(metadata);
event.setRepository(repository);
repositoryEventDispatcher.dispatch(event.build());
RepositoryPolicy policy = getPolicy(session, repository, metadata.getNature());
MetadataDownload download = new MetadataDownload();
download.setMetadata(metadata);
download.setPath(dstPath);
download.setChecksumPolicy(policy.getChecksumPolicy());
download.setListener(SafeTransferListener.wrap(session));
download.setTrace(catapult.getTrace());
connector.get(null, Collections.singletonList(download));
Exception error = download.getException();
if (error instanceof MetadataNotFoundException) {
try {
Files.deleteIfExists(dstPath);
} catch (IOException e) {
throw new DeploymentException(
"Failed to delete cached metadata " + metadata + ": " + e.getMessage(), e);
}
}
event = new RepositoryEvent.Builder(session, EventType.METADATA_DOWNLOADED);
event.setTrace(catapult.getTrace());
event.setMetadata(metadata);
event.setRepository(repository);
event.setException(error);
event.setPath(dstPath);
repositoryEventDispatcher.dispatch(event.build());
event = new RepositoryEvent.Builder(session, EventType.METADATA_RESOLVED);
event.setTrace(catapult.getTrace());
event.setMetadata(metadata);
event.setRepository(repository);
event.setException(error);
event.setPath(dstPath);
repositoryEventDispatcher.dispatch(event.build());
if (error != null && !(error instanceof MetadataNotFoundException)) {
throw new DeploymentException(
"Failed to retrieve remote metadata " + metadata + ": " + error.getMessage(), error);
}
}
try {
((MergeableMetadata) metadata).merge(dstPath, dstPath);
} catch (RepositoryException e) {
throw new DeploymentException("Failed to update metadata " + metadata + ": " + e.getMessage(), e);
}
} else {
if (metadata.getPath() == null) {
throw new DeploymentException("Failed to update metadata " + metadata + ": No file attached.");
}
try {
pathProcessor.copy(metadata.getPath(), dstPath);
} catch (IOException e) {
throw new DeploymentException("Failed to update metadata " + metadata + ": " + e.getMessage(), e);
}
}
UpdateCheck<Metadata, MetadataTransferException> check = new UpdateCheck<>();
check.setItem(metadata);
check.setPath(dstPath);
check.setRepository(repository);
check.setAuthoritativeRepository(repository);
updateCheckManager.touchMetadata(session, check);
MetadataUpload upload = new MetadataUpload(metadata, dstPath);
upload.setTrace(catapult.getTrace());
upload.setListener(new MetadataUploadListener(catapult, upload));
metadataUploads.add(upload);
}