构建后的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关闭内移动,它将不起作用。

+0

添加'doAfter'不起作用:'找不到方法doAfter()为参数[build_92jecjaieetrt4v2cwwz3ik0j $ _run_closure6 $ @ _closure9 41b0297c]上的任务:类型org.gradle.api.tasks.Copy的 'unzipTestData'。 – DerM

+0

@DerM对不起,我忘了名字。它被称为doLast,而不是后者 – AdamSkywalker