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

Maven 在父项目和子项目中使用库的不同版本,maven,gradle,build.gradle,dependency-management,transitive-dependency,Maven,Gradle,Build.gradle,Dependency Management,Transitive Dependency,我有一个包含build.gradle的项目child,如下所示 dependencies{ compile 'com.google.guava:guava:17' } dependencies{ compile project(':child') compile 'com.google.guava:guava:23' } 我有另一个名为parent的项目,其build.gradle如下所示 dependencies{ compile 'com.

我有一个包含build.gradle的项目child,如下所示

dependencies{
   compile 'com.google.guava:guava:17'
}
dependencies{
       compile project(':child')
       compile 'com.google.guava:guava:23'
    }
我有另一个名为parent的项目,其build.gradle如下所示

dependencies{
   compile 'com.google.guava:guava:17'
}
dependencies{
       compile project(':child')
       compile 'com.google.guava:guava:23'
    }
现在我的问题是,子项目在运行时将使用哪个版本?我知道Gradle依赖关系树显示
17->23
。但这是否意味着孩子们也会使用较新版本的番石榴?如果我想用
guava:23
parent中,但它缺少child使用的类,该怎么办

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

编译'xxx:child:1.0'


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

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

因此,如果你的“父母”使用“孩子”,而他们都使用番石榴,你需要找到一种适合他们两人的番石榴

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