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!
mache ich so etwas wie „maxParallelForks“ oder etwas setzen müssen? –
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 –