如何获取maven依赖项列表以及从中获取的存储库

时间:2016-08-18 20:53:35

标签: java maven

我希望,在给定pom.xml文件的情况下,扩展传递依赖关系,并为每个直接和传递依赖关系列出maven从哪个存储库获取它。

使用B我可以做

git reset --hard HEAD~1获取传递依赖关系树,但不包含存储库信息

B获取已使用的存储库列表,但不包含依赖项信息

maven-dependency-plugin获取单个工件和传递依赖项,但它似乎比需要的更多,我无法分辨我真正关心的是什么。

1 个答案:

答案 0 :(得分:2)

我不认为有一个插件可以做到这一点。我认为其原因是没有人真正对这种信息感兴趣。

考虑依赖已发布工件。一旦将它们下载到您的本地仓库,Maven就不会再费心下载它们了(除非您删除它们);所有未来对该工件的解决方案都将通过本地仓库来完成。

当然,本地repo工件目录中的文件_remote.repositories将包含从中下载的repo的符号名称,其实际URL可能是也可能不是随着时间的推移。

这样的哲学是Maven坐标是全局的。例如,(例如)commons-codec:commons-codec:1.10的给定版本必须相同,无论它来自何处。否则,如果某些版本根据它们的来源而有所不同,那么一切都会崩溃。因此,没有人关心依赖来自哪里。

快照依赖关系是一个不同的故事,但你不应该长时间依赖它们,因为你不想根据可能在未来发生变化的依赖关系发布你的东西。通常,您可以控制快照依赖项的来源,因此找出您的依赖项所在的的重点变得徒劳无功。

有时候,传递依赖项将包含POM,它为Maven指定额外的存储库以从中获取子依赖项。有时这些存储库被解除或中断,打破了依赖链。在这种情况下,您可能希望在settings.xml中阻止或重新路由它们。通过本地仓库中的所有POM进行简单扫描通常足以嗅出它们:

# Linux/Unix
%> find <your local repo> -name '*.pom' | xargs grep -c '<repositories>' | grep -v ':0'

这与mvn dependency:tree一起应该足以确定传递依赖是否依赖于行为不当的存储库。