+1 for a common framework in maven-shared or similar.

+0 for auto detecting changed scenarios. If someone changes a profile or the 
whole pom, then I'd expect he invokes a clean manually.  We have to document 
this expectation of course.

LieGrue,
strub




----- Original Message -----
> From: Anders Hammar <and...@hammar.net>
> To: Maven Developers List <dev@maven.apache.org>
> Cc: 
> Sent: Monday, August 27, 2012 9:57 AM
> Subject: Re: improving incremental builds
> 
>>  I already started tweaking the m-compiler-plugin and found quite scary 
> issues. There is e.g. MCOMPILER-21 (open since 2005) which prevents 
> incremental 
> build and would kick in in your scenario.
> 
> This is interesting. I've looked a bit at Mojo's JAXB plugin in the
> context of detecting stale generated files (i.e. need to re-generate)
> and it's similar to this. It would extremely nice if there would be a
> common "framework" for handling incremental builds.
> In addition to what's been mentioned in the jira (I just browsed it
> quickly), we have cases when includes/excludes change, the sourceDir
> changes, etc which should trigger cleanup and re-compilation.
> 
> /Anders
> 
>> 
>>  I talked about 2 scenarios
>> 
>>  a.) all phases >= package, e.g. mvn verify, mvn install, ... Here we 
> have an artifact on the disc and could test for the md5 of them, right?
>> 
>>  b.) all phases < package. This is e.g. mvn compile or mvn test. In that 
> case we don't produce a jar/war/ear/... artifact but only get the files on 
> the disk linked in MavenProject#getProjectArtifacts()... file(). This is the 
> case where the maven-compiler-plugin kicks in. I'm currently in the process 
> of rewriting big parts of it, mainly I introduced
>>    b.1 a check for project.artifacts/project.testArtifacts .file() is a 
> local file path .isDirectory() and has files which are newer (actually >=) 
> than the buildStarted timestamp.
>>    b.2 check whether there are any *.java (sourceincludes) files which are 
> newer than their class files.
>> 
>>  In both cases I now force a FULL recompile of the module! Compiling only 
> parts produced classes which are actually broken!
>> 
>> 
>>  My approach is the following: compiling a bit too much is better than 
> missing some files which need compilation. Because the later is exactly the 
> reason why noone uses mvn compile but always do a mvn clean compile nowadays. 
> If 
> mvn compile is reliable, then we will end up being much faster than an 
> unconditional full compile on the whole project!
>> 
>> 
>>  LieGrue,
>>  strub
>> 
>> 
>>  PS: We need to move all our plugins which still use the 
> plugin-testing-harness to the maven-invoker-plugin as the test-harness is 
> broken 
> with sisu. (sisu changed the 'container' field from plexus original: 
> protected to 'private')
>> 
>>  PPS: how do we maintain the plexus-compiler-utils stuff? This contains some 
> weirdo bugs which should get fixed...
>> 
>> 
>> 
>>  ----- Original Message -----
>>>  From: Olivier Lamy <ol...@apache.org>
>>>  To: Maven Developers List <dev@maven.apache.org>; Mark Struberg 
> <strub...@yahoo.de>
>>>  Cc:
>>>  Sent: Monday, August 27, 2012 9:13 AM
>>>  Subject: Re: improving incremental builds
>>> 
>>>  Hi,
>>>  Sounds good idea trying to improve that.
>>>  My question: on what is based the md5 calculation ?
>>>  If people don't use 'install' but only 'test' 
> (perso I use
>>>  that to
>>>  avoid too much io with jar creation etc..), so in such case we cannot
>>>  do md5 calculation on the produced artifact.
>>> 
>>>  2012/8/26 Mark Struberg <strub...@yahoo.de>:
>>>>   Hi David!
>>>> 
>>>>>   So your idea is to find the list of changed modules and
>>>>>   then build that list with -amd?
>>>>   Yes, kind of.
>>>> 
>>>>   At the moment mvn -amd builds the dependents of the _current_ 
> module. If
>>>  you use my example and change BeanA.java, then run mvn -amd from the 
> root module
>>>  you will see that only moduleA gets rebuild and moduleB remains 
> original.
>>>  Because moduleB is not a dependent of the root module.
>>>> 
>>>>   But yes, I'm completely with you that we have most of the 
> ingredients
>>>  in the maven codebase already. At least for the start we could easily 
> detect
>>>  changed build results and add those to the 'amd' list. That 
> would
>>>  already be much better than what we have today imo. And this should be 
> pretty
>>>  easy to implement.
>>>> 
>>>>   Indeed, what I proposed goes a bit beyond -amd. I would not only 
> check the
>>>  current build tree like -amd does (even if that would be a good start) 
> but
>>>  remember the md5 of all the dependencies of each module (simply store 
> them in a
>>>  file in ./target/) And if you find a dependency which is not in the 
> list (e.g.
>>>  after upgrade from one version to another) or has a different md5 (this 
> covers
>>>  SNAPSHOT versions) , then we could force a full rebuild (mvn -amd) of 
> this
>>>  module.
>>>> 
>>>> 
>>>>   LieGrue,
>>>>   strub
>>>> 
>>>> 
>>>> 
>>>>   ----- Original Message -----
>>>>>   From: David Jencks <david_jen...@yahoo.com>
>>>>>   To: Maven Developers List <dev@maven.apache.org>
>>>>>   Cc:
>>>>>   Sent: Sunday, August 26, 2012 8:34 AM
>>>>>   Subject: Re: improving incremental builds
>>>>> 
>>>>>   Is what you want different from what
>>>>> 
>>>>>   mvn -amd moduleA
>>>>> 
>>>>>   does?  So your idea is to find the list of changed modules and 
> then
>>>  build that
>>>>>   list with -amd?
>>>>> 
>>>>>   thanks
>>>>>   david jencks
>>>>> 
>>>>>   On Aug 25, 2012, at 1:32 PM, Mark Struberg wrote:
>>>>> 
>>>>>>    Hi folks!
>>>>>> 
>>>>>>    After a short discussion with Kristian, I've created 
> a small
>>>  app with 2
>>>>>   modules which shows a few problems with mavens incremental 
> build logic.
>>>>>>    And since incremental builds do not work well, people use
>>>>>> 
>>>>>>    $> mvn _clean_ install
>>>>>>    all the time.
>>>>>> 
>>>>>>    We could speed up the development effort heavily if we 
> make
>>>>>>    $> mvn  install
>>>>>>    (without an upfront clean) more reliable.
>>>>>> 
>>>>>> 
>>>>>>    The sample [1] consists of moduleA and moduleB with BeanA 
> and
>>>  BeanB
>>>>>   respectively.
>>>>>>    BeanB has a private BeanA field and moduleB has a 
> dependency on
>>>  moduleA.
>>>>>> 
>>>>>>    If I change BeanA and just invoke mvn install then only 
> moduleA
>>>  gets
>>>>>   rebuilt. We currently do not rebuild moduleB, but we should do 
> to
>>>  create a
>>>>>   reliable output.
>>>>>> 
>>>>>>    In fact, the incremental build within a single module 
> already
>>>  works to some
>>>>>   degrees, but we must detect a change in dependencies and 
> trigger a full
>>>  rebuild
>>>>>   on all depending modules. This could be done by storing the 
> md5 of all
>>>>>   dependency artifacts and compare them on the next build. If 
> the md5 of
>>>  a
>>>>>   dependency did change, then we need to build the module full 
> cycle.
>>>>>>    Other ideas are welcome. Slaps as well if I forgot some 
> obvious
>>>  stuff and
>>>>>   all works well already.
>>>>>> 
>>>>>> 
>>>>>>    LieGrue,
>>>>>>    strub
>>>>>> 
>>>>>> 
>>>>>> 
>>>  ---------------------------------------------------------------------
>>>>>>    To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>>>>>>    For additional commands, e-mail: 
> dev-h...@maven.apache.org
>>>>>> 
>>>>> 
>>>>> 
>>>>>   
> ---------------------------------------------------------------------
>>>>>   To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>>>>>   For additional commands, e-mail: dev-h...@maven.apache.org
>>>>> 
>>>> 
>>>>   
> ---------------------------------------------------------------------
>>>>   To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>>>>   For additional commands, e-mail: dev-h...@maven.apache.org
>>>> 
>>> 
>>> 
>>> 
>>>  --
>>>  Olivier Lamy
>>>  Talend: http://coders.talend.com
>>>  http://twitter.com/olamy | http://linkedin.com/in/olamy
>>> 
>> 
>>  ---------------------------------------------------------------------
>>  To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
>>  For additional commands, e-mail: dev-h...@maven.apache.org
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> For additional commands, e-mail: dev-h...@maven.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org

Reply via email to