2012-07-26 27 views
4

如果我有Maven Artifact信息(GroupId,ArtifactId,Version)我如何以编程方式(使用Java)从我的本地存储库中检索该Artifact?使用Maven Java API从存储库中检索Maven Artifact

具体来说,我需要能够连接到Maven仓库并创建/检索org.apache.maven.artifact.Artifact,以便我可以检索与该工件关联的文件。

我已经查看了m2e源代码,但MavenImpl.java(它提供了工件解析)比我需要的方式更复杂,并且很难理解与存储库的连接是如何工作的。

回答

7

你可能会想看看Aether。示例请参阅Wiki

+0

谢谢!这正是我需要的! – davdic 2012-07-26 20:42:30

0

您可以构建从给定信息的URL和下载文件(注意,更换'.'<groupId>'/'):

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

这是我们如何做到在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 
); 

给它一个远程仓库的列表,一个本地仓库的位置和工件的Maven坐标。如名称所示,图书馆使用Sonatype的Apache Aether

+1

嗨!我尝试在maven项目之外使用jcabi-aether,如下所示:http://aether.jcabi.com/index.html,但我总是得到一个编译异常:错误:(22,25)java:无法访问org。 apache.maven.project.MavenProject 未找到org.apache.maven.project.MavenProject的类文件。如果我包含maven-core,我会遇到其他异常。为什么?这个项目是否仍然维持? – 2016-04-07 14:19:40