如何在并行模式下在Gradle中运行两个方法?

时间:2017-11-13 08:06:01

标签: gradle groovy

我有一个Gradle任务,它调用两个方法。这些方法是相互独立的,所以我想让它们并行启动。实现这一目标的最佳方法是什么?

示例:

task cucumber(dependsOn: 'testClasses') { 
    doLast {
        // ...
        // I want to call the next 2 methods in parallel
        runSequentialTests(testEnvironment, tags) 
        runParallelTests(testEnvironment, tags) 
    }
}

def runSequentialTests(testEnvironment, tags) {
    // execute cucumber tests via javaexec
}

def runParallelTests(testEnvironment, tags) {
    // execute cucumber tests via exec sh script for each feature file (parallelism is done via GParsPool.withPool(5) {...}
}

2 个答案:

答案 0 :(得分:1)

值得研究groovy并行系统库gpars

GParsPool.withPool {
    GParsPool.executeAsyncAndWait({runSequentialTests(testEnvironment, tags)}, {runParallelTests(testEnvironment, tags)})
}

或者可以创建一个@ParallelizableTask

但我不确定你使用的是什么版本的gradle。并行是/是一个孵化功能。

并且需要使用--parallel运行构建,如果它们之间没有依赖关系,Gradle应该独立运行它们。

或者,您可以在gradle.properties

中指定一个媒体资源

C:\Users\<user>\.gradle\gradle.properties org.gradle.parallel=true

答案 1 :(得分:0)

我使用了GPars的异步调用:http://www.gpars.org/webapp/guide/#_asynchronous_invocations

我得到了它的工作。感谢

GParsPool.withPool {
    GParsPool.executeAsyncAndWait({runSequentialTests(testEnvironment, tags)}, {runParallelTests(testEnvironment, tags)})
}