2015-04-23 66 views
23

Bisher habe ich folgendes mein build.gradleWie erweitere ich die clead-Aufgabe von gradle, um eine Datei zu löschen?

apply plugin: 'base' 
clean << { 
    delete '${rootDir}/api-library/auto-generated-classes/' 
    println '${rootDir}/api-library/auto-generated-classes/' 
} 

jedoch nicht nur meine Datei nicht gelöscht, aber die print-Anweisung zeigt hinzugefügt haben, dass ${rootDir} wird in das Stammverzeichnis von meinem Projekt nicht umgesetzt wird. Warum wird das nicht funktionieren, welche Konzepte vermisse ich?

Antwort

32

Sie müssen nur doppelte Anführungszeichen verwenden. Löschen Sie auch die << und verwenden Sie stattdessen doFirst, wenn Sie planen, die Löschung während der Ausführung zu tun. So etwas wie das:

clean.doFirst { 
    delete "${rootDir}/api-library/auto-generated-classes/" 
    println "${rootDir}/api-library/auto-generated-classes/" 
} 

Gradle Build-Skripte sind in Groovy DSL geschrieben. In Groovy müssen Sie doppelte Anführungszeichen für die String-Interpolation verwenden (wenn Sie ${} als Platzhalter verwenden). Schauen Sie sich here an.

+1

Nicht sicher darüber. Es löscht die Datei in der * Konfigurations * -Phase, nicht während der Ausführung. – Opal

21

<< ist äquivalent für clean.doLast. doFirst und doLast bestellen die Operationen bei der Ausführung Phase, die selten für Löschvorgänge relevant ist.

In diesem Fall brauchen Sie keine von ihnen. Die saubere Aufgabe von der Basis des Typs ist Delete, so müssen Sie einfach einen Verschluss zu übergeben ihm, was bei Konfiguration Zeit zu sagen, zu löschen, wenn sie ausgeführt wird:

clean { 
    delete 'someFile' 
} 

AS mushfek0001 richtig es weist darauf hin, in

clean { 
    delete "${buildDir}/someFile" 
} 

Sie haben müssen mindestens die Basis-Plugin für diese Anwendung der meisten anderen Plugins zu arbeiten, wie die Java-Plug-Basis entweder anwenden oder erklären: seine Antwort, sollten Sie doppelte Anführungszeichen für variable Interpolation arbeiten verwenden ihre eigene clean Aufgabe des Typs löschen Delete Aufgabe. Der Fehler, den Sie erhalten würden, wenn Sie dies nicht haben, ist eine fehlende clean Methode eins.

apply plugin: 'base' 
+1

'delete '$ {buildDir}/someFile'' wird die Variable für' buildDir' nicht auflösen. Sie müssen '' 'hier verwenden, zum Beispiel' delete "$ buildDir/someFile" ' –

+0

korrigiert den Tippfehler von' '' '' ''. Doppelte Wuotes sind erforderlich für [GStrings] (http://docs.groovy-lang.org/latest/html/api/groovy/lang/GString.html) – Alpar

+0

Aber auf diese Weise ersetzen Sie vollständig das Standardverhalten von sauber. Was ist, wenn er noch weitere Aufgaben hat? – mushfek0001

7

Um die saubere Aufgabe zu erweitern, können Sie

clean.doFirst {} 

oder

clean.doLast {} 

Diese Sie können verwenden, um Ihre eigenen Aktionen in den sauberen Prozess injizieren. Um Dateien und Verzeichnisse zu löschen, können Sie die API "file" verwenden, die keine zusätzlichen Plugins benötigt.

Hier ist ein Beispiel, das sowohl eine Datei und ein Verzeichnis als letzten Schritt in der sauberen Aufgabe löscht:

clean.doLast { 
    file('src/main/someFile.txt').delete() 
    file('src/main/libs').deleteDir() 
} 
Verwandte Themen