package com.github.signed.sandboxes.maven; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.AbstractArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolutionResult; import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; public class TransitiveArtifactResolver { private final ArtifactFactory artifactFactory; private final ArtifactRepository localRepository; private final ArtifactMetadataSource artifactMetadataSource; private final ArtifactResolver artifactResolver; public TransitiveArtifactResolver(ArtifactFactory artifactFactory, ArtifactRepository localRepository, ArtifactMetadataSource artifactMetadataSource, ArtifactResolver artifactResolver) { this.artifactFactory = artifactFactory; this.localRepository = localRepository; this.artifactMetadataSource = artifactMetadataSource; this.artifactResolver = artifactResolver; } @SuppressWarnings("unchecked") public Set<Artifact> allTransitiveDependencies(MavenProject mavenProject, ArrayList<ArtifactRepository> repoList) throws MojoExecutionException { Set<Artifact> directDependencies = mavenProject.getDependencyArtifacts(); Set<Artifact> allDependencies = new HashSet<Artifact>(); for (Artifact directDependency : directDependencies) { allDependencies.addAll(resolveTransitiveDependencies(directDependency, repoList)); } return allDependencies; } @SuppressWarnings("unchecked") private Set<Artifact> resolveTransitiveDependencies(Artifact toDownload, List<ArtifactRepository> repoList) throws MojoExecutionException { try { ArtifactResolutionResult resolutionResult = this.artifactResolver.resolveTransitively(Collections.singleton(toDownload), dummyOriginatingArtifact(), repoList, localRepository, artifactMetadataSource); return resolutionResult.getArtifacts(); } catch (AbstractArtifactResolutionException e) { throw new MojoExecutionException("Couldn't download artifact: " + e.getMessage(), e); } } private Artifact dummyOriginatingArtifact() { return artifactFactory.createBuildArtifact("org.apache.maven.plugins", "maven-downloader-plugin", "1.0", "jar"); } }