2016-07-13 3 views
0

Ich habe gradle Aufgabe:Wie Code aus gradle Task-Konfiguration Schritt bewegen Ausführung Aufgabe

task immportMyData(type: Exec) { 
def dumnp= "" 

new File("${System.env.MY_HOME}/export").eachDir() { dir -> 
    dumpName = dir.getName() 
} 

workingDir "${System.env.MY_HOME}/../test" 
standardOutput = new ByteArrayOutputStream() 

ext.output = { 
    return standardOutput.toString() 
} 
} 

...

Wie ich seine Aufgabe Konfiguration verstehen, weil sein jedes Mal ausgeführt.

Also, gibt es eine Möglichkeit, wie Code aus Feuerskizon zu Task-Body (Ausführungsschritt) verschoben werden? Manche denken so.

task immportMyData(type: Exec) << { 
    //code from configuration 
} 

another worlds 

    task immportMyData(type: Exec) **<<** { 
def dumnp= "" 

new File("${System.env.MY_HOME}/export").eachDir() { dir -> 
    dumpName = dir.getName() 
} 

workingDir "${System.env.MY_HOME}/../test" 
standardOutput = new ByteArrayOutputStream() 

ext.output = { 
    return standardOutput.toString() 
} 
} 

Ich habe gradle docs geprüft, aber kein Glück

+0

Was genau möchten Sie verschieben? Es scheint, dass die Aufgabe gut konfiguriert ist. – Opal

+0

Yeap seine Werke, aber ich möchte es nicht jedes Mal ausführen. Also möchte ich es zur Aufgabe bringen. Etwas wie dieses: http://pastebin.com/raw/iuvTStCK –

+0

Es wird nicht so funktionieren. Die Konfiguration wird jedes Mal durchgeführt, die Aufgabe wird jedoch nur einmal ausgeführt. – Opal

Antwort

0

Ich glaube, Sie falsch verstanden haben, was die Exec Aufgabe tut. Exec ist zum Ausführen eines externen Befehls, d.h. eines anderen Prozesses. Daher müssen Sie die Eigenschaft commandLine angeben, damit zur Ausführungszeit alles ausgeführt werden kann. Weitere Informationen finden Sie unter here.

Es sieht so aus, als ob Sie tatsächlich versuchen, einen Code während der Ausführung der Task auszuführen, was mit einer regulären (nicht Exec) Task erreicht werden kann. Etwas wie dieses:

task importMyData { 
    //Code to configure task 

    doLast { 
     //Code to run at execution time, maybe this?: 
     new File("${System.env.MY_HOME}/export").eachDir() { dir -> 
      ext.dump = dir.getName() 
     } 
    } 
} 

Hoffe, dass dies hilft.

Verwandte Themen