Я пытаюсь разбить задачу муравья на параллельные задачи.Например, JRAntCompileTask использует путь для предоставления набора файлов для компиляции
task compileJasperReports {
ext.resDir = file("$buildDir/compiled-reports")
ext.tmpDir = file("$buildDir/tmp")
doLast {
resDir.mkdirs()
tmpDir.mkdirs()
ant {
taskdef(name: 'jrc',
classname: 'net.sf.jasperreports.ant.JRAntCompileTask',
classpath: configurations.jasperreports.asPath
)
jrc(srcdir: 'reports', destdir: resDir, tempdir: tmpDir, keepjava: 'false', xmlvalidation: 'true') {
classpath(path: configurations.reports.asPath)
include(name: '**/*.jrxml')
}
}
}
}
Итак, я разбил путь на равные множества.
task compileJasperReports {
dependsOn ':ReportsBase:jar'
ext.resDir = file("$buildDir/compiled-reports")
ext.tmpDir = file("$buildDir/tmp")
doLast
{
resDir.mkdirs()
tmpDir.mkdirs()
ant {
String[] files = fileset(dir: 'reports', {
include(name: '**/*.jrxml')
}).getDirectoryScanner(project).includedFiles
int tasks = 4
int partsize = (files.size() + tasks - 1).intdiv(tasks)
def parts = []
for (int task in 0..<tasks) {
def range = new IntRange(false, partsize * task, Math.min(partsize * (task + 1), files.size()))
println "### task: $task ${range.from}..${range.to}"
Path part = path {filelist(dir: 'reports', files: files[range].join(','))}
parts.add(part)
}
taskdef(name: 'jrc',
classname: 'net.sf.jasperreports.ant.JRAntCompileTask',
classpath: configurations.jasperreports.asPath)
parallel(threadsPerProcessor: 2) {
for (Path part in parts) {
jrc(srcdir: part, destdir: resDir, tempdir: tmpDir, keepjava: 'false', xmlvalidation: 'true') {
classpath(path: configurations.reports.asPath)
}
}
}
}
}
}
Но ничего не произошло.При ведении журнала --debug я вижу много сообщений
[ant:jrc] file.jrxml omitted as file.jasper is up to date.
Что я делаю не так?Есть ли лучший способ проскользнуть путь?