了解gradle依赖关系

时间:2017-11-29 08:02:41

标签: java gradle build.gradle

我有以下结构:

ProjectA - >取决于 ProjectB

ProjectB - >取决于 ProjectC

编译 projectB 一切正常:

项目B /build.gradle:

dependencies {
  compile project(':ProjectC')
}

项目B /settings.gradle:

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

但是,编译 ProjectA 它表示无法找到 ProjectC

项目A /build.gradle:

dependencies {
  compile project(':ProjectB')
}

项目A /settings.gradle:

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

这将显示以下错误:

  

其中:   构建文件ProjectB \ build.gradle

     

出了什么问题:

     

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

     

在项目':ProjectB'中找不到带有':ProjectC'的项目。

我只能在 ProjectA 中包含 ProjectC 。但这不是我想要的。

我还尝试排除 ProjectA 但没有工作

项目A /build.gradle:

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

但显示同样的错误。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

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

这意味着,如果您从ProjectA内部调用Gradle,则可能会有一个完全不同的版本,可能与您在ProjectB内调用Gradle的方式配置不同。

如果要将多个多项目构建组合到一个构建中,则应使用GradleBuild任务或组合构建。在这两种情况下,子构建都是完全独立的,并且本身可以是多项目构建。使用哪一个取决于确切的用例。

答案 1 :(得分:0)

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

另请参阅gradle multiproject文档。