【问题标题】:Understanding gradle dependencies了解 gradle 依赖项
【发布时间】:2018-05-12 20:47:45
【问题描述】:

我有以下结构:

ProjectA -> 依赖于ProjectB

ProjectB -> 依赖于ProjectC

编译 projectB 一切正常:


ProjectB/build.gradle:

dependencies {
  compile project(':ProjectC')
}

ProjectB/settings.gradle:

include ':ProjectC'
project(':ProjectC').projectDir = new File(settingsDir, '../ProjectC')

但是,编译 ProjectA 却说找不到 ProjectC


ProjectA/build.gradle:

dependencies {
  compile project(':ProjectB')
}

ProjectA/settings.gradle:

include ':ProjectB'
project(':ProjectB').projectDir = new File(settingsDir, '../ProjectB')

这将显示以下错误:

在哪里: 构建文件 ProjectB\build.gradle

出了什么问题:

评估项目 ':ProjectB' 时出现问题。

在项目“:ProjectB”中找不到路径为“:ProjectC”的项目。


我只能让它工作,包括 ProjectA 中的 ProjectC。但这不是我想要的。

我也尝试在 ProjectA 上排除,但没有成功

ProjectA/build.gradle:

dependencies {
  compile (project (':ProjectB')) {
    exclude module: ':ProjectC'
  }
}

但显示同样的错误。

我该如何解决这个问题?

【问题讨论】:

    标签: java gradle build.gradle


    【解决方案1】:

    使用 gradle,您应该只使用一个 settings.gradle 文件。见Multiple settings gradle files for multiple projects building

    也只需遵循 gradle 多项目文档。

    【讨论】:

      【解决方案2】:

      多项目构建不可级联。在多项目构建中可以有一个或没有settings.gradle 文件,但不能有多个。

      除了它没有按预期工作之外,如果您从不同的目录调用 Gradle,它甚至会变得更加混乱。如果未指定,Gradle 会查找(并在旁边查找名为 master 的目录)以查找最近的 settings.gradle。然后它评估settings.gradle 并检查您的工作目录所在的项目是否是该settings.gradle 文件中定义的多项目构建的一部分。如果是,则在多项目构建的上下文中执行,如果不是,则作为独立构建执行。

      这意味着,如果您从 ProjectA 内部调用 Gradle,您将获得一个完全不同的构建,并且配置可能与您从 ProjectB 内部调用 Gradle 不同。

      如果您想将多个多项目构建组合成一个构建,您应该改用GradleBuild 任务或复合构建。在这两种情况下,子构建都是完全独立的,并且本身可以是多项目构建。使用哪一个取决于具体的用例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        相关资源
        最近更新 更多