2016-03-31 2 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インタプリタでコマンドを実行することです。 Gradleのことで

task myTask(type: Exec) { 
    commandLine "bash" "-c" "gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres" 
} 
このソリューションで

パイプはbashのインタプリタによって処理されていない。このためbashコマンドの-cオプションを使用します。

+0

さらに1つの質問があります。私には見えるようにドキュメントが曖昧です。 –

+0

私はこれについて新しい質問をすることをお勧めします。 –

関連する問題