java - 如何获取 Maven 依赖项列表以及从中获取它们的存储库

标签 java maven

我想,给定一个 pom.xml 文件,扩展传递依赖关系,并且对于每个直接和传递依赖关系,列出 maven 从哪些存储库中获取它。

随着 maven-dependency-plugin我能行

mvn dependency:tree获取传递依赖树,但不包含存储库信息

mvn dependency:list-repositories获取使用的存储库列表,但不包含依赖信息

mvn dependency:get -Dartifact=<...>获取单个 Artifact 和传递依赖项,但它似乎获取的比需要的多得多,我不知道我真正关心的是什么。

最佳答案

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

考虑依赖于已发布 Artifact 。一旦将它们下载到您的本地存储库,Maven 就不会再次下载它们(除非您删除它们);该 Artifact 的所有 future 解决方案都将通过本地存储库完成。

当然,本地存储库的 Artifact 目录中的文件 _remote.repositories 将包含从中下载它的存储库的符号名称,其实际 URL 可能会也可能不会随着时间的推移相同。

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

Snapshot 依赖项是另一回事,但您不应该依赖它们太久,因为您不想基于将来可能发生变化的依赖项来发布您的东西。通常,您可以控制快照依赖项的来源,因此找出您的依赖项来源的整点变得徒劳。

但有时,传递依赖项将包含 POM,这些 POM 指定额外的存储库供 Maven 从中获取子依赖项。有时这些存储库会退役或停产,从而打破依赖链。在这种情况下,您可能希望在 settings.xml 中阻止或重新路由它们。对本地存储库中的所有 POM 进行简单扫描通常足以将它们嗅出:

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

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

关于java - 如何获取 Maven 依赖项列表以及从中获取它们的存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394131/

相关文章:

java - 将值写入文本文件,读取它并在db中显示

java - Android-无法使用 woocommerce api 创建订单

java - 如何使用 Fedora 替代品设置 Maven 的 Jdk 版本

使用 Jasmine 和 Maven 2.x 进行 JavaScript 单元测试

java - 将动态数据存储到标签

java - 如何修复 Java 中的 Kafka 错误 "IOException caught when establishing connection to https://stream.twitter.com"?

java - 重写@ConfigurationProperties

java - java maven 项目中的 stanford NLP API 错误

java - mvn jetty 插件无法在离线(非互联网)模式下工作,但编译成功

java - 我如何使用 Maven 将同级模块中的类包含在 jar 中?