Maven 依赖树/层次结构未显示真相

问题描述 投票:0回答:1

我打算将现有的多个单个 java 项目的旧 Ant 项目迁移到多模块 Maven 项目。所有库都存储在一个本地文件夹中。 为了构建依赖项管理,我想将所有依赖项添加到父 pom.xml(依赖项管理部分),并尽最大努力将正确的依赖项添加到子项(Java Maven 项目),直到编译工作。

然后我想通过使用“mvn dependency:tree -X”来简化 pom.xmls,看看我是否向单个 Maven 项目添加了一些传递依赖项,而这些依赖项不需要显式添加到 pom.xmls

现在,当比较 Eclipse 中显示的 Maven 项目的依赖关系层次结构与使用“mvn dependency:tree -X”显示的依赖关系层次结构时,存在一些差异:

Maven 不会显示“jetty-http”实际上是 jetty-server 的传递依赖项 - 主要是因为我之前已经将其添加为 pom.xml 中的直接依赖项。 虽然 Eclipse 确实显示了这种关系,并且这是正确的结果(还使用 Maven 中央依赖项列表手动检查)。

所以最后当使用 Maven 时,我会在我的 pom.xml 中留下“jetty-http”作为直接依赖项,尽管我没有必要这样做。这有点没用。

有谁知道为什么 Maven 依赖关系树如此有限?我想了解这里发生了什么。有没有使用 Maven 命令的替代方案? 或者是否有更好的方法来检查/识别错误添加到 pom.xml 的传递依赖项?

java maven m2eclipse transitive-dependency
1个回答
2
投票

最佳实践是将所有依赖项添加到直接在源代码(以及运行时)中使用的 POM。

因此,如果 X 在您的源代码中使用,但已经作为 Y 的传递依赖项存在,您仍然应该添加 X 作为直接依赖项。

您可以使用

mvn dependency:analyze

进行检查

https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html

© www.soinside.com 2019 - 2024. All rights reserved.