mvn dependency:tree并不能完全展示所有依赖关系。

20
我遇到了一个问题,需要编译一个带有许多依赖项的jar包,尤其是 snakeyaml 的重叠版本(我们需要1.11,某个依赖项引入了1.9)。我们运行了 mvn dependency:tree,但是我们在任何输出中都没有看到冲突的辅助版本。经过进一步检查,发现是 jruby-complete 引入了 snakeyaml。为什么 mvn dependency:tree 没有显示这个级别的详细信息呢?
[INFO] |     |  +- org.apache.hbase:hbase-it:jar:0.98.6-cdh5.2.5:compile
[INFO] |     |  |  +- (org.apache.hbase:hbase-common:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  +- (org.apache.hbase:hbase-protocol:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  +- (org.apache.hbase:hbase-client:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  +- org.apache.hbase:hbase-shell:jar:0.98.6-cdh5.2.5:compile
[INFO] |     |  |  |  +- (org.apache.hbase:hbase-common:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  |  +- (org.apache.hbase:hbase-protocol:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  |  +- (org.apache.hbase:hbase-client:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  |  +- (org.apache.hbase:hbase-prefix-tree:jar:0.98.6-cdh5.2.5:runtime - omitted for duplicate)
[INFO] |     |  |  |  +- (org.apache.hbase:hbase-server:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  |  +- (org.apache.hbase:hbase-hadoop-compat:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  |  +- (org.apache.hbase:hbase-hadoop2-compat:jar:0.98.6-cdh5.2.5:compile - omitted for duplicate)
[INFO] |     |  |  |  +- (com.yammer.metrics:metrics-core:jar:2.2.0:compile - omitted for duplicate)
[INFO] |     |  |  |  +- (commons-logging:commons-logging:jar:1.1.1:compile - omitted for conflict with 1.2)
[INFO] |     |  |  |  +- org.jruby:jruby-complete:jar:1.6.8:compile
                              >>>>>>> WHY ARE THERE NO DEPENDENCIES HERE? >>>>>>>>>
[INFO] |     |  |  |  +- (org.cloudera.htrace:htrace-core:jar:2.04:compile - omitted for duplicate)
[INFO] |     |  |  |  +- (org.apache.hadoop:hadoop-common:jar:2.5.0-cdh5.2.5:compile - omitted for duplicate)

为什么jruby-complete的依赖项没有在树形结构中列出? mvn dependency:tree 只能到一定深度吗? 这里有什么规则?如果 mvn dependency:tree 仅显示了它的 snakeyaml 依赖项,我们可以节省几个小时进行复杂的调试。

6
这不是重复的。使用详细标志也没有显示依赖项的较低版本。 - David Williams
1个回答

16

我相信这个论坛主题可以回答你的问题。依赖树mojo如果高层级中已经存在此依赖项,则修剪较低级别的依赖项。这意味着所有jruby-complete的依赖关系(如果有)在树的较浅深度处列出。您可以使用详细标志 (-Dverbose)来显示省略的依赖项。


那么在这种情况下,这意味着依赖项的版本不会被考虑在去重中。你也是这样理解的吗? - David Williams
那很可能是这样。很难说使用了哪个依赖项,因为您可以在树的同一深度上拥有相同的依赖项,在那个点上我无法确定将使用哪个。我一直依赖于Maven的M2E可视化依赖关系,因为它会显示整个树和省略部分。您可以将所有隐式依赖项作为列表查看,单击其中任何一个,它将向您显示所有依赖于它的依赖项以及省略部分。对我来说非常有效。 - Samuel
那么如何查看已使用的依赖项,我是指最终将在fat jar中的依赖项? - K2mil J33
似乎-Dverbose-DoutputType=dot不能同时使用。Maven啊,我只想要一个依赖关系的图形化表示... - mihca
3
自从maven-dependency-plugin 3.0版本以后,不再支持冗长模式。 - Xdg
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接