2017-07-09 32 views
0

從項目屬性或可以更改的變量中獲取值是一個好主意。例如,Gradle:具有可變輸入的任務

task mergeProperties { 

    def propertiesFile = new File(project.ext.file1) 
    def propertiesFile2 = new File(project.ext.file2) 
    def outputFile = new File(project.ext.file3) 

    inputs.files propertiesFile, propertiesFile2 
    outputs.file outputFile 

    doLast { 
      // merge properties 
    } 
} 

該方法可用於任何合併兩個文件,並通過改變property.ext屬性寫入任何文件。這是一個好主意嗎?在這種情況下,UP_TO_DATE檢查如何工作?

+0

至於任何其他任務:通過檢查自上次執行以來輸入(即兩個屬性文件的內容)和輸出(即outputFile的內容)是否發生了變化。 –

回答

1

答案很簡單:沒有

只要你,我覺得這是一個壞主意,讓屬性文件或命令行的值決定不提供,需要上述行爲的示例用例或場景在執行邏輯上。這是什麼代碼(在你的build.gradle)應該是關於。

此外,doLast(和doFirst)倒閉是次要的準備和清理工作,主要任務行動應該由@TaskActioncustom task type定義來定義:

class Merge extends DefaultTask { 
    @TaskAction 
    def merge() { 
     // merge properties 
    } 
} 

task mergeProperties(type: Merge) { 
    inputs.files 'myInputFile1', 'myInputFile2' 
    outputs.file 'myOutputFile' 
} 

現在,特殊情況下(我可以現在不想象)可以使用項目屬性來定義輸入和輸出文件。