android - 强制 gradle 不升级传递依赖
问题描述
我遇到了 gradle(6.7.1) 自动升级传递依赖项的问题。考虑两个父依赖A和B,它们都使用不同版本的PICASSO作为传递依赖
A -> com.squareup.picasso:picasso:2.5.2
B -> com.squareup.picasso:picasso:2.71828
在构建 android 项目时,PICASSO 会自动升级到2.71828。由于这 2 个版本( 2.5.2 和 2.71828) 的 PI CASSO API INITIALISATION不同, A碰巧抛出NoSuchMethodException。我如何强制 gradle 为 A 和 B 使用特定的 PICASSO 版本。
任何帮助将非常感激。
解决方案
strictly
您可以在声明传递依赖时尝试使用 Gradle约束。
例如:
implementation 'org.apache.httpcomponents:httpclient:4.5.4'
implementation('commons-codec:commons-codec') {
version {
strictly '1.9'
}
}
这commons-code
是 的内部依赖项httpclient
,通过向 中添加strictly
约束commons-code
,httpclient
将强制使用 1.9 版,无论其项目内部定义了什么。
您可以在此处找到更多详细信息
但是假设在您的情况下,依赖项 B 与旧版本的毕加索不兼容,那么您可以将其中一个依赖项提取到一个单独的模块中,并在那里使传递依赖项变得严格。
然后您可以尝试添加新模块并查看它是否有效,或者创建第二个依赖项的 jar 并将其添加到您的项目中,这样 Gradle 就不会首先运行冲突解决方案