On 11/04/2013, at 11:36 PM, Szczepan Faber <szczepan.fa...@gradleware.com> 
wrote:

> Hey guys,
> 
> Today, I had a long chat with PeterN about our current strategy for command 
> line order in a parallel build. Consider this:
> 
> gradle taskA taskB --parallel
> 
> 1. We can let taskA graph and taskB graph execute in parallel. That's how 
> Gradle 1.5 works and it feels pretty natural to me. It breaks certain 'clean 
> build' scenarios (e.g. 
> http://forums.gradle.org/gradle/topics/problem_with_clean_in_parallel_mode)
> 2. We can let taskA graph execute in parallel first. Then we let the taskB 
> graph execute in parallel. This approach can be considered more consistent 
> with the single threaded execution.  
> 
> What's the right way?

Given what we have right now, it has to be that these can't be run in parallel 
(option 2). That is, 'taskB' must-run-after 'taskA'. My reasoning for this is 
that this is the only execution order control mechanism outside of 
dependencies, so this seems the safest option.

If I run: ./gradlew build release 

I expect that things are built and tested before any releasing occurs. Release 
tasks rarely have hard dependencies on test tasks.

It's far less clear to me one there is richer information available. If there 
are all kinds of mustRunBefore etc. relationships defined between tasks, then 
you could make an argument that Gradle should parallelise as much as possible 
and just respect the relationships as defined. My gut feel though is that task 
order on the command line should _still_ imply a must-run-after relationship 
though as it's more predictable and easier to understand.

-- 
Luke Daley
Principal Engineer, Gradleware 
http://gradleware.com

Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: 
http://www.gradlesummit.com


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to