2017-07-26 6 views
0

私たちはcobolをjavaにコンパイルするgradleプロジェクトを持っています。これは、Gradleのタスクからのパラメータ(ファイル名)と呼ばれるバッチファイルを経由して起こっている:gradle parallel execコマンドライン

現在
def compileSingleFile(String cblFileName) { 
    exec { 
     commandLine "${projectDir}/compileFile.bat" 
     args "${cblFileName}" 
     ignoreExitValue = true 
    } 
} 

、我々はすべてのファイルを別の後にコンパイルされ、ファイルのリストを反復:

task ciBuild { 
    dependsOn collectFiles 
    doLast { 
     cobolfiles.parallelStream().each {file -> 
      if(file.toUpperCase().endsWith("CBL")) { 
       compileSingleFile(file) 
      } 
     } 
    } 
} 

このタスクを一種のスレッドプールで実行する可能性はありますか?例えば、それぞれが別のファイルをコンパイルする10のスレッド?リストが空になるまで?

ありがとうございます!

答えて

0

タスクは順番に実行されるため、コードによって明示的に呼び出されるべきではありません。

task ciBuild { 
    def cobolFiles = fileTree("src/main/cobol").matching { 
     include "**/*.CBL" 
    } 
    dependsOn collectFiles 
    inputs.files cobolFiles 
    outputs.dir 'path/to/outputDir' 
    doLast { 
     cobolFiles.files.parallelStream().each { File file -> 
      exec { 
       commandLine "${projectDir}/compileFile.bat" 
       args file.absolutePath 
       ignoreExitValue = true 
      } 
     } 
    } 
} 
+0

私は「maxParallelForks」か何かのようなものを設定する必要があります:doLast { }

例:中project.exec(Closure)を実行しているからあなたを止めるものは何もありませんか? –

+0

スレッドプールを制御できないので、私は個人的に 'parallelStream()'を好まないのです。 [Executors.newFixedThreadPool(int)](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int))と[ CountDownLatch](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html)完全に制御したい場合 –

関連する問題