【问题标题】:How to find the parent of a Maven transitive dependency如何找到 Maven 传递依赖的父级
【发布时间】:2014-01-19 14:44:06
【问题描述】:

我正在使用 Maven 和 Eclipse 构建 Java(Web)应用程序。

当我查看我的 .war 文件时,我可以在那里看到以下日志库:

log4j-1.2.14.jar
log4j-1.2.17.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar

我没有在 pom.xml 中声明这些库,因此它们可能是传递依赖项(即我的依赖项的依赖项)。

如何找出我的哪些依赖项依赖于这些库?

我尝试使用mvn dependency:tree 插件,但它没有显示任何.jars。

在 Eclipse 中,Java Resources > Libraries > Maven Dependencies 节点也不显示它们。不过,奇怪的是,它显示了我项目的其他传递依赖项。

【问题讨论】:

  • 使用 eclipse,你应该尝试编辑 pom.xml 文件。有一个名为“依赖项”的特殊选项卡。从那里,您应该会看到您的父依赖项 + 您可以考虑选择要保留的依赖项版本。
  • @Olivier @Evgeniy Dependency Hierarchy 选项卡确实有一个依赖树。但是我的.jars 不在。
  • 发布您的 POM 文件。 Maven 似乎不太可能使用未出现在依赖关系树中的 jar 填充 war 文件
  • @Mark 我更新了问题。
  • 我下载了两个 pom 并进行了构建,在我的情况下,这些 jars 没有出现在 WEB-INF/lib 中。所以依赖只能来自 demo-lib。你可以尝试去 demo-web,运行 mvn dependency:tree 并在此处发布完整的依赖树并发布 demo-lib pom,也许某些插件正在复制 jars,有一个完全没有依赖关系的模块 demo-lib 很奇怪。

标签: eclipse spring maven spring-mvc log4j


【解决方案1】:

在 Eclipse 中打开 pom.xml 并转到 Dependency Hierarchy 选项卡

【讨论】:

  • Evgeniy,谢谢你的想法。 Dependency Hierarchy 选项卡确实有一个依赖树。但是我的.jars 不在。
  • 进入 Dependency Hierarchy 窗口右上角的过滤器并输入您的工件。在输入过程中,这将过滤掉其余部分并显示哪些工件在它们的树中。
  • @khmarbaise 过滤器返回空集。他们不在那里。
  • 你想在你的父项目中这样做吗?
  • 这个答案最接近正确的解决方案。我的传递依赖项没有显示在Dependency Hierarchy 选项卡上,可能是因为它们在依赖项的 POM 中被声明为 <optional>true</optional>。但是,双击依赖项会打开它自己的pom.xml,您可以在其中看到所有optional 依赖项。我仍然不明白为什么其中一些依赖项最终出现在我的 .war 中,但我可以将其作为另一个问题的主题。
【解决方案2】:

![在此处输入图片描述][1]

它应该在 Dependency Hierarchy 选项卡中显示依赖树。叶夫根尼·多罗费耶夫是对的。 类似于所附截图的东西

您可能必须全部展开。

编辑:完善了答案。 这有点奇怪。但这是我发现的。

如果你去http://mvnrepository.com/artifact/log4j/log4j/1.2.17

它将显示使用了哪些依赖项以及 jar 文件依赖于哪些。

web-mvc 3.2.4 的 springframework 依赖项会下载 spring-core,而 spring-core 依赖项使用 log4j。

【讨论】:

  • Hrishikesh,我相信他们不在这个依赖树中。
  • 我明白了,这很奇怪。通过 mvnrepository.com 找到了依赖下载的原因。更新了答案
  • Hrishikesh,谢谢。你的回答澄清了事情。我更新了我的问题。但是,我仍然想知道一种比网络搜索更简单的方法来构建我的依赖树:)
  • 我完全同意。我进行网络搜索的原因是因为你的 pom 相对较小,我想找出可能是什么原因。 :)
【解决方案3】:

如果你只想依赖maven,你可能想仔细看看依赖插件,这里有两个例子:

mvn dependency:tree -Dverbose 将显示更详细的信息 - 尤其是如果一个工件因与另一个工件版本冲突而被省略(例如收敛问题)。它还将向您显示具有所有传递依赖关系的层次结构。

要分析特定的人工制品(例如查找谁提供了特定的传递依赖项),您可以这样指定:

mvn dependency:tree -Dincludes=com.my.group.id:my-artefact-id:jar:1.0.1 -Dverbose

(你明显需要根据需要调整artifact、包装类型和版本)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2019-11-04
    • 2014-11-28
    • 2013-02-17
    相关资源
    最近更新 更多