什么是传递性 Maven 依赖项?
Posted
技术标签:
【中文标题】什么是传递性 Maven 依赖项?【英文标题】:What is a transitive Maven dependency? 【发布时间】:2017-06-03 05:00:39 【问题描述】:这个问题即将阐明传递依赖到底是什么,以及它在 Maven 中是如何在非常高的层次上工作的。
我的定义:在像A --> B --> C这样的依赖树中,C是A的传递依赖。假设 B 在 A 内具有 compile 范围。
如果C在B中有compile作用域,则声明B为A 足以用 Maven 构建 A。但是如果C在B内有provided作用域,那么,当Maven构建A时,构建不会自动编译A 针对 C 除非 A 在其依赖项中声明 C。
这对吗?
【问题讨论】:
“针对 C 编译 A”中的反对是什么意思?我是一个 mvn 初学者,我注意到这个例子正是我不知道的。我认为 A 对 C 是“在 A.someClass 使用一些import C.someClass
”。这是正确的吗?
@GabrielRado 我猜他的意思是如果 C 在 B 中具有 provided 范围,那么生成的工件将不包括 C。此语句 import C.someClass at A.someClass 将在编译时在类路径中包含 C 时起作用,但如果由于某种原因在运行时未提供,则不会出现 class def found 异常。
【参考方案1】:
你的假设是正确的。
Maven 依赖有两种类型:
直接:这些是在pom.xml
文件中<dependencies/>
部分下定义的依赖项。
传递性:这些是您的直接依赖项的依赖项。
provided
范围的依赖项旨在:
servlet-api
、servlet-jsp
等的 war
文件)
或覆盖 - 继承这些的项目定义版本和/或覆盖范围
【讨论】:
C不能解析怎么办?我怎么知道 B->C 所以我可以更改 B 的版本?我检查了父 pom 和有效 pom 它不存在。 如果工件的 POM 文件无法从远程存储库中解析,Maven 将在尝试构建依赖关系树时抛出错误。【参考方案2】:声明项目时应包含的依赖项 本身就是一个依赖
【讨论】:
以上是关于什么是传递性 Maven 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章