我有以下结构:
项目A -> 取决于项目B
ProjectB -> 取决于 ProjectC
编译projectB一切正常:
<小时/>ProjectB/build.gradle:
dependencies {
compile project(':ProjectC')
}
<小时/>
ProjectB/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')
<小时/>
这将显示以下错误:
<小时/>Where: Build file ProjectB\build.gradle
What went wrong:
A problem occurred evaluating project ':ProjectB'.
Project with path ':ProjectC' could not be found in project ':ProjectB'.
我只能让它工作,包括ProjectA中的ProjectC。但这不是我想要的。
我也尝试排除 ProjectA 但没有成功
项目A/build.gradle:
dependencies {
compile (project (':ProjectB')) {
exclude module: ':ProjectC'
}
}
但显示相同的错误。
我该如何解决这个问题?
最佳答案
多项目构建不可级联。在多项目构建中可以有一个或没有 settings.gradle
文件,但不能有多个。
除了它没有按预期工作之外,如果您从不同的目录调用 Gradle,它甚至会变得更加困惑。如果未指定,Gradle 会查找(并在旁边查找名为 master
的目录)以查找最近的 settings.gradle
。然后,它评估 settings.gradle
并检查您的工作目录所在的项目是否是该 settings.gradle
文件中定义的多项目构建的一部分。如果是,则在多项目构建的上下文中执行,如果不是,则作为独立构建执行。
这意味着,如果您从 ProjectA
内部调用 Gradle,则与从 ProjectB
内部调用 Gradle 相比,您将获得完全不同的构建,并且其配置也可能不同。
如果您想将多个多项目构建组合成一个构建,则应该使用 GradleBuild
任务或复合构建。在这两种情况下,子构建都是完全独立的,并且本身可以是多项目构建。使用哪一种取决于具体的用例。
关于java - 了解 gradle 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47547776/