构建后的Gradle复制任务
问题描述:
在Gradle中,可以轻松定义构建后运行的任务。构建后的Gradle复制任务
task finalize1 << {
println('finally1!')
}
build.finalizedBy(finalize1)
这个按预期工作。但是现在我想在最后执行复制任务。
task finalize (type: Copy) {
def zipFile = file('data/xx.zip')
def outputDir = file("data/")
println('Unzip..')
from zipTree(zipFile)
into outputDir
}
build.finalizedBy(finalize)
这不起作用了。我在构建开始时看到“Unzip”输出(我需要结束时的提取)。
Unzip..
:clean
:compileJava
:processResources
:classes
:findMainClass
:jar
:bootRepackage
:assemble
...
<<
看起来不错,但我怎么能合并这两个?
答
你不需要。您在构建开始时看到Unzip...
,但这并不意味着Gradle正在执行此任务。
当Gradle开始配置您的复制任务时,此消息打印在控制台中,例如,为输入和输出添加路径。真正的执行是在构建后完成的。要验证是否可以使用doLast
关闭:
task finalize (type: Copy) {
doLast { println 'running now' }
...
}
代码中doLast
块将建成后执行。
P.S.不要将其余的任务代码(from zipTree(zipFile)
等)在doLast
关闭内移动,它将不起作用。
添加'doAfter'不起作用:'找不到方法doAfter()为参数[build_92jecjaieetrt4v2cwwz3ik0j $ _run_closure6 $ @ _closure9 41b0297c]上的任务:类型org.gradle.api.tasks.Copy的 'unzipTestData'。 – DerM
@DerM对不起,我忘了名字。它被称为doLast,而不是后者 – AdamSkywalker