Gradle:在某些任务中顺序执行任务

时间:2018-07-18 00:44:03

标签: gradle groovy android-gradle

我有一个库,其中包含3个lib模块和1个示例模块。在部署任务之前,我要执行其他一些任务。在命令行中,它看起来像这样:./gradlew -x:example:clean -x:example:check -x:example:uploadArchives clean check :androidLib:assembleRelease uploadArchives

我想编写gradle任务以按示例模块之外的所有模块顺序执行所有任务。我可以做的:./gradlew deployAll。我该怎么办?

我尝试这样做:

task deployAll {
    doLast {
        subprojects {
             if(it.plugins.withType(com.android.build.gradle.AppPlugin)) return
             it.tasks.getByName('clean').execute()
             it.tasks.getByName('check').execute()
             ...
        }
    }
}

但不推荐使用execute(),它仅执行第一个任务,而忽略任何任务。

2 个答案:

答案 0 :(得分:1)

您可以在gradle任务中使用dependsOn来确保任务以正确的顺序运行

task task1{
    dependsOn task2
    //Task one code
}

task2{
    dependsOn task3
    //task 3 code
}

task3{
    //task3 code
}

因此在此示例中,如果您调用task1,则将首先执行任务3,然后执行task2,最后执行任务1,但是您只需要调用task1。

答案 1 :(得分:0)

您可以创建另一个任务并设置其他任务的依赖项

task deployAll {
  dependsOn tasks.getByName('clean')
  dependsOn(tasks.getByName('check'))
}

为了确保订单添加把它放在某处

tasks.getByName('check').mustRunAfter(tasks.getByName('clean'))