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

时间:2015-11-29 21:22:03

标签: java maven maven-3 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

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

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

我当然可以将maven控制台输出重定向到文件(mvn [options] > output.txt)并尝试在vi中进行一些聪明的重复操作,将其过滤到我想要的列表。但是,我希望有一种方法可以使用Maven获得我需要的东西,使用依赖插件或其他一些我不知道的报告插件。

2 个答案:

答案 0 :(得分:2)

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

  • 项目依赖项页面,为您提供直接依赖项(无用,它将是您键入的依赖项列表)和传递依赖项(您要查找的内容)全部合并到一个列表中与GAV,类型,许可证。此外,您还将拥有完全依赖:树合并。
  • 依赖关系收敛页面,提供有关相同传递依赖关系及其不同版本跨其他依赖关系(如果有)的收敛的非常有用的信息

或者,您也可以使用此ad-hoc模块/项目在其上运行其他插件,例如您提到的依赖项:列表。这次你将获得你正在寻找的完整合并列表,虽然没有按字母顺序排列,但仍然难以阅读/重复使用,因为它将成为构建输出的一部分。相反,站点报告更容易阅读和处理(即将依赖项表复制并粘贴到excel文件中)。

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

答案 1 :(得分:0)

我正在尝试类似的练习,但是找不到依赖插件的任何配置/目标,可以在这方面有所帮助。但是幸运的是,合并几个命令将使其很好地工作,以提供所有依赖项的所有唯一列表和排序列表。

mvn dependency:list | grep "\[INFO\][^:]*:[^:]*:[^:]*:[^:]*:.*" | cut -d] -f2- | uniq | sort

针对此问题,以下内容应适用。

mvn dependency:list -DexcludeGroupIds=org.example.projectx | grep "\[INFO\][^:]*:[^:]*:[^:]*:[^:]*:.*" | cut -d] -f2- | sort | uniq

来源:http://maven.40175.n5.nabble.com/list-all-unique-dependencies-of-multi-module-project-td5787840.html