2016-03-31 99 views
2

Gradle(我使用最後的版本2.12)提供了類型:Exec父任務,但我找不到如何將它與多個參數一起使用。如何通過任意數量的參數通過Gradle任務運行程序

比如我需要刪除PostgreSQL數據庫

dropdb --if-exists mydbname 

但這不工作

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

,這也

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

我試過很多的組合,但都失敗了有錯誤:輸出沒有設置或錯誤的參數。

但我需要這樣運行平穩:

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

怎麼辦呢?

+0

錯誤始終是「任務沒有聲明任何輸出」 –

回答

1

任務

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

是正確的。我測試它,它完美的作品。據我瞭解你的問題來源於此命令

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

和更精確地從管道|在裏面。

實際上,您不能在commandLine屬性中使用管道。解決方案是在一個bash解釋器中運行你的命令。用於這種用途的-c選項bash命令的:

task myTask(type: Exec) { 
    commandLine "bash" "-c" "gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres" 
} 

這種解決方案的管通過bash的解釋器處理,而不是由gradle這個。

+0

還有一個問題,可能知道,如何從另一個任務傳遞參數?這些文檔在我看來很模糊。 –

+0

我認爲,最好爲此打開一個新問題。 –

相關問題