在父项目和子项目中使用不同版本的库

Use different versions of a library in parent and child projects

我有一个项目 child build.gradle 如下。

dependencies{
   compile 'com.google.guava:guava:17'
}

我有另一个名为 parent 的项目 build.gradle 如下。

dependencies{
       compile project(':child')
       compile 'com.google.guava:guava:23'
    }

现在我的问题是子项目在运行时将使用哪个版本?我知道 Gradle 依赖关系树显示 17 -> 23。但这是否意味着 child 也会使用更新版本的番石榴?如果我想在 parent 中使用 guava:23 但缺少 child 使用的 class 怎么办?

如果我不控制 child 并且它作为外部依赖项包含在父项中怎么办,例如:

compile 'xxx:child:1.0'

这是否意味着我永远无法升级我的 guava 版本,直到 child 升级?

在 Java 中,您最多可以在类路径上拥有一个库版本(或者,至少,其他一切都会导致麻烦...)。

因此,如果您的 "parent" 使用 "child" 而他们都使用 guava,则您需要找到适合他们的 guava 版本。

通常,Gradle 如果在依赖关系树上找到多个版本,则使用最新版本的依赖关系。你当然可以获得更细粒度的控制,但已经很长时间没有使用 Gradle(只有 Maven,你的直接依赖总是获胜,其他冲突通过 dependencyManagement 解决)。