【问题标题】:How to solve Gradle Dependency inconsistencies in sub-modules?如何解决子模块中的 Gradle Dependency 不一致?
【发布时间】:2015-12-15 20:31:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java gradle dependencies


    【解决方案1】:

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

    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
    }
    

    【讨论】:

    • 谢谢,上例中的“排除组”是什么意思?
    • 这是一种排除传递依赖的方法
    • 谢谢,所以顶层 build.gradle 中根本没有依赖项部分?
    • 您需要在 的父文件中定义依赖版本,因此声明在一个位置。你可以在任何你想要的地方使用它,你不需要声明依赖,并且版本是从 中获取的
    • @java123999 是的,这就是我的建议 - 根项目没有依赖关系
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 非常感谢,基本上你描述的是rafaelle下面显示的代码示例吗?
    • 不,我不是在描述那个代码。我只是在描述一般管理应该如何。
    • 我的意思不是否定的,我的意思是与其他答案的想法相同吗?我要求我自己清楚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2011-10-05
    • 2015-11-01
    • 1970-01-01
    • 2020-02-23
    • 2020-06-02
    相关资源
    最近更新 更多