Gradle:从父级构建脚本配置

时间:2018-08-24 11:36:59

标签: gradle module configuration parent subproject

我按照本指南将项目拆分为模块/子项目:

https://docs.gradle.org/current/userguide/multi_project_builds.html

在主脚本build.gradle中,我将配置应用于子项目:

subprojects {
  repositories {
    mavenCentral()
  }
}

如果我从根构建目录运行子项目,则此方法运行良好:

mainProject$ ./gradlew clean :common:build 

(成功构建:common模块)

但是我希望能够构建:common目录中的common模块:

mainProject$ cd common
common$ ./gradlew clean build 

如果未在common/build.gradle文件中明确配置存储库,则此操作将失败。但是我已经在上面的父配置中做到了,我希望子项目在可能的情况下选择父配置。

因此,很容易配置父项目和子项目,因此当我从子项目目录运行子项目构建时,它也会考虑父配置(不仅考虑存储库配置,还考虑一些常量,依赖项等)。

2 个答案:

答案 0 :(得分:0)

首先:您不应在每个子项目目录中都安装gradle包装器脚本,而应在根项目目录中仅安装一个gradle包装器。 然后,如果要从子项目目录调用build,则必须从父目录引用gradlew脚本:包装器文档https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:using_wrapper

中的一个注释中对此进行了说明。

在官方文档的另一页中也有对此的引用: https://docs.gradle.org/current/userguide/intro_multi_project_builds.html#sec:executing_a_multiproject_build

  

还有最后一件事要注意。使用Gradle包装器时,第一种方法效果不佳,因为如果不在项目根目录中,则必须指定包装器脚本的路径。例如,如果您位于webservice子项目目录中,则必须运行../../gradlew build。

从子项目目录执行构建时,Gradle将按照您的期望自动搜索根项目配置:这是在初始化阶段完成的(请参见此处:https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:initialization

答案 1 :(得分:0)

问题出在子settings.gradle中:子项目不应具有此文件,否则gradle会考虑当前目录和根项目!

https://docs.gradle.org/current/userguide/build_lifecycle.html#sub:project_locations

https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:initialization