On 03/08/2013, at 11:11 AM, Luke Daley <luke.da...@gradle.biz> wrote:
> > > On 03/08/2013, at 1:59, Adam Murdoch <adam.murd...@gradleware.com> wrote: > >> >> On 03/08/2013, at 10:32 AM, Luke Daley <luke.da...@gradleware.com> wrote: >> >>> Hi, >>> >>> It just dawned on me that shouldRunAfter() will allow us to provide a >>> better feedback experience for multi project builds. This is not a new >>> idea, but I'd not considered it for this purpose. >>> >>> I am frequently frustrated when working on multi project builds when an >>> upstream module successfully compiles, but fails a quality check. >>> >>> Say A depends on B. When I `build` my project, this happens… >>> >>> 1. compile B >>> 2. compile & check A >>> 3. check B >>> >>> If B has a checkstyle issue or a defect, I'd like to know this before >>> trying to compile A. Otherwise, I now have to change B and then recompile A. >> >> Right. >> >> Compilation of A is also a kind of quality check of B, so the order probably >> depends on the relative time it takes to compile vs the other quality >> checks. If compilation is fast and the other checks are slow, then you >> probably want to compile everything before you do the slow checks. What this >> means, I think, is that we should schedule verifications from fastest to >> slowest, regardless of where they live and regardless of whether its >> compiling or doing static analysis or what. > > That probably makes sense as a general rule. > > With a stronger component model we could push this further though by > weighting based on whether the task is a quality check of an upstream > component. So if two tasks are otherwise 'equal', then prefer the quality checks of a component over usages of that component? > >> >> Another solution to the above problem is to make compilation incremental wrt >> the API of its dependencies. Often, a fix for quality check failure in B >> does not affect its API (eg unused import or some missing javadoc or missing >> test coverage or whatever) so if A has already been compiled we can skip its >> compilation, even if the implementation of B has changed. This also helps >> for many other situations. > > These two things are complimentary. Absolutely. -- Adam Murdoch Gradle Co-founder http://www.gradle.org VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting http://www.gradleware.com