我在build.gradle文件中定义了以下Gradle任务
task myTask() << {
println "Start"
assembleRelease.execute()
println "end"
}
我想要的是在执行assembleRelease
时执行myTask
gradle任务。
但是,我得到的是以下输出
Executing tasks: [myTask]
Configuration on demand is an incubating feature.
Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0
:gymgym:myTask
Start
end
BUILD SUCCESSFUL
如您所见,&#34;开始&#34;后跟&#34;结束&#34;,表示尚未调用assembleRelease
。
我做错了什么?
答案 0 :(得分:1)
Gradle中的每个任务都是DAG上的节点。这听起来像是你试图用另一个任务包围一个任务,这不适合模型。但是,您可以使用doFirst
和doLast
将工作附加到任务的开头和/或结尾。如果您希望它是可选的,您可以使它依赖于可选的命令行参数。
ext.SHOULD_WRAP = hasProperty('shouldWrap') ? shouldWrap.toBoolean() : false
if (SHOULD_WRAP) {
wrapAssemble()
}
def start() {
println "Start"
}
def end() {
println "end"
}
def wrapAssemble() {
assembleRelease.doFirst {
start()
}
assembleRelease.doLast {
end()
}
}
使用此配置,调用./gradlew assembleRelease -PshouldWrap=true
将使用前置和附加的工作执行汇编任务。调用./gradlew assembleRelease -PshouldWrap=false
或简单./gradlew assembleRelease
将正常执行汇编任务。
旧答案
只需将您的任务设置为assembleRelease的依赖项:
任务myTask()&lt;&lt; { println&#34;开始&#34; println&#34; end&#34; } assembleRelease.dependsOn&#34; myTask&#34;
现在,当assembleRelease为。时,您的任务将始终执行。