我正在把我的构建从Ant迁移到Gradle,并试图重写这个代码块:
<parallel>
<exec executable="npm">
<arg value="run"/>
<arg value="dev"/>
</exec>
<java className="foo.bar.Launcher" fork="true">
<classpath>
<path refid="project.classpath"/>
</classpath>
</java>
</parallel>
但是我没有发现类似于并行标记的东西,只有Java并发性的解决方案或其他一些变通方法。Gradle是否有一些适当的方法来并行执行一些没有变通的东西?
我相信并行执行任务(在同一个项目中)充其量是一个酝酿特性(或者还没有可用)(参见文档)。
但是,在你的例子中,请注意Gradle包含一个Ant Builder。因为您没有尝试并行运行任务,所以它可能是一个直接的端口。(这里是关于使用ant.parallel
的讨论)
wait.sh
:
sleep $1
echo $2 >> wait.log
和以下任务:
task doItSerial << {
ant.exec(executable: "${projectDir}/wait.sh") {
arg(value: 10)
arg(value: "TRACER A")
}
ant.exec(executable: "${projectDir}/wait.sh") {
arg(value: 10)
arg(value: "TRACER B")
}
}
task doItParallel << {
ant.parallel {
ant.exec(executable: "${projectDir}/wait.sh") {
arg(value: 10)
arg(value: "TRACER A")
}
ant.exec(executable: "${projectDir}/wait.sh") {
arg(value: 10)
arg(value: "TRACER B")
}
}
}
在我的实验中,doItSerial
需要20秒;doItParallel
需要10秒,如我们所料。