gpt4 book ai didi

java - Maven 依赖解析(冲突)

转载 作者:IT老高 更新时间:2023-10-28 13:52:46 26 4
gpt4 key购买 nike

假设我有四个项目:

  • 项目 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 异常时,我发现很难处理,因为某些版本已更改,这导致 Maven 采用不同的依赖项。当然,知道了这个事实就更容易猜出问题是依赖冲突了。

我正在使用 maven 2.1-SNAPSHOT。

最佳答案

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

编辑:

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

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

引用:

关于java - Maven 依赖解析(冲突),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7175398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com