Not sure if I get the problem.

The timestamp of the input files is still < than the timestamp of the jar file. 
Regardless if it later got modified by the shade-plugin or not.

LieGrue,
strub




>________________________________
> From: Stephen Connolly <stephen.alan.conno...@gmail.com>
>To: Maven Developers List <dev@maven.apache.org> 
>Cc: Mark Struberg <strub...@yahoo.de> 
>Sent: Monday, August 27, 2012 8:11 PM
>Subject: Re: improving incremental builds
> 
>
>On 27 August 2012 19:10, Stephen Connolly <stephen.alan.conno...@gmail.com> 
>wrote:
>
>On 27 August 2012 18:09, Benson Margulies <bimargul...@gmail.com> wrote:
>>
>>On Mon, Aug 27, 2012 at 12:07 PM, Mark Struberg <strub...@yahoo.de> wrote:
>>>> build1 and build 2 are different modules or different mvn invocations with 
>>>> some time inbetween?
>>>>
>>>> Of course we will need to test all plugins to behave incremental like! 
>>>> Means the maven-shade-plugin should check itself whether it needs shading 
>>>> or not at all.
>>>
>>>Two builds, separated in time, of exactly the same module.
>>>
>>>The problem here is that the jar plugin has already decided not to
>>>rebuild the jar by the time the shade plugin gets there, and I have no
>>>idea how to make the shade plugin play along.
>>>
>>
>>
>>Any chance we can get the jar plugin to inspect some of the artifacts that it 
>>generates into the jar to see if they are consistent with what the jar plugin 
>>produces...
>>
>>
>>I'm looking at you META-INF/MANIFEST.MF
>>
>>
>>I.O.W. if the 
>>
>>
>>Created-By: Apache Maven 3.0.4 (Maven JAR Plugin)
>>
>>
>>is switched to 
>>
>>
>>Created-By: Apache Maven 3.0.4 (Maven Shade Plugin)
>>
>>
>>Then the Maven JAR plugin can infer that the timestamp check is pointless, 
>>and force regen
>>
>
>
>And people customizing that header can just live with the issues that creates.
> 
>-Stephen
>> 
>>
>>>
>>>>
>>>> But the worst thing happening would be that we compile too much. Thats 
>>>> still better than a full mvn clean install :)
>>>>
>>>> LieGrue,
>>>> strub
>>>>
>>>>
>>>>
>>>> ----- Original Message -----
>>>>> From: Benson Margulies <bimargul...@gmail.com>
>>>>> To: Maven Developers List <dev@maven.apache.org>; Mark Struberg 
>>>>> <strub...@yahoo.de>
>>>>> Cc:
>>>>> Sent: Monday, August 27, 2012 5:07 PM
>>>>> Subject: Re: improving incremental builds
>>>>>
>>>>> 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
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> 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