Gradle 中的并行执行

问题描述 投票:0回答:1

我正在将构建从 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 是否有一些正确的方法可以并行执行某些操作而无需解决方法?

java gradle ant
1个回答
2
投票

并行执行任务(在同一项目中)一直是一个孵化功能(或尚未可用),直到 Gradle 5.0 才得到推广。

但是,在您的情况下,请注意 Gradle 包含一个 Ant Builder。因为您不尝试并行运行tasks,所以它可能是一个直接端口。 (这里是使用 ant.parallel

 的讨论
。)

为了说明这一点,请考虑这个 shell 脚本,

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 秒,正如我们预期的那样。

© www.soinside.com 2019 - 2024. All rights reserved.