什么是传递性 Maven 依赖项?

What is a transitive Maven dependency?

这个问题是为了澄清传递依赖到底是什么,以及它在 Maven 中如何在非常高的层次上工作。

我的定义:在像A --> B --> C这样的依赖树中,C是A的传递依赖.假设 B 的范围 compileA.

如果 CB 中具有范围 compile,则声明 B 作为 A 的依赖足以用 Maven 构建 A。但是,如果 CB 中具有范围 provided 那么,当 Maven 构建 A,除非A声明[=18],否则构建不会针对C自动编译A =]C 在其依赖项中。

这是正确的吗?

你的假设是正确的。

有两种类型的 Maven 依赖项:

  • Direct: 这些是在 <dependencies/> 部分下的 pom.xml 文件中定义的依赖项。

  • 传递:这些依赖是你的直接依赖的依赖。

具有 provided 范围的依赖项意味着:

  • 要么从最终工件中排除(例如,对于 war 文件,您不想包含 servlet-apiservlet-jsp 等)
  • 或覆盖——继承这些的项目定义一个版本and/or覆盖范围

声明项目时应包含的依赖项 本身就是一个依赖

例如,如果我们在 <dependencies> 标签下的 pom.xml 中添加 JUnit 作为依赖项。它会下载另一个 hamcrest-core-1.3.jar 文件,它在 Maven Dependencies 下,这个 .jar 文件可以调用 Transitive dependency.

资源:- https://youtu.be/ypVE8EgDzzI