我想同时执行多个gradle任务。所以代替
./gradlew clean build publish
我想要一个自定义任务
./gradlew cleanBuildPublish
clean
build
并按publish
顺序执行。
那怎么可能
这行不通
task cleanBuildPublish {
dependsOn 'clean'
dependsOn 'build'
dependsOn 'publish'
}
Answers:
如果需要按预定义的顺序执行某些任务,则不仅需要set dependsOn
,而且还需要mustRunAfter
为此任务设置属性,如以下代码所示:
task cleanBuildPublish {
dependsOn 'clean'
dependsOn 'build'
dependsOn 'publish'
tasks.findByName('build').mustRunAfter 'clean'
tasks.findByName('publish').mustRunAfter 'build'
}
dependsOn
并没有定义任务执行的顺序,只是使一个任务与另一个任务相关,而mustRunAfter
确实如此。
Cannot invoke method mustRunAfter() on null object
cleanBuildPublish
在定义了所有单个任务之后放置。似乎gradle任务是从上到下读取的。这解决了我的问题Cannot invoke method mustRunAfter() on null object
您还可以使用称为 GradleBuild
在这里,您如何使用 GradleBuild
task cleanBuildPublish(type: GradleBuild) {
tasks = ['clean', 'build', 'publish']
}
project.tasks.register
用来创建任务,仅此而已。
尝试以下方式使cleanBuildPublish依赖于其他任务
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
输出量
$ 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
查看https://docs.gradle.org/current/userguide/more_about_tasks.html#addDependencyUsingTask了解更多详细信息
我的方法是
task cleanBuildPublish (type: GradleBuild, dependsOn: ['clean', 'build', 'publish']) {
}
这对我有用。
这是我通过Kotlin脚本同时使用dependsOn和mustRunAfter来完成的。这是运行两个任务的示例,一个任务(自定义注册的“ importUnicodeFiles”任务)在“ this”项目中,另一个(预定义的“ run”任务)在同级项目“:unicode”中:
tasks.register("rebuildUnicodeFiles") {
description = "Force the rebuild of the `./src/main/resources/text` data"
val make = project(":unicode").tasks["run"]
val copy = tasks["importUnicodeFiles"]
dependsOn(make)
dependsOn(copy)
copy.mustRunAfter(make)
}
Gradle开发人员通常建议不要使用这种方法(他们说强迫排序是不好的,而执行来自其他项目的任务是不好的),并且正在研究一种在项目之间发布结果的方法。请参阅:https://docs.gradle.org/current/userguide/cross_project_publications.html
这是我通过Kotlin脚本同时使用dependsOn和mustRunAfter来完成的。这是运行两个任务的示例,一个任务(自定义注册的“ importUnicodeFiles”任务)在“ this”项目中,另一个(预定义的“ run”任务)在同级项目“:unicode”中:
tasks.register("rebuildUnicodeFiles") {
description = "Force the rebuild of the `./src/main/resources/text` data"
val make = project(":unicode").tasks["run"]
val copy = tasks["importUnicodeFiles"]
dependsOn(make)
dependsOn(copy)
copy.mustRunAfter(make)
}