package org.jfrog.build.extractor.maven.resolver;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.impl.internal.DefaultArtifactResolver;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.resolution.ArtifactRequest;
import org.sonatype.aether.resolution.ArtifactResolutionException;
import org.sonatype.aether.resolution.ArtifactResult;
import org.sonatype.aether.util.DefaultRepositorySystemSession;
import javax.inject.Named;
import java.util.Collection;
import java.util.List;
/**
* The class extends Maven's DefaultArtifactResolver and adds to it code that enforces Artifactory's configured resolution repositories.
*/
@Named
@Component( role = ArtifactorySonatypeArtifactResolver.class )
public class ArtifactorySonatypeArtifactResolver extends DefaultArtifactResolver {
@Requirement
private ResolutionHelper resolutionHelper;
@Requirement
private Logger logger;
@Requirement
private ArtifactorySonatypeResolversHelper helper;
public void initResolutionRepositories(RepositorySystemSession session) {
helper.getResolutionRepositories(session);
}
private void enforceResolutionRepositories(RepositorySystemSession session, ArtifactRequest request) {
// Get the Artifactory repositories configured in the Artifactory plugin:
List<RemoteRepository> repositories = helper.getResolutionRepositories(session);
// The repositories list can be empty, in case this build is not running from a CI server.
// In that case, we do not want to override Maven's configured repositories:
if (repositories != null && !repositories.isEmpty()) {
request.setRepositories(repositories);
}
}
public List<ArtifactResult> resolveArtifacts( RepositorySystemSession session, Collection<? extends ArtifactRequest> requests )
throws ArtifactResolutionException {
if (session instanceof DefaultRepositorySystemSession) {
DefaultRepositorySystemSession defRepoSession = (DefaultRepositorySystemSession)session;
defRepoSession.setNotFoundCachingEnabled(false);
defRepoSession.setTransferErrorCachingEnabled(false);
}
for(ArtifactRequest request : requests) {
enforceResolutionRepositories(session, request);
}
// Now we let Maven resolve the artifacts:
return super.resolveArtifacts(session, requests);
}
public RemoteRepository getSnapshotRepository(RepositorySystemSession session) {
return helper.getSnapshotRepository(session);
}
public RemoteRepository getReleaseRepository(RepositorySystemSession session) {
return helper.getReleaseRepository(session);
}
}