2015-08-25 26 views
5

Używam skryptu powłoki z gradle, problem polega na tym, że skrypt powłoki uruchamia pewne wymagania wstępne, które należy uruchomić przed kontynuacją gradle.jak uruchomić skrypt powłoki z Gradle i czekać na zakończenie?

Próbowałem następujących ale wydaje się Gradle jest otwarcie kolejnego procesu potomnego dla skryptu powłoki

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

wypróbowałeś google? https://fbflex.wordpress.com/2013/03/14/gradle-madness-execwait-a-task-that-waits-for-commandline-calls-to-be-ready/ – Marged

+1

Tak, próbowałem znaleźć coś że Gradle obsługuje bez dodawania kodu, myślałem, że może brakuje mi jakiegoś polecenia Gradle, które wykonuje ExecWait. dzięki za link – 15412s

Odpowiedz

1

Twój problem jest, że twoje wypowiedzi są wykonywane println gdy Gradle analizuje plik build.gradle, gdy nie wykonuje zadanie.

Należy przenieść println oświadczeń doFirst i doLast następująco Żeby było jasne:

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

wierzę, Gradle faktycznie czeka na scenariusz do końca zanim cokolwiek innego, więc nie trzeba rób coś wyjątkowego, aby czekać.

Gradle zawsze uruchamia skrypt powłoki w procesie potomnym.