具有Gradle的库的多个版本

具有Gradle的库的多个版本,gradle,Gradle,我的问题是Gradle引入了一个库的两个版本,这导致了运行时问题。这些版本都是必需的,并且是我拥有的两个依赖项的依赖项。库A需要库C版本x,库B需要库C版本y。在运行时,使用的库C版本不正确,导致NoSuchFieldError。这是我在格拉德能解决的问题吗?或者这更像是我的IDE/JVM选项的问题?一般来说,Gradle会在存在依赖冲突时选择库的最新版本,这样做是正确的。然而,由于各种原因,这可能并不总是正常工作。为了解决这个问题,您可以明确地告诉Gradle在解析过程中不要包含某个传递依赖项

我的问题是Gradle引入了一个库的两个版本,这导致了运行时问题。这些版本都是必需的,并且是我拥有的两个依赖项的依赖项。库A需要库C版本x,库B需要库C版本y。在运行时,使用的库C版本不正确,导致NoSuchFieldError。这是我在格拉德能解决的问题吗?或者这更像是我的IDE/JVM选项的问题?

一般来说,Gradle会在存在依赖冲突时选择库的最新版本,这样做是正确的。然而,由于各种原因,这可能并不总是正常工作。为了解决这个问题,您可以明确地告诉Gradle在解析过程中不要包含某个传递依赖项。以下是一个例子:

compile (group:'com.project', name:'library', version:'1.0')  {
    // These lines will exclude these other libraries from being included
    exclude module: 'groovy-all'
    exclude module: 'log4j'
    exclude module: 'commons-lang'
}

如果需要的话,您可以将其变得更细粒度,但我发现排除模块对我来说似乎很好。

这是Java的一个限制;如果在类路径上有一个库的两个版本,就没有很好的方法来区分它们,从而导致各种奇怪的运行时错误。这真是一个麻烦。谢谢你的回复。