简体   繁体   English

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

[英]Gradle - subprojects exclude parent defined project dependency

How can I exclude parent defined compile project dependency? 如何排除父定义的compile project依赖?

Structure of modules is as follows: 模块结构如下:

- build.gradle
- settings.gradle
- MAIN_MODULE_1
  - build.gradle
- MODULE1
  - build.gradle
- MODULE2
  - build.gradle
- MODULE3
  - build.gradle
- MODULE4
  - build.gradle

And dependency model should be: 依赖模型应该是:

- MODULE1 <- MAIN_MODULE_1
- MODULE2 <- MAIN_MODULE_1
- MODULE3 <- MAIN_MODULE_1
- MODULE4 <- MAIN_MODULE_1

Which means, having 这意味着,拥有

// 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'

will create circular dependency of MAIN_MODULE_1 on itself, which is wrong. 将创建MAIN_MODULE_1对自身的循环依赖,这是错误的。

and having the dependency in each module (of total count not 4 but 120) seems wrong to me. 并且在每个模块中具有依赖性(总计数不是4但是120)对我来说似乎是错误的。

You can use the configuration block : 您可以使用配置块:

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

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

The answer is coming from this other question Gradle exclude plugin in main project for specific subproject(s) 答案来自另一个问题Gradle在特定子项目的主项目中排除插件

You can conditionally apply the dependency only if you are not in project MAIN_MODULE_1 : 只有当您不在项目MAIN_MODULE_1才可以有条件地应用依赖关系:

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

The answer below is a cleaner solution. 以下答案是一个更清洁的解决方案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM