Fork me on GitHub jcabi

23-Sep-2013 0.8

Aether adapter for Maven plugins

Aether is a dependency management toolkit for Maven repositories. It is very convenient to use Aether in your Maven plugins, when it's necessary to find a location of certain artifact or find out what transitive dependencies it contains. This jcabi-aether module contains Aether class, an adapter between your plugin and Aether.

This is how you find out the location of a junit:junit-dep:4.10 artifact:

import com.jcabi.aether.Aether;
import java.io.File;
import org.apache.maven.plugin.AbstractMojo;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.util.artifact.DefaultArtifact;
import org.sonatype.aether.util.artifact.JavaScopes;

public class MyMojo extends AbstractMojo {
  /**
   * @parameter default-value="${repositorySystemSession}"
   * @readonly
   */
  private RepositorySystemSession session;
  @Override
  public void execute() {
    File repo = this.session.getLocalRepository().getBasedir();
    Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
      new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
      JavaScopes.COMPILE
    );
    // Now you have a full set of artifacts that include junit-dep.jar
    // and all its dependencies in "runtime" scope. The first
    // element in the collection is junit-dep.jar itself. You can use
    // Artifact#getFile() method to get its absolute path
  }
}

Otherwise, if you're outside of Maven infrastructure:

import com.jcabi.aether.Aether;
import java.io.File;
import java.util.Arrays;
import org.apache.maven.project.MavenProject;
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.util.artifact.DefaultArtifact;

public class Main {
  public static void main(String[] args) {
    File local = new File("/tmp/local-repository");
    Collection<RemoteRepository> remotes = Arrays.asList(
      new RemoteRepository(
        "maven-central",
        "default",
        "http://repo1.maven.org/maven2/"
      )
    );
    Collection<Artifact> deps = new Aether(remotes, local).resolve(
      new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
      "runtime"
    );
  }
}

More examples you can find in AetherTest.

Classpath can help you to collect and filter dependencies in a Maven project.

The only dependency you need (you can also download jcabi-aether-0.8.jar and add it to the classpath):

<dependency>
  <groupId>com.jcabi</groupId>
  <artifactId>jcabi-aether</artifactId>
  <version>0.8</version>
</dependency>

Cutting Edge Version

If you want to use current version of the product, you can do it with this configuration in your pom.xml:

<repositories>
  <repository>
    <id>oss.sonatype.org</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
  </repository>
</repositories>
<dependencies>
  <dependency>
    <groupId>com.jcabi</groupId>
    <artifactId>jcabi-aether</artifactId>
    <version>1.0-SNAPSHOT</version>
  </dependency>
</dependencies>

Copyright © 2012-2013 jcabi.com, All Rights Reserved. Privacy Policy.

site is built by Apache Maven