什么是传递性 Maven 依赖项?
What is a transitive Maven dependency?
这个问题是为了澄清传递依赖到底是什么,以及它在 Maven 中如何在非常高的层次上工作。
我的定义:在像A --> B --> C这样的依赖树中,C是A的传递依赖.假设 B 的范围 compile 在 A.
内
如果 C 在 B 中具有范围 compile,则声明 B 作为 A 的依赖足以用 Maven 构建 A。但是,如果 C 在 B 中具有范围 provided 那么,当 Maven 构建 A,除非A声明[=18],否则构建不会针对C自动编译A =]C 在其依赖项中。
这是正确的吗?
你的假设是正确的。
有两种类型的 Maven 依赖项:
Direct: 这些是在 <dependencies/>
部分下的 pom.xml
文件中定义的依赖项。
传递:这些依赖是你的直接依赖的依赖。
具有 provided
范围的依赖项意味着:
- 要么从最终工件中排除(例如,对于
war
文件,您不想包含 servlet-api
、servlet-jsp
等)
- 或覆盖——继承这些的项目定义一个版本and/or覆盖范围
声明项目时应包含的依赖项
本身就是一个依赖
例如,如果我们在 <dependencies>
标签下的 pom.xml
中添加 JUnit
作为依赖项。它会下载另一个 hamcrest-core-1.3.jar
文件,它在 Maven Dependencies 下,这个 .jar
文件可以调用 Transitive dependency
.
这个问题是为了澄清传递依赖到底是什么,以及它在 Maven 中如何在非常高的层次上工作。
我的定义:在像A --> B --> C这样的依赖树中,C是A的传递依赖.假设 B 的范围 compile 在 A.
内如果 C 在 B 中具有范围 compile,则声明 B 作为 A 的依赖足以用 Maven 构建 A。但是,如果 C 在 B 中具有范围 provided 那么,当 Maven 构建 A,除非A声明[=18],否则构建不会针对C自动编译A =]C 在其依赖项中。
这是正确的吗?
你的假设是正确的。
有两种类型的 Maven 依赖项:
Direct: 这些是在
<dependencies/>
部分下的pom.xml
文件中定义的依赖项。传递:这些依赖是你的直接依赖的依赖。
具有 provided
范围的依赖项意味着:
- 要么从最终工件中排除(例如,对于
war
文件,您不想包含servlet-api
、servlet-jsp
等) - 或覆盖——继承这些的项目定义一个版本and/or覆盖范围
声明项目时应包含的依赖项 本身就是一个依赖
例如,如果我们在 <dependencies>
标签下的 pom.xml
中添加 JUnit
作为依赖项。它会下载另一个 hamcrest-core-1.3.jar
文件,它在 Maven Dependencies 下,这个 .jar
文件可以调用 Transitive dependency
.