问题
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.
回答1:
You'll probably want to look at Aether. See the Wiki for examples.
回答2:
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>
回答3:
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.
来源:https://stackoverflow.com/questions/11674537/retrieving-maven-artifact-from-repository-using-maven-java-api