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