首页 > 解决方案 > Gradle 依赖库被另一个库更新

问题描述

我的 gradle 有一段时间依赖于(惊人的)Android 库 Picasso。它一直设置为 2.5.2 版本

implementation 'com.squareup.picasso:picasso:2.5.2'

我最近将我所有的 Firebase 库从一个相当旧的版本更新到了最新版本。就在这时,奇怪的事情发生了。

我的毕加索方法调用开始出错

Picasso.with(context)

我从这篇 SO 文章中知道这是对毕加索的改变。 找不到使用毕加索库android的符号方法(),我需要更改为

Picasso.get()

好吧,没什么大不了的,但这让我想知道。显然,Firebase 使用最新版本的毕加索,并且让我的项目也使用最新版本。我的问题是为什么我的本地 gradle 文件被忽略并且毕加索的较新版本默认为?

标签: gradle

解决方案


我的脑海中浮现:由于您声明了特定版本,因此要求不灵活。要允许更新版本(如果可用+),需要声明。我的猜测是更新后另一个依赖项也依赖于毕加索。Gradle 在给定冗余依赖项时,将选择较新的版本。

如果我理解正确,这与您所说的一致。如果 Firebase 使用较新的 Picasso 版本,因为它需要该版本,那么 Gradle 将有两个版本可供选择。这将始终导致选择较新的版本。至少这是默认行为afaik。

在我看来,您已经知道 Firebase 使用了 Picasso。但是,如果您想查看哪个依赖项来自何处,可以查看构建扫描:

gradle build --scan

https://scans.gradle.com/?_ga=2.166196030.1236003146.1565212874-222812074.1565212874

更高级的依赖管理:

1)设置依赖冲突的Gradle行为:

https://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

2)声明版本约束(见富版本声明):

https://docs.gradle.org/current/userguide/declaring_dependencies.html


推荐阅读