如何获取 Maven 项目的外部依赖项的聚合列表?

Jee*_*tra 5 java maven-3 maven maven-dependency-plugin

我有一个大型多模块 Maven 项目,它有大量的依赖项。我想生成一个完整的、经过重复过滤的第三方依赖项列表(即,所有不使用项目组 ID 的依赖项)。

我已尝试用于mvn dependency:list -DexcludeGroupIds=org.example.projectx此目的,但似乎无法将输出聚合到单个列表中。当我从项目根命令行运行该命令时,我得到如下输出:

[...]
[INFO] ------------------------------------------------------------------------
[INFO] Building ProjectX: ModuleA - Datatypes 4.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ projectx-moda-datatypes ---
[INFO] 
[INFO] The following files have been resolved:
[INFO]    org.slf4j:slf4j-api:jar:1.7.10:compile
[INFO]    org.hamcrest:hamcrest-core:jar:1.3:test
[INFO]    junit:junit:jar:4.12:test
[INFO]    com.google.guava:guava:jar:18.0:compile
[INFO] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building ProjectX: ModuleB - Binary 4.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ projectx-modb-binary ---
[INFO] 
[INFO] The following files have been resolved:
[INFO]    org.slf4j:slf4j-api:jar:1.7.10:compile
[INFO]    com.google.guava:guava:jar:18.0:compile
Run Code Online (Sandbox Code Playgroud)

..等等,对于每个子模块。这不仅不是单个列表(而是每个子模块的单独列表),而且正如您所看到的,它包含重复项。此外,我感兴趣的实际输出隐藏在其他 Maven 输出(下载消息等)的洪流中。

-DoutputFile=<file.txt>选项也不提供解决方案。从我的项目根运行的结果mvn dependency:list -DoutputFile=deps.txt不是列出所有依赖项的单个文件,而是多个单独的文件,每个子模块目录中都有一个文件。

我当然可以将 Maven 控制台输出重定向到一个文件 ( mvn [options] > output.txt),并在 vi 中尝试一些巧妙的正则表达式,将其过滤到我想要的列表。然而,我希望有一种方法可以仅使用 Maven 来获取我需要的东西,无论是使用依赖插件还是其他一些我不知道的报告插件。

A_D*_*teo 4

您可以创建一个具有 pom 打包(即空)的附加模块(或外部 Maven 项目),并将您感兴趣的所有模块/项目作为依赖项。然后,在其上运行站点生命周期(即,只是 mvn 站点)。作为 target\site 下生成的网站的一部分,您将拥有:

  • 项目依赖项页面,为您提供直接依赖项(没有帮助,它将是您键入的依赖项列表)和传递依赖项(您正在寻找的内容),所有这些都与 GAV、类型、许可证合并在一个列表中。此外,您还将拥有完整的 dependency:tree 合并。
  • 依赖项收敛页面,提供有关相同传递依赖项及其跨其他依赖项(如果有)的不同版本的收敛的真正有用的信息

或者,您也可以使用这个临时模块/项目在其上运行其他插件,例如您提到的 dependency:list 。这次您将获得您正在寻找的完整合并列表,尽管不是按字母顺序排列的,并且仍然难以阅读/重用,因为它将成为构建输出的一部分。相反,站点报告更容易阅读和处理(即将依赖关系表复制并粘贴到 Excel 文件中)。

作为参考,站点阶段将使用 Maven 项目信息报告插件。官方网站,在这里