【问题标题】:How to find maven dependencies of any given project?如何找到任何给定项目的 Maven 依赖项?
【发布时间】:2015-03-29 11:57:07
【问题描述】:

我正在尝试构建一个单独的项目,该项目可以找到任何给定项目的 Maven 依赖项。我指的是 Aether 示例,但我找不到定义另一个项目以查找依赖项的方法。

如下图1所示,项目1有项目2的依赖项,项目2有项目3的依赖项。如果我在依赖项查找器中选择项目1,它应该显示项目1的所有依赖项,即项目2 .

我指的是以下 Aether 代码段,但我无法找到设置另一个项目的方法(通过设置 pom 文件或项目目录)

    RepositorySystem system = Booter.newRepositorySystem();

    RepositorySystemSession session = Booter.newRepositorySystemSession( system );

    Artifact artifact = new DefaultArtifact( "org.eclipse.aether:aether-impl:1.0.0.v20140518" );

    ArtifactDescriptorRequest descriptorRequest = new ArtifactDescriptorRequest();
    descriptorRequest.setArtifact( artifact );
    descriptorRequest.setRepositories( Booter.newRepositories( system, session ) );

    ArtifactDescriptorResult descriptorResult = system.readArtifactDescriptor( session, descriptorRequest );

    for ( Dependency dependency : descriptorResult.getDependencies() )
    {
        System.out.println( dependency );
    }

【问题讨论】:

  • mvn dependency:tree 通常对我有用。
  • 它尝试通过下载可能会失败的依赖项来构建 maven 项目。我只是想知道根据POM结构的依赖列表,没有构建。
  • mvn dependency:tree 不会构建项目,而只是尝试下载本地存储库中尚不存在的所有依赖项的 POM 文件。如果你从某处下载project A,而这又依赖于project Bproject C(两者都在远程存储库中),Maven只有在下载了@的POM后才能确定project A的完整依赖树987654329@ 和project C。这就是下载 POM 的原因。
  • 你在做 maven 多模块项目吗?
  • 是的,它是一个包含许多父 pom 的多模块项目

标签: java maven aether


【解决方案1】:

您无需以编程方式执行此操作。你可以简单地调用dependency:tree:

mvn dependency:tree

我还建议您使用 -Dverbose 调用它,以防您真的很难弄清楚为什么选择某个版本的依赖项而不是另一个版本(您可能期望它会使用它)而是)。

或者,如果您想以平面形式查看依赖项,也可以使用dependency:list

mvn dependency:list

【讨论】:

  • 请纠正拼写错误,mvn depenency:list - 错误,mvn dependency:list - 对
【解决方案2】:

如果您使用带有 maven2 插件的 eclipse,那么当您打开 pom 文件时,它会显示几个视图以根据您的要求查看依赖关系。

【讨论】:

  • 实际上我想以编程方式获取这些以进行过滤。我什至尝试通过解析 XML 来访问值,但是在父 pom 中定义版本时确实存在问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多