Maven 中提供的和运行时的传递范围

Transitive scope in maven for provided and runtime

根据 maven resolution of transitive scope ,

如果 A 是我们的项目,它直接依赖于 X,其范围是相对于 A 提供的。

Maven 告诉 X 与范围运行时的任何依赖关系(直接或传递)将被解析为范围 provided w.r.t A.

设 Y 是 X 的直接依赖项,范围为 runtime w.r.t 到 X。

A --> X(scope = provided) --> Y(scope = runtime)

现在,Y 将 provided scope w.r.t 解析为 A.

观察: Y 在 A 的 runtime classpath 中永远不需要。只有在 A 的 test classpath 中才需要。事实上,如果你将 Y 作为 X 的传递依赖,仅将其范围保持为运行时,但它永远不会在 A 的 runtime classpath 中使用。它将仅在 test classpath.

中使用

问题:所以,我们是不是应该说-

如果 A 是我们的项目,它直接依赖于 X,其范围是相对于 A 提供的,那么 X 与范围运行时的任何依赖(直接或传递)都将解析为范围 test w.r.t一个?

可以肯定地说,这些依赖项可以更好地转换为 "test" 范围。

但我怀疑这不会有任何改变。