package de.saumya.mojo.jruby9;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.repository.RepositorySystem;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.UnArchiver;
import org.codehaus.plexus.util.FileUtils;
public class ArtifactHelper {
private final UnArchiver archiver;
private final RepositorySystem system;
private final ArtifactRepository localRepo;
private final List<ArtifactRepository> remoteRepos;
public ArtifactHelper(UnArchiver archiver, RepositorySystem system,
ArtifactRepository localRepo, List<ArtifactRepository> remoteRepos) {
this.system = system;
this.localRepo = localRepo;
this.remoteRepos = remoteRepos;
this.archiver = archiver;
}
public Set<Artifact> resolve(String groupId, String artifactId, String version)
throws MojoExecutionException {
return resolve(groupId, artifactId, version, null);
}
public Set<Artifact> resolve(String groupId, String artifactId, String version, final String exclusion)
throws MojoExecutionException {
ArtifactResolutionRequest request = new ArtifactResolutionRequest()
.setResolveTransitively(true)
.setResolveRoot(true)
.setArtifact(system.createArtifact(groupId, artifactId, version, "jar"))
.setLocalRepository(this.localRepo)
.setRemoteRepositories(remoteRepos).setCollectionFilter(new ArtifactFilter() {
@Override
public boolean include(Artifact artifact) {
if (exclusion != null &&
(artifact.getGroupId() + ":" + artifact.getArtifactId()).equals(exclusion)) {
return false;
}
return artifact.getScope() == null || artifact.getScope().equals("compile") || artifact.getScope().equals("runtime");
}
});
ArtifactResolutionResult result = system.resolve(request);
// TODO error handling
return result.getArtifacts();
}
public void copy(File output, String groupId, String artifactId, String version)
throws MojoExecutionException {
copy(output, groupId, artifactId, version, null);
}
public void copy(File output, String groupId, String artifactId, String version, String exclusion)
throws MojoExecutionException {
output.mkdirs();
for(Artifact artifact: resolve(groupId, artifactId, version, exclusion)) {
try {
FileUtils.copyFile(artifact.getFile(), new File(output, artifact.getFile().getName()));
} catch (IOException e) {
throw new MojoExecutionException("could not copy: " + artifact, e);
}
}
}
public void unzip(File output, String groupId, String artifactId, String version)
throws MojoExecutionException {
output.mkdirs();
archiver.setDestDirectory(output);
for(Artifact artifact: resolve(groupId, artifactId, version)) {
archiver.setSourceFile(artifact.getFile());
try {
archiver.extract();
} catch (ArchiverException e) {
throw new MojoExecutionException("could not unzip: " + artifact, e);
}
}
}
}