On Mon, Aug 27, 2012 at 8:40 AM, Mark Struberg <strub...@yahoo.de> wrote:
> We might implement this by storing the list of all activated profiles + all 
> resolved environment properties in a file in target/ somewhere.
> That would be part of a.) in my previous mail to Romain.

How about the situation with shade?

Build 1 runs shade and it replaces the primary build artifact with a shaded one.

Build 2 sees that nothing has changed, but shade doesn't know, and it
reshades, eating its own output with a ton of messages.

Can I fix this in shade with current technologies?



>
> LieGrue,
> strub
>
>
>
> ----- Original Message -----
>> From: Anders Hammar <and...@hammar.net>
>> To: Maven Developers List <dev@maven.apache.org>; Mark Struberg 
>> <strub...@yahoo.de>
>> Cc:
>> Sent: Monday, August 27, 2012 12:24 PM
>> Subject: Re: improving incremental builds
>>
>>>  +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.
>>
>> What do others think of this? I'm thinking it would be awesome (but
>> maybe difficult) if plugins could determine if its configuration has
>> changed, and then handle this automatically. If there are to many
>> cases where a manual clean build is required, I believe people will
>> continue to do "mvn clean install" (which I see all the time with
>> developers), which I think is what we try to get away from.
>>
>> /Anders
>>
>>>
>>>  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
>>>
>>
>> ---------------------------------------------------------------------
>> 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