10

我有一个多项目 gradle 构建,我在父构建中声明了一个任务,该任务使用在子项目中声明的变量(值可以根据子项目而改变)。但是,我在配置阶段收到一个错误,即变量不存在。我的设置看起来像

build.gradle(顶级)

subprojects {
   myTask {
     prop = valueDefinedInChild
   }

}

进而

build.gradle(子项目)

valueDefinedInChild = 'someValue'

有没有办法正确地做到这一点?

4

1 回答 1

12

有一种方法可以做到这一点(project.evaluationDependsOnChildren()),但我建议仅将其用作最后的手段。相反,我会在顶层配置共性,在子项目级别配置差异:

build.gradle(顶级):

subprojects {
    task myTask { // add task to all subprojects
        // common configuration goes here
    }
}

build.gradle(子项目):

myTask {
    prop = 'someValue'
}

避免重复的另一种方法是将通用代码分解为单独的脚本,并让子项目将其包含在apply from:. 当逻辑仅适用于选定的子项目时,或者希望避免父项目和子项目之间的耦合(例如,使用 Gradle 的新按需配置功能时),这是一个不错的选择。

于 2013-02-02T00:45:49.507 回答