在 Gradle 中并行执行
Parallel execution in Gradle
我正在将我的构建从 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 是否有一些正确的方法可以在没有解决方法的情况下并行执行某些操作?
我认为并行执行任务(在同一项目中)充其量只是一个孵化功能(或尚不可用)(see doc)。
但是,在您的情况下,请注意 Gradle 包含一个 Ant Builder。因为您没有尝试 运行 tasks 并行,所以它可能是一个直接的端口。 (Here is a discussion 使用 ant.parallel
。)
为了说明,考虑这个 shell-脚本,wait.sh
:
sleep
echo >> 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 秒,正如我们预期的那样。
我正在将我的构建从 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 是否有一些正确的方法可以在没有解决方法的情况下并行执行某些操作?
我认为并行执行任务(在同一项目中)充其量只是一个孵化功能(或尚不可用)(see doc)。
但是,在您的情况下,请注意 Gradle 包含一个 Ant Builder。因为您没有尝试 运行 tasks 并行,所以它可能是一个直接的端口。 (Here is a discussion 使用 ant.parallel
。)
为了说明,考虑这个 shell-脚本,wait.sh
:
sleep
echo >> 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 秒,正如我们预期的那样。