2016-10-25 1 views
0

Ich habe die folgenden Aufgaben Definitionen.Gradle Zip Aufgabe Up-To-Date auch nach dem sauberen Build

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

und

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

Problem ist, wenn ich ein gradle clean build die generateFile Aufgabe ausgeführt wird laufen, aber die Zip-Datei Aufgabe nicht.

Warum ist das der Fall? Sollte die Bereinigung nicht dazu führen, dass die Eingabe der Zip-Aufgabe einen neuen Lauf auslöst?

+1

warten. Warum läuft generateFile? Du nennst es nicht in 'gradle clean build'! – RaGe

+0

Sorry, createDistro hat auch eine Abhängigkeit: 'jar'. aktualisiert – 75inchpianist

+1

umm 'gradle sauber bauen' noch nicht aufrufen generateFile, es sei denn, wenn Sie explizit aufrufen 'grdle createDistro' – RaGe

Antwort

1

Sie müssen zuerst die Phasen von Gradle verstehen. Denken Sie vor allem daran, dass es CONFIG- und EXECUTION-Phasen gibt. Dies war Ihr vorheriges Problem: Gradle clean erasing my file prior to ZIP task execution

Sie haben den gleichen Fehler in der createDistro gemacht. Wenn Sie die << verwenden, reduzieren Sie die Aufgabe nur auf die doLast, die in der Phase EXECUTION ausgeführt wird. Das bedeutet, dass Ihre Zip-Aufgabe nicht mit dem from-Teil konfiguriert wurde. Also noch einmal die richtigen Definitionen sein sollte:

apply plugin: 'java' 

task generateFile { 
    def file = new File("$buildDir/setclasspath.sh") 
    outputs.file(file) 
    doLast { 
    file.createNewFile() // you need to actually create the file first 
    file.text = "sample" 
    } 
} 

task createDistro(type: Zip, dependsOn: ['jar', 'generateFile']) {  
// this is the configuration of Zip task, do not run it in doLast or '<<' 
from generateFile { 
    fileMode = 0755 
    into 'bin' 
} 
} 

Außerdem als @RaGe in den Kommentaren erwähnt, wird nicht die Aufgabe auszuführen. Sie müssen es in den Aufgabenbaum einstecken.

Aber ich denke, Sie versuchen immer noch, ein Problem zu beheben, das Sie möglicherweise nicht beheben müssen. Von dem, was Sie tun, könnten Sie tatsächlich besser dran mit dem gradle distribution Plugin sein.

+0

danke für die Hilfe, ich denke, ich bekomme es jetzt. Ich habe dieses Beispiel genommen, um zwei und zwei zusammenzustellen. – 75inchpianist

Verwandte Themen