gradle - 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 在给定冗余依赖项时,将选择较新的版本。
如果我理解正确,这与您所说的一致。如果 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
推荐阅读
- php - 查询 + 显示在函数外工作但不在函数内工作的行
- javascript - Is there a way to save HTTP response data in order to not recall HTTP service?
- c# - Textbox value empty inside gridview on button click
- scala - 如何将 scalatest 标签添加到报告中?
- java - I want to set a HashMap with SpringBoot and get the values next in other class
- android - Android Cardview 可聚焦
- r - 阻止条形图在ggplot中重叠
- python - 如何将 openCV 转换后的图像转换为其原始格式
- excel - 增加字符串之间的空间
- webpack - 如何在不抱怨 eslint 的情况下根据环境包含配置文件?