Gradle依赖项库已由另一个库更新

Gradle依赖项库已由另一个库更新,gradle,Gradle,我的gradle有一段时间依赖于(令人惊叹的)Android库毕加索。它始终设置为2.5.2版 implementation 'com.squareup.picasso:picasso:2.5.2' 我最近将我所有的Firebase库从一个相当旧的版本更新到了最新版本。这时发生了一些奇怪的事情 我的毕加索方法调用开始出错 Picasso.with(context) 我从这篇文章中知道,这是对毕加索的一次修改。 我需要换成 Picasso.get() 好吧,没什么大不了的,但这让我想知道。显

我的gradle有一段时间依赖于(令人惊叹的)Android库毕加索。它始终设置为2.5.2版

implementation 'com.squareup.picasso:picasso:2.5.2'
我最近将我所有的Firebase库从一个相当旧的版本更新到了最新版本。这时发生了一些奇怪的事情

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

Picasso.with(context)
我从这篇文章中知道,这是对毕加索的一次修改。 我需要换成

Picasso.get()

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

我想:既然你声明了一个特定的版本,这个要求就不灵活了。要允许更新版本(如果可用),需要
+
声明。我的猜测是,更新后,另一个依赖项也依赖于毕加索。Gradle在获得冗余依赖项时,将选择较新的版本

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

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

gradle构建--扫描

更高级的依赖关系管理:

1) 在依赖项冲突上设置渐变行为:

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

您可以检查:

Gradle通过选择模块的最高版本来解决版本冲突。和对于确定选择特定版本的原因非常有帮助