Gradle custom task which runs multiple tasks

2019-01-31 06:01发布

问题:

I wanna run multiple gradle tasks as one. So instead of

./gradlew clean build publish

I want to have a custom task

./gradlew cleanBuildPublish

that executes clean build and publish in order.

How's that possible?

This does not work

task cleanBuildPublish {
    dependsOn 'clean'
    dependsOn 'build'
    dependsOn 'publish'
}

回答1:

If you need to execute some tasks in predefined order, then you need to not only set dependsOn, but also to set mustRunAfter property for this tasks, like in the following code:

task cleanBuildPublish {
    dependsOn 'clean'
    dependsOn 'build'
    dependsOn 'publish'
    tasks.findByName('build').mustRunAfter 'clean'
    tasks.findByName('publish').mustRunAfter 'build'
}

dependsOn doesn't define an order of tasks execution, it just make one task dependent from another, while mustRunAfter does.



回答2:

You can also use the task base class called GradleBuild

Here how you can do that with GradleBuild

task cleanBuildPublish(type: GradleBuild) {
     tasks = ['clean', 'build', 'publish']
}


回答3:

Try below way to make cleanBuildPublish depend on other tasks

build.gradle

task clean{
    println "lets clean"
}

task build {
    println "lets build"
}

task publish {
    println "lets publish"
}

task cleanBuildPublish{
    println 'lets do all'
}


cleanBuildPublish.dependsOn clean
cleanBuildPublish.dependsOn build
cleanBuildPublish.dependsOn publish

Output

$ gradle cleanBuildPublish
lets clean
lets build
lets publish
lets do all
:build UP-TO-DATE
:clean UP-TO-DATE
:publish UP-TO-DATE
:cleanBuildPublish UP-TO-DATE

BUILD SUCCESSFUL

Total time: 2.738 secs

check https://docs.gradle.org/current/userguide/more_about_tasks.html#addDependencyUsingTask for more details



回答4:

If publish task is in a sub project named subProjectName,

...
tasks.findByPath(':subProjectName:publish').mustRunAfter 'build'
...


回答5:

Try adding defaultTasks in build.gradle. For eg. defaultTasks 'clean', 'build', 'publish'



标签: gradle