Retrieving Maven Artifact from Repository using Maven Java API

8k Views Asked by At

If I have a Maven Artifact information (GroupId, ArtifactId, Version) how can I programmatically (using Java) retrieve that Artifact from my local repository?

Specifically, I need to be able to connect to the Maven Repository and create/retrieve a org.apache.maven.artifact.Artifact so I can retrieve the file associated with the Artifact.

I have looked into m2e source code, but the MavenImpl.java (which provides Artifact resolution) is way more complex than what I need and it is difficult to understand how the connection to the repository works.

3

There are 3 best solutions below

1
On BEST ANSWER

You'll probably want to look at Aether. See the Wiki for examples.

1
On

This is how we do it in jcabi-aether:

final File repo = this.session.getLocalRepository().getBasedir();
final Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
  new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
  JavaScopes.RUNTIME
);

Give it a list of remote repositories, a location of a local repo, and Maven coordinates of the artifact. As the name shows, the library uses Apache Aether from Sonatype.

0
On

You can construct a URL from the given information and download the file (note, replace the '.' in the <groupId> with '/'):

<repositoryUrl>/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<type>