我对 maven 如何处理传递依赖关系以及它如何写入类路径感到非常困惑。
假设我有两条 E 路径(A、B、C、D、E 是 ejb):
1. A<---B<---E(E 依赖(comile)在 B 上,它依赖于 A)
2。 A<---C<---D<---E(所有依赖都是编译依赖)
问题是:E 是如何构建的,哪些工件在 E 的类路径(META-INF)中。
非常感谢!
我对 maven 如何处理传递依赖关系以及它如何写入类路径感到非常困惑。
假设我有两条 E 路径(A、B、C、D、E 是 ejb):
1. A<---B<---E(E 依赖(comile)在 B 上,它依赖于 A)
2。 A<---C<---D<---E(所有依赖都是编译依赖)
问题是:E 是如何构建的,哪些工件在 E 的类路径(META-INF)中。
非常感谢!
E
Maven 将使用“最近的定义”来确定在您的构建中使用哪个版本的依赖项。来自官方 Maven 文档:
“最近的定义”意味着使用的版本将是依赖关系树中最接近您的项目的版本,例如。如果 A、B 和 C 的依赖项定义为 A -> B -> C -> D 2.0 和 A -> E -> D 1.0,则构建 A 时将使用 D 1.0,因为从 A 到 D 的路径通过E 更短。您可以在 A 中显式添加对 D 2.0 的依赖项以强制使用 D 2.0
在您的示例中:
1. A <--- B <--- E 1.0
2. A <--- C <--- D <--- E 2.0
1.0
将使用依赖的版本E
,因为在构建时A
路径比这个版本更短。