2015-12-12 5 views
12

başka görevi gerçekleştirmek yerine başarısız olup istiyorum:Gradle exec görev sıfır olmayan çıkış değeri döndürür ve yapı başarısız ama oldukça varsayılan şekilde ayarlanmış bir exec görevi, böyle bir şey var

task myTask(type:Exec) { 

    workingDir '.' 

    commandLine './myscript.sh' 

    doLast { 
     if(execResult == 0) { 
      //one thing 
     } else { 
      //another thing 
     } 
    } 
} 

Ancak ne yazık ki, betik tarafından bir hata oluştuğunda doLast bloğunu hiçbir zaman çalıştırmaz. Bunun yerine bunu atlar ve tüm yapıyı

Yürütme işlemi başarısız oldu: 'proje: myTask'. Bana yararsız sıfır olmayan çıkış değeri 1"

ile tamamladı süreci 'komutu' ./myscript.sh ''. sıfırdan farklı çıkış değeri ile bitirme myscript.sh bütün fikir Öyle ise daha sonra buna cevap olarak bazı kodları çalıştırabilir.Yapılamamak, ancak sonucu yakalayıp yanıt vermek için ne yapmam gerekiyor? Yanıtınız için teşekkürler!

+0

gradle dsl basit harika senaryo, sadece görev – AdamSkywalker

cevap

21

TL; DR - Use ignoreExitValue = true

Elli yılı kapsayan belgeyi okuduğumda, nihayet yanlış olan varsayılan bir ignoreExitValue özelliği olduğunu gördüm. Daha sonra kendi görevlerinizi doLast bloğunda gerçekleştirebilirsiniz.

task myTask(type:Exec) { 

    workingDir '.' 

    commandLine './myscript.sh' 

    ignoreExitValue true 

    doLast { 
     if(execResult == 0) { 
      //one thing 
     } else { 
      //another thing 
     } 
    } 
} 
+0

bir deneyin catch bloğu yazabilirsiniz olan bir şey execResult mı? Dokümanlara baktım ve bulamadım. – Trejkaz

+0

execResult uygulamasının oluşturduğum bir değişken olduğundan ve görev sonucunu ona atadığından eminim. Ama bu neredeyse iki yıl önceydi, o yüzden hatırlamıyorum. –

+1

Sanırım bunu çözdüm. Exec bir getExecResult() sahip, ancak JavaExec yok. JavaExec kullanıyoruz, bu yüzden kullanamıyoruz. :( – Trejkaz