2017-07-26 3 views
0

Wir haben ein Großprojekt, das cobol zu Java kompiliert. Dies wird über eine Batch-Datei geschieht, die mit einem Parameter (Dateinamen) von einer gradle Aufgabe aufgerufen wird:Gradle parallel exec commandline

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

Derzeit iterieren wir durch eine Liste von Dateien, jede Datei nach der anderen zusammengestellt:

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

Gibt es in Gradle eine Möglichkeit, diese Aufgabe in einer Art ... einem Thread-Pool auszuführen? Zum Beispiel 10 Threads, die jeweils eine andere Datei kompilieren? Bis die Liste leer ist?

Vielen Dank im Voraus!

Antwort

0

Aufgaben werden sequenziell ausgeführt und sollten niemals explizit von Ihrem Code aufgerufen werden. Es gibt nichts hindert Sie daran project.exec(Closure) in einem doLast { }

Eg läuft:

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

mache ich so etwas wie „maxParallelForks“ oder etwas setzen müssen? –

+0

Ich persönlich mag 'parallelStream()' nicht, da ich keine Kontrolle über den Thread-Pool habe. Sie würden wahrscheinlich [Executors.newFixedThreadPool (int)] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool (int)) und ein [ CountDownLatch] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html), wenn Sie die volle Kontrolle haben wollten –

Verwandte Themen