我有以下结构:
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'
}
}
但显示同样的错误。
我该如何解决这个问题?
答案 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文档。