如何排除父定义的编译项目
依赖?
模块结构如下:
- build.gradle
- settings.gradle
- MAIN_MODULE_1
- build.gradle
- MODULE1
- build.gradle
- MODULE2
- build.gradle
- MODULE3
- build.gradle
- MODULE4
- build.gradle
依赖模型应该是:
- MODULE1 <- MAIN_MODULE_1
- MODULE2 <- MAIN_MODULE_1
- MODULE3 <- MAIN_MODULE_1
- MODULE4 <- MAIN_MODULE_1
这意味着,拥有
// build.gradle
subprojects {
apply plugin: 'java'
dependencies {
compile project('MAIN_MODULE_1')
}
}
// settings.gradle
include ':MAIN_MODULE_1'
include ':MODULE1'
include ':MODULE2'
include ':MODULE3'
include ':MODULE4'
会创建MAIN_MODULE_1
对自身的循环依赖,这是错误的。
在我看来,每个模块(总数不是4个而是120个)都有依赖关系似乎是错误的。
您可以使用配置块:
project(':MAIN_MODULE_1') {
apply plugin: 'java'
}
configure(subprojects - project(':MAIN_MODULE_1')) {
apply plugin: 'java'
dependencies {
compile project('MAIN_MODULE_1')
}
}
答案来自另一个问题Gradle排除特定子项目主项目中的插件
只有当您不在项目MAIN_MODULE_1
中时,您才能有条件地应用依赖项:
dependencies {
if (!project.name.equals("MAIN_MODULE_1")) {
compile project(':MAIN_MODULE_1')
}
}
下面的答案是更清洁的解决方案。