2015-08-25 11 views
5

Ich führe ein Shell-Skript von Gradle aus, das Problem ist, dass das Shell-Skript einige Voraussetzungen ausführt, die ich ausführen muss, bevor Gradle fortgesetzt wird.wie man Shell-Skript von Gradle aus ausführt und darauf wartet, dass es beendet wird

Ich habe versucht, die folgenden aber scheint wie gradle ein anderes Kind Prozess für das Shell-Skript

sleep.sh 
echo 'hi1' 
sleep 1 
echo 'hi2' 
sleep 10 
echo 'bye' 


Gradle: 
task hello3(type: Exec) { 
println 'start gradle....' 
    commandLine 'sh','sleep.sh' 
println 'end gradle....' 
} 



Result: 
start gradle.... 
end gradle.... 
:hello3 
hi1 
hi2 
bye 
+2

versuchte google? https://fbflex.wordpress.com/2013/03/14/graddle-madness-execwait-a-task-that-warts-for-commandline-calls-to-be-ready/ – Marged

+1

Ja, ich habe versucht, etwas zu finden Dass Gradle ohne Codeerweiterung unterstützt, dachte ich, dass mir vielleicht ein Gradle-Befehl fehlen würde, der ExecWait ausführt. Danke für den Link – 15412s

Antwort

1

Ihr Problem ist Ihr die println-Anweisungen ausgeführt eröffnet werden, wenn Gradle die build.gradle Datei analysiert, nicht, wenn er ausgeführt wird die Aufgabe.

Sie sollten Ihre println Aussagen zu doFirst und doLast bewegen wie folgt Dinge klar zu machen:

task hello3(type: Exec) { 
    doFirst { 
    println 'start gradle....' 
    } 
    commandLine 'sh','sleep.sh' 
    doLast { 
    println 'end gradle....' 
    } 
} 

Ich glaube, Gradle wartet tatsächlich für das Skript vor beenden etwas anderes zu tun, so dass Sie nicht brauchen, mach etwas Besonderes, damit es warten kann.

Gradle wird immer Ihr Shell-Skript in einem untergeordneten Prozess starten.

Verwandte Themen