2013-05-03 131 views
6

我寫的一定量的Gradle任務不需要任何輸入或輸出。因此,當我給他們打電話時,這些任務總是得到狀態UP-TO-DATE。舉個例子:在Gradle中強制執行任務

task backupFile(type: Copy) << { 
    //Both parameters are read from the gradle.properties file 
    from file(adjusting_file.replaceAll("\"", "")) 
    into file(backupDestinationDirectory + "/main/") 

    println "[INFO] Main file backed up" 
} 

導致下面的輸出:

:gradle backupFile 
:backupFile UP-TO-DATE 

有沒有辦法來力(紐約州)要執行的任務,無論什麼? 如果有,是否有可能切換任務執行(例如告訴構建腳本要運行哪些任務以及忽略哪些任務)?

我不能省略<<標籤,因爲這樣會使任務執行到總是,這不是我所期望的。

非常感謝您的意見。

+0

_I不能省略<<標籤,因爲這樣做的任務總是execute_ =>這是不正確的,我敢打賭,你說是因爲你的println語句,顯示您的構建每次你的Gradle調用文件。長話短說,'>>'用於爲您的任務定義** action **,因此println將成爲此操作的一部分,並且僅在執行任務時才顯示。如果沒有'>>'你定義一個任務**配置**,因此你的println會每次顯示,但這並不意味着這個任務已經被執行,而只是被配置了_configured_。 – Attila 2015-06-25 10:04:24

回答

9

任務必須在配置階段中進行配置。但是,您正在將它配置爲在執行階段中運行的任務操作(<< { ... })。由於您配置任務的時間太晚,Gradle認爲它沒有任何關係,因此打印UP-TO-DATE

下面是一個正確的解決方案。再次,我建議使用doLast而不是<<,因爲它會導致更常規的語法,並且不太可能偶然地添加/省略。

task backupFile(type: Copy) { 
    from file(adjusting_file.replaceAll("\"", "")) 
    into file(backupDestinationDirectory + "/main/") 
    doLast { 
     println "[INFO] Main file backed up" 
    } 
}  
+0

這是不是使任務只是*總是*執行? – 2013-05-03 12:08:46

+0

不,它不。我建議退後一步,研究[Gradle用戶指南]的前幾章(http://gradle.org/docs/current/userguide/userguide_single.html),並在完整的Gradle發行版中試驗樣本。 – 2013-05-03 12:10:40

0

我一直在試圖做很多天。 我必須在processResource步驟中創建許多intermidate jar。 以下一個需要在processResource步驟中創建。

processResources.dependsOn(packageOxygenApplet) //doesn't work 

task packageOxygenApplet (type: Jar) { 

    println '** Generating JAR..: ' + rsuiteOxygenAppletJarName 
     from(sourceSets.main.output) { 
      include "org/worldbank/rsuite/oxygen/**" 
     } 
     baseName = rsuiteOxygenAppletJarName 

     manifest { 
      attributes("Build-By": oxygenUsername, 
       "Specification-Title": "Oxygen World Bank Plugin") 
     } 
     destinationDir = file("src/main/resources/WebContent/oxygen") 

}