2015-08-25 25 views
5

को समाप्त करने के लिए प्रतीक्षा करें, मैं धीरे-धीरे से एक स्क्रिप्ट स्क्रिप्ट चला रहा हूं, मुद्दा यह है कि खोल स्क्रिप्ट कुछ पूर्व शर्त जारी कर रही है जिसे मुझे धीरे-धीरे जारी रखने से पहले चलाने की आवश्यकता है।ग्रैडल से खोल स्क्रिप्ट कैसे चलाएं और

मैंने कोशिश की निम्नलिखित लेकिन जैसे Gradle खोल स्क्रिप्ट

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

ने Google की कोशिश की? https://fbflex.wordpress.com/2013/03/14/gradle-madness-execwait-a-task-that-waits-for-commandline-calls-to-be-ready/ – Marged

+1

हाँ, मैंने कुछ खोजने की कोशिश की कि ग्रैडल कोड कोड एक्सटेंशन के बिना समर्थन करता है, मैंने सोचा कि शायद मुझे कुछ ग्रैडल कमांड याद आ रहा है जो ExecWait करता है। लिंक के लिए धन्यवाद – 15412s

उत्तर

1

आपकी समस्या आपके println बयान क्रियान्वित कर रहे हैं जब Gradle build.gradle फ़ाइल को पार्स करता है, नहीं जब वह निष्पादित के लिए एक और बच्चे की प्रक्रिया खोल रहा है लगता है काम।

के रूप में चीजों को स्पष्ट कर देना इस प्रकार आप doFirst और doLast करने के लिए अपने println बयान बढ़ना चाहिए:

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

मुझे विश्वास है, Gradle वास्तव में, स्क्रिप्ट कुछ और करने से पहले खत्म करने के लिए के लिए इंतजार कर रहा है तो आप की जरूरत नहीं है इसे प्रतीक्षा करने के लिए कुछ खास करें।

ग्रेडल हमेशा बाल प्रक्रिया में आपकी शेल स्क्रिप्ट शुरू करेगा।

संबंधित मुद्दे