package org.jabox.maven.helper.aether.aether; import java.io.File; import java.util.List; import java.util.Vector; import org.apache.maven.repository.internal.DefaultServiceLocator; import org.apache.maven.repository.internal.MavenRepositorySystemSession; import org.sonatype.aether.RepositorySystem; import org.sonatype.aether.RepositorySystemSession; import org.sonatype.aether.collection.CollectRequest; import org.sonatype.aether.collection.DependencyCollectionException; import org.sonatype.aether.connector.wagon.WagonProvider; import org.sonatype.aether.connector.wagon.WagonRepositoryConnectorFactory; import org.sonatype.aether.graph.Dependency; import org.sonatype.aether.repository.LocalRepository; 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.spi.connector.RepositoryConnectorFactory; import org.sonatype.aether.util.artifact.DefaultArtifact; public class Aether { private String remoteRepository; private RepositorySystem repositorySystem; private LocalRepository localRepository; public Aether(String remoteRepository, String localRepository) { this.remoteRepository = remoteRepository; this.repositorySystem = newSystem(); this.localRepository = new LocalRepository(localRepository); } private RepositorySystem newSystem() { DefaultServiceLocator locator = new DefaultServiceLocator(); locator .setServices(WagonProvider.class, new ManualWagonProvider()); locator.addService(RepositoryConnectorFactory.class, WagonRepositoryConnectorFactory.class); return locator.getService(RepositorySystem.class); } private RepositorySystemSession newSession() { MavenRepositorySystemSession session = new MavenRepositorySystemSession(); session.setLocalRepositoryManager(repositorySystem .newLocalRepositoryManager(localRepository)); return session; } public File resolveArtifact(String groupId, String artifactId, String version, String extension) throws DependencyCollectionException, ArtifactResolutionException { RepositorySystemSession session = newSession(); DefaultArtifact artifact = new DefaultArtifact(groupId, artifactId, "", extension, version); Dependency dependency = new Dependency(artifact, "runtime"); RemoteRepository central = new RemoteRepository("central", "default", remoteRepository); CollectRequest collectRequest = new CollectRequest(); collectRequest.setRoot(dependency); collectRequest.addRepository(central); List<RemoteRepository> repositories = new Vector<RemoteRepository>(); repositories.add(central); ArtifactRequest ar = new ArtifactRequest(artifact, repositories, null); ArtifactResult result = repositorySystem.resolveArtifact(session, ar); return result.getArtifact().getFile(); } }