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" 范围。
但我怀疑这不会有任何改变。
根据 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" 范围。
但我怀疑这不会有任何改变。