根据父项目的任务,gradle子项目任务的语法是什么?

时间:2016-11-17 22:36:40

标签: gradle build dependencies

我需要Gradle构建文件的一些帮助。我有一些子项目依赖于顶层文件夹中的任务。我只需要执行test任务并将其拆分为两个单独的测试任务。目前文件系统结构如下(选项卡指示目录中的文件):

top-level-project-folder
    A.gradle
    B.gradle
    C-subproject-folder
        C.gradle
    D-subproject-folder
        D.gradle

A.gradle的内容(重构前):

subprojects {
    tasks.test.dependsOn {
        bTask
    }
}
apply from: 'B.gradle'

C.gradle的内容(重构前):

test {
    ...
}

在重构之后,C.gradle需要看起来像:

test {
    ...
}

task runDifferentTests(type : Test) {
    ...
}

棘手的部分是C.gradle test任务目前取决于bTask。但是,在重构后,C.gradle的{​​{1}}任务应该依赖于test,但新的bTask任务应该依赖于在runDifferentTests。 (目前,bTask' D.gradle任务被标记为依赖于test,但实际上并不依赖于它 - 我想删除该依赖项。依赖于bTask的两个子项目中唯一的任务是新的bTask任务。)

我尝试了一些不同的东西,但似乎无法找到有效的解决方案。

2 个答案:

答案 0 :(得分:1)

只需删除subprojects中的声明,并在C.gradle中直接在子项目中声明您的相关性:

runDifferentTests.dependsOn rootProject.bTask

答案 1 :(得分:0)

这里有一些语法解决方案:

runDifferentTests.dependsOn (":bTask")

runDifferentTests.dependsOn rootProject.bTask

task runDifferentTests(type : Test, dependsOn: [":bTask"]) {
...
}

task runDifferentTests(type : Test) {
dependsOn rootProject.bTask
...
}

//in the root build.gradle to apply to all subprojects at once.
subprojects {
    runDifferentTests.dependsOn (":bTask")
}

runDifferentTests.dependsOn {
    tasks.findAll { task -> task.name.startsWith('bTask') }
}

:可用于升级而不是rootProject取决于首选项和项目结构