这个问题旨在澄清“传递依赖”到底是什么以及它如何在 Maven 中以非常高的级别工作。 我的定义:在像
A --> B --> C这样的依赖树中,C是A的传递依赖。假设 B 的范围 compile 在 A 内。 如果
C在 B 内具有 compile 范围,则将 B 声明为 A 的依赖项就足以使用 Maven 构建 A。但是,如果 C 在 B 内具有 provided 范围,那么当 Maven 构建 A 时,构建不会自动针对 C 编译 A,除非 A 在其依赖项中声明 C。 这是正确的吗?
Maven 依赖项有两种类型:
这些是在 pom.xml
文件的
<dependencies/>
部分下定义的依赖项。
这些依赖项是直接依赖项的依赖项。
provided
范围的依赖关系意味着:
要么从最终工件中排除(例如,对于
war
servlet-api
、servlet-jsp
等)或覆盖——继承这些的项目定义版本和/或覆盖范围