2016-10-24 2 views
0

Ich habe die folgende einfache Aufgabe in meinem Build:Gradle reinigen meine Datei vor dem ZIP-Task-Ausführung Löschen

task generateFile << { 
    def file = new File("$buildDir/setclasspath.sh") 
    file.text = "sample" 

    outputs.file(file) 
} 

task createDistro(type: Zip, dependsOn: ['copyDependencies','packageEnvironments','jar', 'generateFile']) <<{  
from generateClasspathScript { 
    fileMode = 0755 
    into 'bin' 
} 
} 

Als ich gradle clean build betreibe ich die folgende Ausgabe sehen:

Cannot call TaskOutputs.file(Object) on task ':generateFile' after task has started execution. Check the configuration of task ':generateFile' as you may have misused '<<' at task declaration 

Wie kann ich Erklären Sie die Ausgabe der Task-Datei-Erstellung als eine Eingabe für die Zip-Aufgabe, während Sie auch sicherstellen, dass sie in der Ausführungsphase passieren?

Wenn ich die < < weglasse, löscht die saubere Aufgabe die generierte Datei, bevor die ZIP es verwenden kann. Wenn ich sie behalte, bekomme ich den obigen Fehler.

+0

Die print-Anweisung in der Konfigurationsphase der Aufgabe ist. Verwenden Sie "<<", um diesen Block in die Ausführungsphase der Aufgabe zu stellen. –

+0

Ich habe Probleme, ich habe versucht, << hinzuzufügen, aber dann bekomme ich ein Problem sagen, dass ich es missbraucht, weil ich outputs.file (blah) erklärte, nachdem die Ausführungsphase begonnen hat. Aktualisieren der Frage – 75inchpianist

+0

Mögliche Duplikate von [Wann zu verwenden "<<" in Gradle Aufgabe] (http://stackoverflow.com/questions/25071462/when-to-use-in-gradle-task) –

Antwort

2

Es ist das Gegenteil wie das, was in den Kommentaren vorgeschlagen wird. Sie versuchen, die Ausgänge in der Ausführungsphase zu setzen. Der richtige Weg zu tun, was Sie wahrscheinlich ist zum Beispiel zu tun versuchen:

task generateFile { 
    def file = new File("$buildDir/setclasspath.sh") 
    outputs.file(file) 
    doLast { 
     file.text = "sample" 
    } 
} 
+0

Genau! Viele Menschen sind verwirrt über die Gradle-Phasen. – Crazyjavahacking

+0

danke! das macht Sinn, ich habe definitiv nicht verstanden, dass doLast während der Ausführungsphase ausführt. Aber jetzt habe ich das Problem von createDistro übersprungen als Up-To-Date auch während eines sauberen Build. Sollte die from-Klausel in dieser Aufgabe nicht die andere als Eingabe markieren, die sie verändert? – 75inchpianist

Verwandte Themen