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

时间:2014-03-13 18:18:55

标签: java gradle dependency-management

如何排除父定义的compile project依赖项?

模块结构如下:

- 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 个答案:

答案 0 :(得分:14)

您可以使用配置块:

project(':MAIN_MODULE_1') {
  apply plugin: 'java'
}

configure(subprojects - project(':MAIN_MODULE_1')) {
  apply plugin: 'java'
  dependencies {
    compile project('MAIN_MODULE_1')
  }
}

答案来自另一个问题Gradle exclude plugin in main project for specific subproject(s)

答案 1 :(得分:11)

只有当您不在项目MAIN_MODULE_1中时,才能有条件地应用依赖项:

  dependencies {
    if (!project.name.equals("MAIN_MODULE_1")) {
      compile project(':MAIN_MODULE_1')
    }
  }

以下答案是一个更清洁的解决方案。