2016-02-22 14 views
15

2 ayrı uygulama (bir projede) gerektiren 2 ayrı uygulama (sencha cmd) var. Her iki uygulama için de yapılabilecek bir not dizisi oluşturmam istendi.Gradle - görevden çoklu komutları çalıştır

Bir uygulama oluşturan bir görev oluşturdum, ancak 2. uygulamayı oluşturmak için aynı görevi kullanarak sorun yaşıyorum.

Bu defa ne var:

task senchaCmdBuild (type: Exec) { 
    workingDir 'src/main/app/MYAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 

ve bu gayet iyi çalışıyor.

workingDir 'src/main/app/MYOTHERAPP' 
commandLine 'cmd', 'c', 'sencha app build' 

İlk komut göz ardı edilir ve sadece ikinci komut yürütür:

Yukarıdaki göreve aşağıdaki 2 satır eklemek

.

Yine de her iki komutu da tek bir görevle çalıştırabilir miyim?

+1

oluşturmak iki 'Exec oluşturmakgradle yöntemleri kullanabilir akış, sadece işlem üzerinde yürütülecek amacıyla doLast exec yöntemi koymak gerekir görevleri ve bunları hem ana görevden çalıştırın. – RaGe

+1

Birden çok şeyi yürütmek için commandLine üzerinde & amp; kaldırabileceğiniz bir çözüm olması gerektiğini hissediyorum. Alternatif olarak, her ikisini de yapan bir kabuk betiğini çağırmanız yeterlidir. –

cevap

28

Öbek üzerinde görev türlerini bildirmek için ikinci yolu kullanabilirsiniz.

task senchaCmdBuild { 
    doLast { 
    exec { 
     workingDir 'src/main/app/MYAPP' 
     commandLine 'cmd', 'c', 'sencha app build' 
    } 
    exec { 
     workingDir 'src/main/app/MYOTHERAPP' 
     commandLine 'cmd', 'c', 'sencha app build' 
    } 
    } 
} 

için

+1

Bunu bir eklenti içinde yapıyorsanız, uygun DSL yöntemlerini çağırmak için 'project.exec' (yanı sıra" project.task ") kullanmanız gerekir. – elias

+1

Çok teşekkürler, bunu günlerce araştırıyorum. Drazul, çok süpersiniz –

+0

İlk komut başarısız olursa sadece ikinci komutu çalıştırmak için bir yol var mı? –

3

Exec türünde görev için birden çok komutu yapılandırmak (çalıştırmak) imkansızdır. commandLine sadece bir belirleyici - sonuncusu kazanır. Birden çok komut çalıştırmanız gerekiyorsa, en iyi fikir, yorumda @RaGe olarak önerilen birden fazla görevi uygulamak veya özel bir görev yazmak ve groovy'un doğal mekanizmalarını kullanmaktır - execute yöntemi.

1

Ayrıca yerine fiktif görevleri

task senchaBuild() { 
doLast { 
    senchaBuild_steps() 
} 
} 

void senchaBuild_steps() { 
exec { 
    workingDir 'src/main/app/MYAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 
exec { 
    workingDir 'src/main/app/MYOTHERAPP' 
    commandLine 'cmd', 'c', 'sencha app build' 
} 
} 
+0

harika, bu beni hayatı (build :)) kolaylaştırıyor! – user3385242