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/39027312/

相关文章:

java - 我正在使用 insertSort 方法,但出于某种原因,当输出我的数组时,其中一个插入会覆盖数组中的另一个输入

java - 无法连接到 wss [更新]

java - 如何为 Maven 站点生成 Google 站点地图?

java - 如何从 Eclipse 将 Maven 项目的 WAR 部署到 JBoss 服务器?

java - 将所有项目依赖项部署到远程存储库

java - 删除分离的实例

Java:在不执行复制操作的情况下偏移字节[]

java - Centos7 上 JVM 崩溃

java - 使用 Maven 执行 Cucumber 测试

java - Maven - 包不存在