2016-10-13 154 views
1

在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 
... 

<<看起來不錯,但我怎麼能合併這兩個?

回答

2

你不需要。您在構建開始時看到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

相關問題