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'
}
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.
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']
}
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
If publish task is in a sub project named subProjectName,
...
tasks.findByPath(':subProjectName:publish').mustRunAfter 'build'
...
Try adding defaultTasks
in build.gradle. For eg.
defaultTasks 'clean', 'build', 'publish'