2017-02-14 1 views
1

私はGradleのタスク(例えばディレクトリ内のすべてのファイルを印刷します。)で、コマンドラインからいくつかのコマンドを実行したいで動作しない:それは仕事だGradleでは、タスクの種類:Execの - コマンドラインonLast

task dir(type: Exec) { 
    def adbCommand = ["dir", "*.*"] 
    commandLine adbCommand 
    standardOutput = new ByteArrayOutputStream() 
    doLast { 
    println ("result = " + standardOutput) 
    } 
} 

を。 OK。私はそれが動作していないonLastセクションの上に置いたとき、しかし:

task dir(type: Exec) { 
    doLast { 
    def adbCommand = ["dir", "*.*"] 
    commandLine adbCommand 
    standardOutput = new ByteArrayOutputStream() 
    println ("result = " + standardOutput) 
    } 
} 

私はエラーを取得する:

FAILURE:例外で失敗しましたビルドを。

実行は、タスクに失敗しました ':アプリ:DIR' 何が悪かったのか

  • execCommand == null!

+0

[Gradle、commandLine 'cmd'、 '/ c'、 'echo doLast!'何もしない](http://stackoverflow.com/questions/42055620/gradle-commandline-cmd-c-echo-dolast-does-nothing) – sm4

答えて

0

理由は、そうでない場合は、あなたのタスクが設定され、失敗しないであろう、Execのタスクは、ビルドの構成フェーズの間に設定する必要があり、実際にはあります。

最初の例では、コンフィグレーションフェーズで設定が行われるため、すべてが機能します。 2番目の例では、タスクがまだ実行された直後に、doLastクロージャ内のタスクを設定しようとしています。あなたが本当にdoLastで何かを実行する必要がある場合

、あなたは特別なタスク作成せずに、このようなものを使用することができます。ここでは

task someTaskName { 
    doLast { 
     exec { 
      commandLine adbCommand 
     } 
    } 
} 

は、いくつかのコマンドを実行するために使用exec -specificationであるが、それはで構成され、実行されます同時。