有这些gradle项目:
*主项目(使用库A和库B-version-1)*library A(使用library B-version-2,声明为api,因此主项目在依赖项B-v1和B-v2中有两个版本)。
api
当我运行应用程序时,来自库A的代码使用主项目中指定的库B版本(B-v1),而不是它最初使用的版本(B-v2)。有没有办法强制库A使用它自己的库B版本?
pkwftd7m1#
有没有办法强制库A使用它自己的库B版本?是的,但是你如何实现它取决于你的目标:
library-A
library-B
要了解为什么选择library-B的v2版本,您可以阅读此手册:Gradle将考虑所有请求的版本,无论它们出现在依赖关系图中的何处。在这些版本中,它将选择最高的版本。
v2
因此,只需将library-B的版本更改为来自library-A的版本,或者删除依赖声明->,将使用library-B上的传递依赖
->
有几种方法可以说明Gradle应该使用哪个版本的library-B。例如,使用富版本声明,您可以使用您喜欢的版本定义library-B的实现:
// build.gradle.kts dependencies { implementation("group.name:library-A:v1") // uses 'library-B' version 'v1' implementation("group.name:library-C:v1") // uses 'library-B' version 'v2' implementation("group.name:library-B") { version { strictly("v1") } } }
或者使用resolution strategy configuration:
// build.gradle.kts configurations.all { resolutionStrategy { force "group.name:library-B:v1" } }
1条答案
按热度按时间pkwftd7m1#
有没有办法强制库A使用它自己的库B版本?
是的,但是你如何实现它取决于你的目标:
library-A
使用它自己的library-B
版本,同时让主项目使用它自己的library-B
版本,你需要使用Java Module System,或者在类加载方面做一些危险的技巧。library-A
强制library-B
的版本,而不是从主项目的版本,你只需要告诉Gradle比平常多几句话-这就是我的答案要了解为什么选择
library-B
的v2
版本,您可以阅读此手册:Gradle将考虑所有请求的版本,无论它们出现在依赖关系图中的何处。在这些版本中,它将选择最高的版本。
假设#1
library-B
的版本,可以在主项目中更改它。*因此,只需将
library-B
的版本更改为来自library-A
的版本,或者删除依赖声明->
,将使用library-B
上的传递依赖假设#2
library-B
的版本,无法在主项目中更改。例如,此版本来自另一个库。有几种方法可以说明Gradle应该使用哪个版本的
library-B
。例如,使用富版本声明,您可以使用您喜欢的版本定义
library-B
的实现:或者使用resolution strategy configuration: