【问题标题】:Retrieving Maven Artifact from Repository using Maven Java API使用 Maven Java API 从存储库中检索 Maven 工件
【发布时间】:2012-07-26 17:14:42
【问题描述】:

如果我有一个 Maven 工件信息(GroupId、ArtifactId、版本),我如何以编程方式(使用 Java)从我的本地存储库中检索该工件?

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

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

【问题讨论】:

    标签: java api maven maven-plugin aether


    【解决方案1】:

    您可能想查看Aether。有关示例,请参见 Wiki

    【讨论】:

    【解决方案2】:

    您可以根据给定的信息构造一个 URL 并下载文件(注意,将<groupId> 中的'.' 替换为'/'):

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

    【讨论】:

      【解决方案3】:

      这就是我们在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

      【讨论】:

      • 嗨!我尝试在 maven 项目之外使用 jcabi-aether,如下所示:aether.jcabi.com/index.html,但我总是遇到编译异常:错误:(22、25)java:无法访问 org.apache.maven.project.MavenProject 类文件org.apache.maven.project.MavenProject 未找到。如果我包含 maven-core,我会遇到其他异常。为什么?这个项目还在维护吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2018-07-10
      • 2012-10-20
      • 1970-01-01
      • 2019-08-12
      • 2016-05-22
      相关资源
      最近更新 更多