> From: ja...@takari.io
> Subject: Re: incremental compiler questions
> Date: Sat, 10 Jan 2015 05:33:21 -0500
> To: dev@maven.apache.org
> 
> 
> On Jan 10, 2015, at 3:16 AM, Mark Struberg <strub...@yahoo.de> wrote:
> 
> > Hi Martin!
> > 
> > The maven-compiler plugin already does this. But once a single change is 
> > detected then we need to recompile the _whole_ module because of the 
> > reasons explained by Igor.
> > Pro of JDT: you can e.g. also see if there were only 'internal' changes and 
> > thus the other dependencies don't need to recompile. 
> > 
> > I'm 99.8, but not 100% convinced by that. Probably the other dependencies 
> > don't need any recompilation but maybe the whole internal behaviour changed 
> > and you still like to run your tests? Maybe we can simply ignore this and 
> > people should simply force a clean beforehand.
> > 
> 
> In the project where we developed the incremental lifecycle forcing a clean 
> is not practical. It introduces a huge penalty when you're dealing with tens 
> of source generators and annotations processors with hundreds of modules. 
> Yes, it will take time to instrument all the plugins we care about but have 
> done so thus far and it is possible to reason about the incremental state of 
> the whole project as a consequence. Right now we are focused on individual 
> mojo executions but eventually we want global incremental state management 
> which is the path to full impact analysis. Reaching that state is when you 
> can reason about what classes and resources changing affect what tests and 
> you start running on the tests that are necessary. As Paul mentioned in the 
> hangout he's got 20 hours of tests. In our projects we have 90 minutes 
> functional tests on extremely powerful machines. But this is where the 
> biggest gains will be made but a lot of work needs to be done to get to that 
> point.
> 
> > 
> > Basically al the incremental stuff boils down to the fact that the outcome 
> > is only determined by it's input. The problem is only to gather the right 
> > 'input'. E.g. your packaging relies not only on the compiled classes but 
> > also on resources and probably a manual include/exclude setting. Only the 
> > very plugin used to do the packaging will know. Thus EACH plugin in the 
> > whole chain needs to get adopted to incremental-awareness. Which is tons of 
> > work.
> > 
> 
> It is not only determined by inputs but also configuration, and not only 
> changed inputs but deleted inputs in order to remove stale outputs: this is 
> incredibly important. The other critical difference in our implementation is 
> awareness of dependency relationships. To our knowledge we have the first, 
> complete and correct incremental mechanism for Maven. Simon says Buck has 
> something similar and I know of a couple commercial implementations. Our end 
> goal is full impact analysis and something more akin to a global state 
> machine.
> 
> Yes, all the mojos you use must be instrumented correctly and consistently 
> and this is a huge amount of work. For our customer we started with the 
> default lifecycle, targeted plugins that were required to be instrumented and 
> we're just stepwise improving the support. We had a requirement for pure 
> speed in order to meet our wall time requirements but I believe the vast 
> majority of people doing enterprise builds care about 20-30 of the plugins 
> that exist and we'll eventually get coverage for those.
> 
> > 
> > Another story is if the 'input' e.g. includes data from a database or you 
> > just like to re-run your unit tests for the sake of debugging. We need a 
> > switch to force some plugins to run even if the plugin itself cannot see a 
> > reason by simply looking at it's known 'input'.
> > 
> 
> There's nothing intrinsically different in this case. It's a matter of 
> creating the correct graph and even if you had resources in databases or your 
> schema changes you need to know how to process a delta from said resource and 
> what is affected by those changes. There's nothing terribly magical here, the 
> hard part for us right now is what the API should look like (we're having a 
> lot of difficulty with that) and the sheer amount of work to instrument the 
> plugins.
> 
> This was definitely an oversight when we started writing the system. We 
> didn't much think about incremental behaviour at all but it really is 
> necessary.
> 
> For us the benefit is that once a plugin is instrumented with our incremental 
> API you get incremental behaviour on the CLI and inside of Eclipse and no 
> special integration needs to be written. Ultimately from one API we want 
> proper incremental behavior (and workspace resolution semantics) on the CLI, 
> the IDE and CI systems. This is a requirement on the path to correct and 
> efficient continuous delivery. It's all connected.

MG>Then Schema deltas *should* be able to update the configuration for 
incremental compilation?
MG>Would a static configuration that listens for "schema deltas" for the 
incremental compiler next iteration be helpful?
MG>knowing the graph at any point in time seems to be a key to understanding 
what collection requires re-compilation
MG>can Kristians work be refactored to be able to produce graph snapshots?
MG>as far as implementation I would suggest CLI first, CI (Jenkins?) second and 
IDE third..refactoring an IDE plugin that works in Eclipse, Idea and Netbeans 
from my experience is a very time consuming exercise.
MG>Thanks for "thinking this through" Jason Mark and Igor
MG>Thoughts?

> 
> > 
> > LieGrue,
> > strub
> > 
> > 
> > 
> > 
> > 
> >> On Saturday, 10 January 2015, 2:04, Martin Gainty <mgai...@hotmail.com> 
> >> wrote:
> >>> G ood Evening Igor-
> >> 
> >> Instead of implementing eclipe jdt for incremental java compilation is 
> >> there:
> >> 
> >> 1)any ability to refactor/reconfigure javac to read Last Modified Date of 
> >> source 
> >> file to enable incremental compilation?
> >> 2)any concerns over generated class files..are they the same?
> >> any deltas ..if so ...what are they?
> >> 3)can we implement a static settings.xml or other static configuration 
> >> file that 
> >> manfred suggested for eclipse jdt?
> >> 4)any ability to switch compiler from javac to jdt as an attribute in 
> >> maven-compiler-plugin?
> >> 
> >> Thanks for a great presentation on Maven Dev hangout
> >> Martin 
> >> ______________________________________________ 
> >> 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > For additional commands, e-mail: dev-h...@maven.apache.org
> > 
> 
> Thanks,
> 
> Jason
> 
> ----------------------------------------------------------
> Jason van Zyl
> Founder,  Apache Maven
> http://twitter.com/jvanzyl
> http://twitter.com/takari_io
> ---------------------------------------------------------
> 
> believe nothing, no matter where you read it,
> or who has said it,
> not even if i have said it,
> unless it agrees with your own reason
> and your own common sense.
> 
>  -- Buddha
> 
> 
> 
> 
> 
> 
> 
> 
> 
                                          

Reply via email to