Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取maven依赖项列表以及从中获取它们的存储库_Java_Maven - Fatal编程技术网

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

Java 如何获取maven依赖项列表以及从中获取它们的存储库,java,maven,Java,Maven,我想,给定一个pom.xml文件,展开可传递依赖项,并为每个直接依赖项和可传递依赖项列出maven从哪个存储库获取它 使用maven依赖插件 mvn dependency:tree以获取可传递的依赖关系树,但不包括存储库信息 mvn依赖项:列出存储库以获取使用的存储库列表,但不包括依赖项信息 mvn依赖项:get-Dartifact=来获取单个工件和可传递的依赖项,但它似乎获取的远远超出了需要,我不知道我真正关心的是哪一个。我认为没有一个插件可以做到这一点。我认为原因是没有人对这种信息感兴趣 考

我想,给定一个pom.xml文件,展开可传递依赖项,并为每个直接依赖项和可传递依赖项列出maven从哪个存储库获取它

使用
maven依赖插件

mvn dependency:tree
以获取可传递的依赖关系树,但不包括存储库信息

mvn依赖项:列出存储库
以获取使用的存储库列表,但不包括依赖项信息


mvn依赖项:get-Dartifact=
来获取单个工件和可传递的依赖项,但它似乎获取的远远超出了需要,我不知道我真正关心的是哪一个。

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

考虑对发布的工件具有依赖关系。一旦它们被下载到您的本地回购协议,Maven就不会再下载它们(除非您删除它们);该工件的所有未来解决方案将通过本地回购协议完成

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

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

快照依赖关系是另一种情况,但是您不应该依赖它们太久,因为您不希望基于将来可能发生变化的依赖关系发布您的内容。通常,您可以控制快照依赖项的来源,因此,找出依赖项来源的整个过程都是徒劳的

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

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

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

您希望解决什么样的问题?我正在尝试将我们的代码库迁移到使用Bazel,它不支持可传递依赖项解析。我想使用maven来解析依赖关系,使用输出来生成用于下载的Bazel规则和依赖关系,并让Bazel完成下载工作。感谢您的详细回答。对于我的用例,我确实至少需要完整的依赖关系树(参见我对这个问题的评论)。如果dep已经是my pom.xml中的直接依赖项,那么看起来
mvn dependency:tree
不会报告可传递依赖项。有没有办法强迫它枚举完整的树?