private Set<MavenRepositoryMetadata> getRepositoriesResolvingArtifact( final GAV gav, final MavenProject mavenProject) { ArtifactResult result = null; ArtifactRequest artifactRequest = null; final String artifactName = gav.toString(); final Artifact artifact = new DefaultArtifact(artifactName); final Aether aether = new Aether(mavenProject); final Set<MavenRepositoryMetadata> repositoriesResolvingArtifact = new HashSet<MavenRepositoryMetadata>(); final Map<MavenRepositorySource, Collection<RemoteRepository>> repositories = getRemoteRepositories(mavenProject); // Local Repository artifactRequest = new ArtifactRequest(); artifactRequest.setArtifact(artifact); try { result = aether.getSystem().resolveArtifact(aether.getSession(), artifactRequest); if (result != null && result.isResolved()) { final MavenRepositoryMetadata artifactRepositoryMetaData = makeRepositoryMetaData(result.getRepository(), MavenRepositorySource.LOCAL); if (artifactRepositoryMetaData != null) { repositoriesResolvingArtifact.add(artifactRepositoryMetaData); } } } catch (ArtifactResolutionException are) { // Ignore - this means the Artifact could not be resolved against the given RemoteRepository } // Remote Repositories try { for (Map.Entry<MavenRepositorySource, Collection<RemoteRepository>> e : repositories.entrySet()) { for (ArtifactRepository repository : e.getValue()) { artifactRequest = new ArtifactRequest(); artifactRequest.setArtifact(artifact); java.nio.file.Path tempLocalRepositoryBasePath = null; try { // Maven always tries to resolve against LocalRepository first, which is not much use // when we want to check // if the Artifact is available on a RemoteRepository. Therefore substitute the default // RepositorySystemSession // with one that provides a LocalRepositoryManager that always uses an empty transient // LocalRepository to ensure // Maven does not resolve Artifacts locally. artifactRequest.addRepository((RemoteRepository) repository); tempLocalRepositoryBasePath = getRepositoryPath(gav); result = aether .getSystem() .resolveArtifact( new MavenRepositorySystemSessionWrapper( tempLocalRepositoryBasePath.toString(), aether.getSession()), artifactRequest); if (result != null && result.isResolved()) { final MavenRepositoryMetadata artifactRepositoryMetaData = makeRepositoryMetaData(result.getRepository(), e.getKey()); if (artifactRepositoryMetaData != null) { repositoriesResolvingArtifact.add(artifactRepositoryMetaData); } } } catch (ArtifactResolutionException are) { // Ignore - this means the Artifact could not be resolved against the given // RemoteRepository } finally { tearDownMavenRepository(tempLocalRepositoryBasePath); } } } } catch (IOException ioe) { log.error( "Error resolving '" + gav.toString() + "' against Repositories. Returning empty Collection. ", ioe); } return repositoriesResolvingArtifact; }