【发布时间】:2011-11-02 18:35:38
【问题描述】:
假设我有四个项目:
- 项目 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。
【问题讨论】:
-
我认为你不应该使用 DEV 版本的 2.1-SNAPSHOT 版本。 Maven 2 在最终版本 2.2.1 中可用。
-
顺便说一句,Maven 3.x 已经稳定了一段时间,比 maven 2.x 更快更可靠
-
钻石是程序员最大的敌人...
-
@Sean Patrick Floyd 所有 maven 版本都比 SNAPSHOT 更稳定 :)