2016-03-31 17 views
2

Gradle (Son sürümü 2.12 kullanıyorum), type sağlar: Exec parent parent görev, ancak birden çok argümanla nasıl kullanılacağını öğrenemiyorum.Bir program, Gradle görevi aracılığıyla bağımsız değişken argümanlarıyla nasıl çalıştırılır

Mesela ben Postgresql veritabanını

dropdb --if-exists mydbname 

düşmesi gerekir Ama bu çok kombinasyonları denedi

task dropDatabase(type: Exec) { 
    commandLine 'dropdb', '--if-exists', 'mydbname' 
} 

ve bu da

task dropDatabase(type: Exec) { 
    commandLine 'dropdb' 
    args '--if-exists', 'mydbname' 
} 

çalışmaz ancak tüm hatalarla başarısız : çıkış ayarlanmamış veya yanlış argümanlar.

Ama hiç böyle smth çalıştırmak gerekir:

gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres 

Nasıl yapmalı?

+0

hata her zaman "Görev hiçbir çıktı bildirmedi" –

cevap

1

görev

task dropDatabase(type: Exec) { 
    commandLine 'dropdb', '--if-exists', 'mydbname' 
} 

doğrudur. Ben test ederim ve mükemmel çalışıyor. Anlıyorum gibi senin sorunun bu komutla

gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres 

ve daha doğrusu boru | dan onun içinde geliyor.

Etkili bir şekilde, commandLine özelliğinde bir boruyu kullanamazsınız. Çözüm, komutunuzu bir bash tercümanında çalıştırmaktır. gradle tarafından

task myTask(type: Exec) { 
    commandLine "bash" "-c" "gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres" 
} 
Bu çözüm ile

boru bash yorumlayıcı tarafından işlenir değil: Bunun için bash komutunun -c seçeneğini kullanın.

+0

Ve bir soru daha, bir başkasından gelen argümanların nasıl argümanlanabileceğini bilmek olabilir? Belgeler bana göründüğü gibi belirsiz. –

+0

Sanırım, bunun için yeni bir soru açmak daha iyi. –

İlgili konular