2014-06-25 77 views
3

我有一個包含多個文件刪除步驟的Gradle腳本。當腳本運行時,指定要刪除的文件可能存在也可能不存在,因此僅添加println輸出是不夠的。我嘗試着與TaskActionListener()一起工作,但似乎這個類只能在任務開始並完成其操作時收聽,而沒有實際返回的操作細節。如何讓Gradle將日誌輸出添加文件刪除?

我注意到,搖籃的Delete任務類型中含有一種叫getTargetFiles()但我不使用這個任務 --rather 方法,這似乎是我要找的,我使用的語法如下內的其他大任務:

delete file("$projectDir/javadoc")

以上是非常方便的什麼我的項目需要(我基本上試圖一個非常大的Ant構建轉換成搖籃,需要把所有的步驟相對一致,而比從頭開始構建它,爲了...許多其他參與者)。

它穿過我的腦海,我可以只使用內置AntBuilder(看螞蟻如何正常輸出什麼它刪除),像這樣:

ant.delete(dir: "$projectDir/javadoc")

但似乎搖籃上殺死輸出這也是!我很樂意運行帶有-i選項的腳本來進行INFO級別的日誌記錄,但即使這樣也不足以說服Gradle記錄刪除消息。只有-d可以做到這一點,但當然我會因信息超載而受到抨擊。

任何人有任何想法?我已經搜索了幾天,但沒有找到一件事情來幫助。

+0

爲什麼不在調用delete之前添加'println'? –

+0

@PeterNiederwieser:使用'println'將只打印預期包含,而不是真正被刪除的文件。如果我告訴腳本刪除不存在的文件,我不希望日誌宣稱它已被刪除。另外,我最終希望將我找到的任何解決方案擴展到其他文件操作(如mkdir和copy)。對所有這些東西使用'println'會爲我的代碼添加大量額外的行。 – CAustin

回答

1

您必須編寫自己的方法。例如:

def delete(Object... paths) { 
    for (file in project.files(paths)) { 
     if (file.exists()) { 
      println "Deleting $file" 
     } 
    } 
    project.delete(paths) 
} 
+0

好的,這就是我已經解決的問題。我希望有某種傾聽者可以使用,但是這可以完成這項工作。感謝你的回答。 – CAustin

+0

有許多不同的偵聽器(例如,請參閱'Gradle#addListener'),但沒有用於純方法調用。 –

相關問題