2015-04-23 9 views
23

tej pory Dodałem następujące do mojego build.gradleJak przedłużyć czyste zadanie gradle, aby usunąć plik?

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

Jednak nie tylko nie jest mój plik został usunięty, ale pokazuje, że instrukcja print ${rootDir} nie jest konwertowana do katalogu głównego mojego projektu. Dlaczego to nie zadziała, jakich pojęć brakuje?

Odpowiedz

32

Wystarczy użyć podwójnego cudzysłowu. Również, jeśli chcesz planować usunięcie podczas wykonywania, upuść << i użyj doFirst. Coś takiego:

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

Skrypty do budowy Gradle napisane są w Groovy DSL. W Groovy musisz użyć podwójnych cudzysłowów do interpolacji napisów (gdy używasz ${} jako symboli zastępczych). Spójrz na here.

+1

nie wiesz o tym. Będzie usuwać plik w fazie * konfiguracji *, a nie podczas wykonywania. – Opal

21

<< jest odpowiednikiem dla clean.doLast. doFirst i doLast zamawiają operacje na etapie wykonawczym fazy, , które rzadko mają znaczenie dla operacji usuwania.

W takim przypadku nie potrzebujesz żadnego z nich. Czyste zadanie z bazy jest typu Delete, więc wystarczy przekazać mu zamknięcie, aby poinformować go o konfiguracji czasu co usunąć, gdy wykonuje on:

clean { 
    delete 'someFile' 
} 

AS mushfek0001 słusznie go w jego odpowiedź, należy użyć cudzysłowów dla zmiennej interpolacja do pracy:

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

trzeba mieć przynajmniej wtyczki bazowa stosowana dla tej pracy, większość innych wtyczek, takich jak wtyczki Java albo zastosować bazę lub zadeklarować własne zadanie clean typu usuń zadanie Delete. Błąd, który można uzyskać, jeśli tego nie zrobiłeś, to brakująca metoda numer jeden.

apply plugin: 'base' 
+1

'delete '$ {buildDir}/someFile'' nie rozwiąże zmiennej dla' buildDir'. Musisz użyć '" tutaj, np. 'Delete" $ buildDir/someFile "' –

+0

poprawiono literówkę '' '' ''. Podwójne wuotes są wymagane dla [GStrings] (http://docs.groovy-lang.org/latest/html/api/groovy/lang/GString.html) – Alpar

+0

Ale w ten sposób całkowicie zastąpisz domyślne zachowanie czystego. A co, jeśli ma do niej więcej zadań? – mushfek0001

7

W celu przedłużenia czyste zadanie, można użyć

clean.doFirst {} 

lub

clean.doLast {} 

To pozwoli Ci wstrzyknąć własne akcje do czystego procesu. W celu usunięcia plików i katalogów można użyć API "plik", który nie wymaga żadnych dodatkowych wtyczek.

Oto przykład, który usunie zarówno plik i katalog jako ostatni krok w czystej zadania:

clean.doLast { 
    file('src/main/someFile.txt').delete() 
    file('src/main/libs').deleteDir() 
} 
Powiązane problemy