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 >> >> >