Gradle中相同依赖项的多个版本发生冲突

Gradle中相同依赖项的多个版本发生冲突,gradle,build.gradle,Gradle,Build.gradle,我陷入了多项目系统中的依赖冲突中,同一依赖关系的多个版本共存 我在上创建了一个简单的演示项目 A有两个依赖项:B和C B有一个依赖项:C A和B都依赖于C,但版本不同 A依赖于C.2 B依赖于C.1 以下是简单的依赖关系图: A | |___ C.2 | |___ B | |__ C.1 A 格雷德尔先生 依赖项{ 编译“org.mindfulrunner:c:2.0” 编译“org.mindfulrunner:b:1.0-SNAPSHOT” B 格雷德尔先生 依赖项{ 编

我陷入了多项目系统中的依赖冲突中,同一依赖关系的多个版本共存

我在上创建了一个简单的演示项目

A有两个依赖项:B和C

B有一个依赖项:C

A和B都依赖于C,但版本不同

A依赖于C.2

B依赖于C.1

以下是简单的依赖关系图:

A
|
|___ C.2
|
|___ B
     |
     |__ C.1
A

格雷德尔先生

依赖项{

编译“org.mindfulrunner:c:2.0”
编译“org.mindfulrunner:b:1.0-SNAPSHOT”

B

格雷德尔先生

依赖项{

编译“org.mindfulrunner:c:1.0”

在B中运行testNaming()时,需要c.1,而c.1是c的唯一可用版本。 但是在A中从_b()运行testNaming_失败了,因为c.1是必需的,但c.2接管了它

以下是错误输出。c.1是一个抽象类,而c.2是一个接口

class org.mindfulrunner.NamingV1的接口org.mindfulrunner.Naming为super class java.lang.CompatibleClassChangeError:class org.mindfulrunner.NamingV1的接口org.mindfulrunner.Naming为super class

根据Gradle的说法,在解决依赖冲突时,Gradle将选择最高版本。因此,当c.1和c.2都存在时,将选择c.2

我怎样才能让B在A中使用c.1而不是c.2呢?我一直在用来自的想法改变build.gradle。但它们都不起作用


非常感谢您的帮助!

这回答了您的问题吗?谢谢Jannis!但我正在Gradle脚本中寻找一种配置,其中所有不同版本的库依赖项都一起管理。我们没有编写代码来直接管理JAR。但感谢您的回答,它提醒我,事情最终仍将继续可以归结为没有魔法的类加载/类路径。