我有一个大型多模块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获得我需要的东西,使用依赖插件或其他一些我不知道的报告插件。
答案 0 :(得分:2)
您可以创建一个具有pom打包(即空)的附加模块(或外部maven项目),并将您感兴趣的所有模块/项目作为依赖项。 然后,在其上运行站点生命周期(即,只是mvn站点)。作为target \ site下生成的站点的一部分,您将拥有:
或者,您也可以使用此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