如何解决 Gradle 子模块的依赖不一致?

How to solve Gradle Dependency inconsistencies in sub-modules?

在我的 Gradle 项目中,我有许多相同依赖项的不同 版本

例如在我的顶层gradle build file我已经声明了某个版本的依赖项,但是子模块已经声明了不同的版本。

理想情况下,我希望在顶层声明 一次 依赖项,以便所有模块都使用 相同版本的依赖。

是否可以这样做,以便所有子模块仅使用顶级文件中规定的依赖项?

如果是这样,我是否只将顶级依赖项更新到最新版本并删除子模块中声明的依赖项?

您可以将所有依赖项放在一个项目中 属性 在主构建文件中

ext.libraries = [
    commons_io: "commons-io:commons-io:2.4"
  , jasperreports: dependencies.create('net.sf.jasperreports:jasperreports:5.1.0') {
        exclude group: 'com.lowagie'
        exclude group: 'jfree'
  }
  , cxf: [
        'org.apache.cxf:cxf-rt-frontend-jaxws:3.1.4'
      , 'org.apache.cxf:cxf-rt-transports-http:3.1.4']
]

然后在子项目中build.gradle

dependencies {
  compile libraries.commons_io
  compile libraries.jasperreports
  compile libraries.cxf
}

好吧,简单的答案是肯定的。 Maven 也提供了类似的设施,您应该有一个父文件,您可以在其中声明一个 块,在那里您可以定义所有依赖项。

现在,每个子项目或不同的模块都依赖于这个父项目。所以,这些所有模块都必须声明没有版本的依赖关系,因为我们已经在 块中声明了这个版本。

所以,最后我们在这里说的是,我们在一个位置声明依赖关系,并在我们需要的地方使用它。

请记住,在 blcok 中声明依赖项实际上不会解析依赖项,它只会声明它,使用 的子模块可以使用 w/o 定义版本。