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

时间:2018-07-19 07:54:52

标签: maven gradle build.gradle dependency-management transitive-dependency

我有一个带有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 也将使用较新版本的番石榴?如果我想在父级中使用guava:23,但缺少 child 使用的某些类怎么办?

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

compile 'xxx:child:1.0'

这是否意味着直到孩子之前,我将永远无法升级番石榴版本?

1 个答案:

答案 0 :(得分:1)

在Java中,类路径上最多可以有一个库版本(或者,至少其他所有情况都会引起麻烦...)。

因此,如果您的“父母”使用“孩子”并且他们都使用番石榴,则需要找到适合他们两个的番石榴版本。

通常,如果Gradle在依赖关系树上找到多个版本,则使用依赖关系的最新版本。当然,您可以得到更精细的控制,但是很长一段时间没有使用Gradle(只有Maven,您的直接依赖项始终获胜,而其他冲突则通过dependencyManagement进行了解决。)