【问题标题】:Get all the dependencies of a MavenProject (including transitive ones) using Aether使用 Aether 获取 MavenProject 的所有依赖项(包括传递的依赖项)
【发布时间】:2013-05-10 10:33:54
【问题描述】:

如何使用 Aether 获取 MavenProject 的所有依赖项(包括传递的依赖项)?

我见过很多例子,你指定gav 并解析工件及其所有依赖项。这一切都很好。但是,如果您的插件应该从您试图解决其依赖项的同一个项目中调用,这似乎不起作用(或者也许我做错了)。有人可以给我一个可行的例子吗?

我已经尝试了this SO post 中显示的 jcabi-aether 示例。

【问题讨论】:

    标签: java maven maven-3 aether


    【解决方案1】:

    尝试使用来自jcabi-aether 的实用程序类Classpath

    Collection<File> jars = new Classpath(
      this.getProject(),
      new File(this.session.getLocalRepository().getBasedir()),
      "test" // the scope you're interested in
    );
    

    您将获得插件所在的当前 Maven 项目中“测试”范围内的 JAR 和目录列表。

    如果您有兴趣获取Artifacts 的列表而不是Files,请直接使用Aether 类:

    Aether aether = new Aether(this.getProject(), repo);
    Set<Artifact> artifacts = new HashSet<Artifact>();
    for (Artifact dep : this.getProject().getDependencyArtifacts()) {
      artifacts.addAll(aether.resolve(dep, JavaScopes.COMPILE));
    }
    

    【讨论】:

    • 我正在查看您的项目。两件事:1)您的 sources 工件似乎没有正确打包(我看到您是通过程序集插件打包它,但是它为工件生成的目录结构使得 IDE 无法识别源代码) re 不在根目录中,而是 -- 在 ${project.artifactId}/src/main/java); 2)这是一个很好的例子,我会进一步研究它。您能否告诉我如何获得Artifact-s 而不是直接使用File-s?谢谢!
    • 如果您将第一个问题提交为an issue to github,那就太好了,我会尽快解决。对于第二个问题,请参阅我的答案,已更新
    • 谢谢!我已接受您的回答并授予您赏金。一个小小的说明:上面粘贴的代码无法编译,它需要File 对象,而不是String。否则,它概述了使用您的库做事的正确方法。也许你可以在你的例子中完善它,以便将来有人不会怀疑。
    • 谢谢,我已经解决了
    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2023-03-18
    • 2012-06-11
    相关资源
    最近更新 更多