在父项目和子项目中使用不同版本的库
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 解决)。
我有一个项目 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 解决)。