什么';这是Gradle依赖解析的逻辑

什么';这是Gradle依赖解析的逻辑,gradle,dependency-management,gradle-dependencies,Gradle,Dependency Management,Gradle Dependencies,在Gradle 6.7中,我们有一个dependencyManagement.dependencies来设置项目的默认值 最近,有人用一个dependencySet替换了Spring的单个dependencySet dependencySet(group: 'org.springframework.boot', version: "2.2.11.RELEASE") { entry 'spring-boot-devtools' e

在Gradle 6.7中,我们有一个
dependencyManagement.dependencies
来设置项目的默认值

最近,有人用一个
dependencySet
替换了Spring的单个
dependencySet

dependencySet(group: 'org.springframework.boot', version: "2.2.11.RELEASE") {
            entry 'spring-boot-devtools'
            entry 'spring-boot-dependencies'
            entry 'spring-boot-devtools'
            entry 'spring-boot-starter-aop'
            entry 'spring-boot-starter-cache'
            entry 'spring-boot-starter-webflux'
            ...
现在,在发现一些CVE警报后,我发现Gradle将
spring boot starter缓存
解析为
2.2.8
。我不确定它是从哪里得到这个版本的:我们的项目中没有这个版本,而deps树看起来好像是我们自己要求的(它是在0级)

当我明确地添加该项时,正如我们之前为所有人所做的那样

dependency 'org.springframework.boot:spring-boot-starter-cache:2.2.11.RELEASE'
然后它最终被解析为2.2.11

+--- org.springframework.boot:spring-boot-starter-cache -> 2.2.11.RELEASE
在Maven中,依赖关系管理非常严格,与此相比:您可以使用依赖关系管理和BOM来控制它,所有这些都很有效,没有像这样的意外

因此,也许我在Gradle的逻辑中遗漏了一些东西,即使在阅读了《依赖关系管理指南》之后

如何使用BOM(如
dependencySet
一次控制所有
条目
-es)?还是我有错误的假设

在Gradle 6.7中,我们有一个
dependencyManagement.dependencies
来设置项目的默认值

不要混淆Spring和Gradle的本机功能。尽管他们实现了相同的目标,但他们的方式却截然不同

我不确定它是从哪里得到这个版本的:我们的项目中没有这个版本,而deps树看起来好像是我们自己要求的(它是在0级)

您可以使用
dependencyInsight
任务获取有关特定依赖项以及选择特定版本的原因的更多信息

./gradlew dependencyInsight --dependency org.springframework.boot:spring-boot-starter-cache
有关更多详细信息,请参阅

如何使用BOM(如
dependencySet
一次控制所有
条目
-es)?还是我有错误的假设

Spring dependency management插件的文档清楚地说明了要实现这一点需要做什么:

如果它没有像您期望的那样工作,那么您需要调试您的依赖项,正如我上面链接的那样


同样从您的示例中,我猜您有一个典型的Spring Boot应用程序,应用了Spring Boot Gradle插件。如果是这样,那么SpringBootGradle插件将检测是否应用了SpringDependencyManagement插件。因此,不需要像现在这样管理特定于Spring的依赖项。

谢谢!听起来需要检查的事情很多——我们有一个内部框架,可以完成您提到的一些事情,但它只是我们项目的一个依赖项,与Maven的父项目不同。所以我认为这只是过渡依赖的另一个来源。我更愿意在构建脚本中管理DEP,以使其与其他依赖项保持一致。如果每个框架都有自己的插件来管理依赖关系,那么这将是一个相当混乱的局面,不是吗?
./gradlew dependencyInsight --dependency org.springframework.boot:spring-boot-starter-cache