我正在处理一个包含许多 pom.xml 文件的大型项目,我需要指定我使用的所有库。这意味着我需要递归读取 pom.xml 文件并获取 groupId、artifactId、范围和版本。我检查了 mvn dependency:tree 但我找不到以可读格式将其打印到文件的方法。我看到了 appendOutput,但没有看到如何在 cmd 中使用它的示例。我看到了一些在 Linux 中完成的解决方案,但我只能访问 Windows XP。
7 回答
这可以(至少现在)通过依赖项的命令行选项来完成:树插件。
尝试:
mvn dependency:tree -Doutput=/path/to/file
参考:Maven 依赖插件页面
您只询问了“可读”格式,但您也可以使用各种选项传递 -DoutputType 参数。另请注意,我安装的版本,我收到以下警告:
[WARNING] The parameter output is deprecated. Use outputFile instead.
因此,请考虑使用 -DoutputFile=/path/to/file
此外,我无法让 -DoutputType 参数为我提供除默认文本以外的任何内容,但没有机会使用它。YMMV。
如果您在同一个 repo/project 下有多个模块,并且希望将所有模块的依赖关系放在一个文件中,以便能够区分 b/w 一个构建和另一个构建,以查看某处是否发生了变化,您可以这样做
$project_dir> mvn dependency:tree -DoutputFile=<absolute_path_to_file> -DappendOutput=true
例如
$project_dir> mvn dependency:tree -DoutputFile=`pwd`/mvn_dependency_tree.txt -DappendOutput=true
在https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html查看其他可用选项
添加
<plugin>
<groupId>org.apache.servicemix.tooling</groupId>
<artifactId>depends-maven-plugin</artifactId>
</plugin>
插件生成一个classes/META-INF/maven/dependencies.properties
项目依赖项易于解析的文件。
产生的输出示例:
# Project dependencies generated by the Apache ServiceMix Maven Plugin
# Generated at: Mon Oct 10 17:43:00 CEST 2011
groupId = my.group.name
artifactId = my.artifact.name
version = 0.0.1-SNAPSHOT
my.group.name/my.artifact.name/version = 0.0.1-SNAPSHOT
# dependencies
junit/junit/version = 4.8
junit/junit/type = jar
junit/junit/scope = test
org.easymock/easymock/version = 2.4
org.easymock/easymock/type = jar
org.easymock/easymock/scope = test
在 GNU/Linux 上,我只会做mvn dependency:tree > myFile
. 但是,如果您仅限于 Windows,那么我会寻找 Windows 的语法来流式传输命令的输出。
根据这个网站(只是谷歌的顶级结果),Windows 的控制台似乎也使用>
符号将输出流定向到文件。那你介意试试这个吗?
我已经运行了以下命令并获得了具有所有 maven 依赖项的文件。
mvn dependency:tree -DoutputFile=temp/mvn_dependency_tree.txt
此命令将创建一个名为“temp”的文件夹,并在此文件夹内创建一个包含所有依赖项的文件名 mvn_dependency_tree.txt。
您始终可以安装MinGW 和 MSYSdependency:tree
,然后在 Windows 中使用 Linux 示例
或许有效的 pom(结合一些用于保存文件的 linux 命令)足以满足您的需求。