2016-09-02 4 views
2

Я проникаю мою сборку из Ant в Gradle и пытается переписать этот блок кода:Параллельное выполнение в 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 правильный способ выполнить что-то параллельно без обходных решений?

+0

См. Http://stackoverflow.com/questions/38905329/asynchronous-gradle-copy-task/38915824 –

ответ

0

Я считаю, что выполнение задач (в том же проекте) параллельно в лучшем случае является инкубационной функцией (или еще недоступной) (see doc).

Однако в вашем случае обратите внимание на то, что Gradle содержит Ant Builder. Поскольку вы не пытаетесь запустить задачи параллельно, это может быть прямой порт. (. Here is a discussion использования 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 секунд, как мы и ожидали.

Смежные вопросы