提问者:小点点

Gradle-子项目排除父定义的项目依赖


如何排除父定义的编译项目依赖?

模块结构如下:

- 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个)都有依赖关系似乎是错误的。


共2个答案

匿名用户

您可以使用配置块:

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')
    }
  }

下面的答案是更清洁的解决方案。