Maven依赖解析(冲突)

2024-03-30

假设我有四个项目:

  • 项目A(依赖于B和D)
  • 项目 B(依赖于 D)
  • 项目 C(依赖于 D)
  • 项目D

在这种情况下,如果我运行项目 A,Maven 将正确解析对 D 的依赖关系。如果我理解正确,Maven 总是采用最短路径的依赖关系。由于 D 是 A 的直接依赖项,因此将使用 B 中指定的 D。

但现在假设这个结构:

  • 项目 A(依赖于 B 和 C)
  • 项目 B(依赖于 D)
  • 项目 C(依赖于 D)
  • 项目D

在这种情况下,解析 D 的路径具有相同的深度。发生的情况是 Maven 会发生冲突。我知道可以告诉 Maven 他应该排除依赖项。但我的问题是如何解决此类问题。我的意思是,在现实世界的应用程序中,您有很多依赖项,也可能有很多冲突。

最佳实践解决方案真的是排除某些东西还是有其他可能的解决方案?当我突然收到 ClassNotFound Exception 时,我发现很难处理,因为某些版本已更改,这导致 Maven 采用不同的依赖项。当然,了解这个事实可以更容易地猜测问题是依赖冲突。

我正在使用 Maven 2.1-SNAPSHOT。


解决此类情况的 Maven 方法是包含<dependencyManagement>项目根 pom 中的部分,您可以在其中指定将使用哪个库的版本。

EDIT:

<dependencyManagement>
  <dependencies>
    <dependency>
        <groupId>foo</groupId>
        <artifactId>bar</artifactId>
        <version>1.2.3</version>
    </dependency>
   </dependencies>
</dependencyManagement>

现在,无论依赖项请求哪个版本的库 foo:bar,该项目和所有子项目都将始终使用版本 1.2.3。

参考:

  • 依赖管理 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven依赖解析(冲突) 的相关文章

随机推荐