[DISCUSS] Improve efficiency of build cache with plugin and source type aware processing

2022-11-06 Thread Alexander Ashitkin
Hi Maven Team
Want to bring to your attention new feature I’m see as beneficial for the 
cache. The reason to bring into attention is core level questions - ability to 
not rerun tests for unchanged project which in turn needs ability to mark 
source code and plugins as private (ie not consuming and not contributing any 
dependencies in reactor). More details are in the ticket -  
https://issues.apache.org/jira/plugins/servlet/mobile#issue/MBUILDCACHE-27. 
Your feedback is greatly appreciated. 

Thank you.
Alex


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



Re: Incremental Maven - push the feature

2021-02-22 Thread Alexander Ashitkin
Hi Paul
this is a fork which is recommended to use with mvnw. 

Thank you
Aleks

On 2021/02/22 11:00:44, Falko Modler  wrote: 
> This is very interesting and exciting news!
> 
> > this is a fork of Maven somehow?  Or additional
> > plugins that are configurable into standard Maven?
> 
> I second this question.
> 
> > I too published something on quicker Maven builds that's lower tech -
> > https://paulhammant.com/2021/01/28/dagging-on-maven
> FWIW, I'm maintaining a Maven extension that only builds modules that
> are impacted by certain changes in git:
> https://github.com/gitflow-incremental-builder/gitflow-incremental-builder
> 
> I've been using this in various internal projects and it has saved us
> valuable time.
> 
> There is also some WIP integrating it in Quarkus, which has massive 800+
> modules (full CI run takes > 2.5 hours and this already includes
> multiple concurrent jobs).
> 
> 
> However, what is being proposed here by Alexander goes well beyond that,
> AFAICS, with build cache etc. - very cool!
> 
> 
> Cheers,
> 
> Falko
> 
> 
> -
> 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



Re: Incremental Maven - push the feature

2021-02-22 Thread Alexander Ashitkin
Hi Paul
this is fork which is required to use with mvnw. It is fully compatible with 
usual maven so no special modifications to project are required except config 
file.

Thank you
Aleks

On 2021/02/22 10:40:23, Paul Hammant  wrote: 
> Sounds great. Quick check - this is a fork of Maven somehow?  Or additional
> plugins that are configurable into standard Maven?
> 
> I too published something on quicker Maven builds that's lower tech -
> https://paulhammant.com/2021/01/28/dagging-on-maven
> 
> - Paul
> 

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



Re: Incremental Maven - push the feature

2021-02-22 Thread Alexander Ashitkin
Hi Michael
It's really a question of risks, time investments and expected benefits. 
Probably the main factor is how to improve the build without interruptions, 
failed deliveries and without regression in quality and productivity. Improving 
Maven was considered an optimal way at least tactically. So again, at least 
tactically this feature closed gap between maven and gradle to such an extent 
that future build system could be evaluated and planned without pressure.

Thank you
Aleks

On 2021/02/22 10:57:29, Michael Osipov  wrote: 
> Am 2021-02-22 um 05:37 schrieb Alexander Ashitkin:
> > Hi Maven Dev
> > 
> > We would like to resume topic of incremental builds on Maven - 
> > https://www.mail-archive.com/dev@maven.apache.org/msg119816.html
> > We’ve come a long way on Deutsche Bank side and currently few steps away 
> > from contribution. At this point Deutsche Bank Open Source council asked 
> > for support letter on behalf of the Maven project.
> > So we are looking for some feedback on this piece from Maven Project – 
> > criticality, interest, usefulness, etc.
> > 
> > Positive feedback and confirmation of interest is appreciated even more.
> > Once approved on our side we plan to push the change in a feature branch. 
> > We don’t expect it to be merged to core and rather see it as a proof of 
> > concepts to facilitate collaboration and discussions.
> > We are interested in future improvements and expect to hear feedback and 
> > guidance from experts on better design and implementation. From our side 
> > we’re ready to invest our time in further improvements. But it will be 
> > great to understand some approach to taking it forward.
> > 
> > The feature is stable, it is used in many critical projects internally. It 
> > was cross checked, challenged and validated uncountable number of times on 
> > all possible levels.
> > 
> > We’re are confident in quality, stability and seeking to advertise it as an 
> > experimental feature in Maven. Ideally we would like to see it as an 
> > unofficial distribution, but at bare minimum users could build it from the 
> > branch by themselves. As it is fully compatible with official distribution 
> > we expect that will encourage users to experiment and provide feedback.
> > 
> > The feature was announced on local IT-conference Joker 2020 
> > (https://jokerconf.com/en/) and gained significant interest both from 
> > organizers and guests.
> > 
> > The talk is available here https://www.youtube.com/watch?v=caKWl2H-e18 (it 
> > is in Russian and hopefully auto translate can give you rough understanding 
> > of the feature. We also plan to create English version a bit later)
> 
> Hi there,
> 
> I watched the video and the keypoint in the comparison was not 
> explained: Except for the migration effort, why was Gradle not a 
> suitable option? All you said is that the Gradle Extensions for Maven 
> are not suited for now, but that's a different thing.
> 
> Otherwise the video was quite promising and the approach was adequately 
> expressed in a superficial way which is fine for 12 min.
> 
> Michael
> 
> 
> -
> 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



Incremental Maven - push the feature

2021-02-21 Thread Alexander Ashitkin
Hi Maven Dev

We would like to resume topic of incremental builds on Maven - 
https://www.mail-archive.com/dev@maven.apache.org/msg119816.html
We’ve come a long way on Deutsche Bank side and currently few steps away from 
contribution. At this point Deutsche Bank Open Source council asked for support 
letter on behalf of the Maven project.
So we are looking for some feedback on this piece from Maven Project – 
criticality, interest, usefulness, etc.

Positive feedback and confirmation of interest is appreciated even more.
Once approved on our side we plan to push the change in a feature branch. We 
don’t expect it to be merged to core and rather see it as a proof of concepts 
to facilitate collaboration and discussions.
We are interested in future improvements and expect to hear feedback and 
guidance from experts on better design and implementation. From our side we’re 
ready to invest our time in further improvements. But it will be great to 
understand some approach to taking it forward.

The feature is stable, it is used in many critical projects internally. It was 
cross checked, challenged and validated uncountable number of times on all 
possible levels.

We’re are confident in quality, stability and seeking to advertise it as an 
experimental feature in Maven. Ideally we would like to see it as an unofficial 
distribution, but at bare minimum users could build it from the branch by 
themselves. As it is fully compatible with official distribution we expect that 
will encourage users to experiment and provide feedback.

The feature was announced on local IT-conference Joker 2020 
(https://jokerconf.com/en/) and gained significant interest both from 
organizers and guests.

The talk is available here https://www.youtube.com/watch?v=caKWl2H-e18 (it is 
in Russian and hopefully auto translate can give you rough understanding of the 
feature. We also plan to create English version a bit later)

Please share your thoughts. Looking forward to hear back from you.

Thanks in advance 
Alex

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



Re: [DISCUSS] Maven 3.7.0

2019-10-09 Thread Alexander Ashitkin
Totally disagree on the point. Writing java7 code after 8 makes you feel 
suffering - because instead of expressive stream based operations and lambdas 
you write pointless iterators and copy collections. 
It is purely subjective opinion that lambdas make code less readable - at least 
there is an absolutely opposite opinion

Thank you
Aleks

On 2019/10/03 12:47:35, Paul Hammant  wrote: 
> Who codes for 18 months before discovering that qa/prod are not compatible,
> anymore? Especially if Google ship a use-this-Pom starter.
> 
> On Thu, Oct 3, 2019 at 1:44 PM Elliotte Rusty Harold 
> wrote:
> 
> > Theoretically that would work. In practice though, every project I've
> > seen convert to Java 8 rapidly starts adding lambdas that make the
> > code more obfuscated for no good reason and soon introduces hard
> > dependencies on Java 8, intentionally or otherwise. At a bare minimum,
> > a CI environment that runs Java 7 is required.
> >
> > On Thu, Oct 3, 2019 at 8:25 AM Paul Hammant  wrote:
> > >
> > > Would jdk 8 for maven itself and a target of 7 for the compiler (etc) for
> > > maven-using projects be ok?
> > >
> > > On Thu, Oct 3, 2019 at 1:15 PM Elliotte Rusty Harold  > >
> > > wrote:
> > >
> > > > Strong -1 on Java 8 as the minimum version. Google Cloud Platform has
> > > > lots of products and customers that still require Java 7. If Maven
> > > > requires Java 8, we'd have to stick to the latest of whichever release
> > > > does support Java 7 for at least a year and I'm guessing longer.
> > > >
> > > > On Sat, Sep 28, 2019 at 8:04 AM Robert Scholte 
> > > > wrote:
> > > > >
> > > > > Hi,
> > > > >
> > > > > TLDR; introduce maven.experimental.buildconsumer and push Java
> > > > requirement
> > > > > to Java 8
> > > > >
> > > > > now that Maven 3.6.2 is out for a couple of weeks, it seems like we
> > > > didn't
> > > > > face real regressions.
> > > > > The only one might be tricky is the issue related to Tycho.
> > > > >
> > > > > However, I think we're ready to push Maven to the next level.
> > > > >
> > > > > For those actively reading this list, they should recognize the need
> > for
> > > > > splitting up the pom as it is on the local system versus the pom
> > being
> > > > > uploaded. Once we truly control this mechanism we can think of
> > > > > improvements on model 5.0.0 and new fileformats.
> > > > >
> > > > > I've created and implemented MNG-6656[1]. It also contains a zip
> > with an
> > > > > example (original, patched, README) to understand what's happening.
> > > > >
> > > > > In order to make this successful, we need IDEs and CI Servers to
> > > > > understand and support these changes. The likely need to implement
> > one of
> > > > > the interfaces[2].
> > > > > The new interface uses Java8 Functions (and especially
> > SAXEventFactory is
> > > > > way easier to read+maintain with Java 8). I've tried to keep Maven
> > Java 7
> > > > > compatible, but that was too hard to do.
> > > > > So I'd like to use this opportunity to move Maven forward and start
> > > > > requiring Java 8.
> > > > >
> > > > > There are some other improvements I'd like to add (those messages
> > will
> > > > > follow), so this will imply that it will take some time before we do
> > a
> > > > new
> > > > > release.
> > > > >
> > > > > WDTY,
> > > > > Robert
> > > > >
> > > > > [1] https://issues.apache.org/jira/browse/MNG-6656
> > > > > [2] https://github.com/apache/maven/compare/MNG-6656?expand=1
> > > > >
> > > > > -
> > > > > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > > > For additional commands, e-mail: dev-h...@maven.apache.org
> > > > >
> > > >
> > > >
> > > > --
> > > > Elliotte Rusty Harold
> > > > elh...@ibiblio.org
> > > >
> > > > -
> > > > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> > > > For additional commands, e-mail: dev-h...@maven.apache.org
> > > >
> > > >
> >
> >
> >
> > --
> > Elliotte Rusty Harold
> > elh...@ibiblio.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



Re: [DISCUSS] Maven 3.7.0

2019-10-05 Thread Alexander Ashitkin
Totally support java 8. There is nothing to discuss here. Not sure everyone 
realizes that, but it's 2019 already. 

Regarding the new features:
1) as you mentioned the new model, i think it will be good to introduce simple 
build graph balancing hints in the model. It is possible to examine critical 
path of the build, but not much you can do about that. Maven by itself has no 
knowledge of critical path and as developer i have no any tools to apply this 
knowledge. Though theoretically simple priority attribute at project level 
could help scheduler to work on a critical path first. 
2) i like idea of grade api/implementation dependencies model in terms of java 
modules system compatibility. So you expose api and hide implementation. It 
feels like new packaging for jigsaw modules are very welcome.
3) i feel like model have to be reworked to immutable form, so concurrent code 
is easier to write. Current modello objects look unsafe in concurrent code. 
Though correct implementation is possible of course, but it takes a lot of 
efforts to examine correctness. Makes sense to rework current model to builders 
+ immutable thread safe domain objects
4) From cache implementation perspective - i'd like to have metadata support on 
plugin parameters and project properties. That simplifies understanding of 
plugins behavior.

Thank you
Aleks

On 2019/09/28 12:05:34, "Robert Scholte"  wrote: 
> Hi,
> 
> TLDR; introduce maven.experimental.buildconsumer and push Java requirement  
> to Java 8
> 
> now that Maven 3.6.2 is out for a couple of weeks, it seems like we didn't  
> face real regressions.
> The only one might be tricky is the issue related to Tycho.
> 
> However, I think we're ready to push Maven to the next level.
> 
> For those actively reading this list, they should recognize the need for  
> splitting up the pom as it is on the local system versus the pom being  
> uploaded. Once we truly control this mechanism we can think of  
> improvements on model 5.0.0 and new fileformats.
> 
> I've created and implemented MNG-6656[1]. It also contains a zip with an  
> example (original, patched, README) to understand what's happening.
> 
> In order to make this successful, we need IDEs and CI Servers to  
> understand and support these changes. The likely need to implement one of  
> the interfaces[2].
> The new interface uses Java8 Functions (and especially SAXEventFactory is  
> way easier to read+maintain with Java 8). I've tried to keep Maven Java 7  
> compatible, but that was too hard to do.
> So I'd like to use this opportunity to move Maven forward and start  
> requiring Java 8.
> 
> There are some other improvements I'd like to add (those messages will  
> follow), so this will imply that it will take some time before we do a new  
> release.
> 
> WDTY,
> Robert
> 
> [1] https://issues.apache.org/jira/browse/MNG-6656
> [2] https://github.com/apache/maven/compare/MNG-6656?expand=1
> 
> -
> 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



Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-20 Thread Alexander Ashitkin
Hi Martijn 
thanks for positive feedback.

Regarding IDE part, yes you're right on integration part, but still there 
important cases when cache helps:
1) you need to navigate less in project as top level targets fast enough to not 
drill down
2) if you need to build a part of project (say only rest of wicket) you need to 
provide up-to-date rest dependencies which are not active in the subproject - 
and caches restores missing pieces for you without rebuilding remaining part of 
the project
3) If you need to test project and invoke test - cache saves your time (as 
gradle does) on unchanged pieces
4) and because tests run faster you can try run slow tests which often too 
expensive in rapid development

So maven integration in Intellij works nice. There is nothing super smart here, 
just sharing how i benefit from the cache in everyday ide work

Thank you!

On 2019/09/19 11:28:48, Martijn Dashorst  wrote: 
> On Thu, Sep 19, 2019 at 7:48 AM Alexander Ashitkin
>  wrote:
> > Configuration:
> > * verify -T4 -P default,all-shapshots-repos
> > * my project config (might be suboptimal for wicket)
> > * scala tests disabled in 2 modules (caused bytecode version conflict on my 
> > machine)
> >
> > Results
> > Clean state (cache disabled):   15:58 min
> > Second run, target up to date (cache disabled):  10:20 min
> > Fully cached (no changes):  17.507 s
> > wicketstuff-jwicket-tooltip-wtooltips changed:  34.936 s
> > wicketstuff-rest-utils changed: 54.040 s
> >
> > If you want to try other modules - please let me know.
> 
> Nice results!
> 
> > regarding ide - it's a usual maven installation, so any ide with maven 
> > integration should benefit from cache them maven action invoked
> 
> My instinct says that an IDE as Eclipse won't benefit much from it, as
> it has its own build lifecycle. Only when you invoke a commandline
> Maven action (such as generate-sources) one might have a benefit.
> 
> So in the day-to-day life the caching might not be as beneficial for
> developers, but commandline builds happen often enough to make this
> matter.
> 
> Martijn
> 
> -
> 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



Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-18 Thread Alexander Ashitkin
Sorry if duplicated, looks like my yesterday reply didn't come through.
Sharing results. 

Configuration:
* verify -T4 -P default,all-shapshots-repos
* my project config (might be suboptimal for wicket)
* scala tests disabled in 2 modules (caused bytecode version conflict on my 
machine) 

Results
Clean state (cache disabled):   15:58 min
Second run, target up to date (cache disabled):  10:20 min
Fully cached (no changes):  17.507 s
wicketstuff-jwicket-tooltip-wtooltips changed:  34.936 s 
wicketstuff-rest-utils changed: 54.040 s 


For wicketstuff-jwicket-tooltip-wtooltips i didnt check invalidated modules, 
for wicketstuff-rest-utils 
 [wicketstuff-rest-lambda, wicketstuff-restannotations, 
wicketstuff-restannotations-json, wicketstuff-restannotations-examples] were 
invalidated and rebuilt

If you want to try other modules - please let me know.

regarding ide - it's a usual maven installation, so any ide with maven 
integration should benefit from cache them maven action invoked

Thank you
Aleks


On 2019/09/17 12:29:11, Martijn Dashorst  wrote: 
> This seems like it would benefit a lot of projects (at least it would ours).
> 
> How would this work in coordination with IDE's? m2e has (afaict, but
> haven't looked closely) its own lifecycle management to bridge eclipse and
> maven. AFIAK only Netbeans uses maven directly?
> 
> If you want to benchmark a public big repo, you can use Wicket Stuff Core (
> https://github.com/wicketstuff/core). It has 237 modules, and the build
> takes quite a while to compile and package. The project levels are not
> deep, but there's some nesting.
> 
> Martijn
> 
> 
> On Fri, Sep 13, 2019 at 10:46 PM Maximilian Novikov <
> maximilian.novi...@db.com> wrote:
> 
> > Hi All,
> >
> >
> >
> > *We want to create upstream change to Maven* to support true incremental
> > build for big-sized projects.
> >
> > To raise a pull request we have to pass long chain of Deutsche Bank’s
> > internal procedures. So, *before starting the process we would like to
> > get your feedback regarding this feature*.
> >
> >
> >
> > *Motivation:*
> >
> >
> >
> > Our project is hosted in mono-repo and contains ~600 modules. All modules
> > has the same SNAPSHOT version.
> >
> > There are lot of test automation around this, everything is tested before
> > merge into release branch.
> >
> >
> >
> > Current setup helps us to simplify build/release/dependency management for
> > 10+ teams those contribute into codebase. We can release everything in
> > 1-click.
> >
> > The major drawback of such approach is build time: *full local build took
> > 45-60 min (*-T8)*, CI build ~25min(*-T16*)*.
> >
> >
> >
> > To speed-up our build we needed 2 features: incremental build and shared
> > cache.
> >
> > Initially we started to think about migration to Gradle or Bazel. As
> > migration costs for the mentioned tools were too high, we decided to add
> > similar functionality into Maven.
> >
> >
> >
> > Current results we get: *1-2 mins for local build(*-T8*)* if build was
> > cached by CI*, CI build ~5 mins (*-T16*).*
> >
> >
> >
> > *Feature description:*
> >
> >
> >
> > The idea is to calculate checksum for inputs and save outputs in cache.
> >
> > [image: image2019-8-27_20-0-14.png]
> >
> > Each node checksum calculated with:
> >
> >
> >
> > · Effective POM hash
> >
> > · Sources hash
> >
> > · Dependencies hash (dependencies within multi-module project)
> >
> >
> >
> > Project sources inputs are searched inside project + all paths from
> > plugins configuration:
> >
> > [image: image2019-8-30_10-28-56.png]
> >
> > How does it work in practice:
> >
> >
> >
> > 1.   CI: runs builds and stores outputs in shared cache
> >
> > 2.   CI: reuse outputs for same inputs, so time is decreasing
> >
> > 3.   Locally: when I checkout branch and run ‘install’ for whole
> > project, I get all actual snapshots from remote cache for this branch
> >
> > 4.   Locally: if I change multiple modules in tree, only changed
> > subtree is rebuilt
> >
> >
> >
> > Impact on current Maven codebase is very localized (MojoExecutor, where we
> > injected cache controller).
> >
> > Caching can be activated/deactivated by property, so current maven flow
> > will work as is.
> >
> >
> >
> > And the big plus is that you don’t need to re-work your current project.
> > Caching should work out of box, just need to add config in .mvn folder.
> >
> >
> >
> > Please let us know what do you think. We are ready to invest in this
> > feature and address any further feedback.
> >
> >
> >
> > Kind regards,
> >
> > Max
> >
> >
> >
> >
> > ---
> > This e-mail may contain confidential and/or privileged information. If you
> > are not the intended recipient (or have received this e-mail in error)
> > please notify the sender immediately and delete this e-mail. Any
> > unauthorized copying, disclosure or distribution of the 

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-15 Thread Alexander Ashitkin
Hi 
Let's please stop discussing this subject as it goes off-top and pollutes 
thread. Our case exists, it has own reasons and we discuss it is not in the 
scope of this thread. Lets please return to the feature itself

Thank you

On 2019/09/14 16:41:43, Romain Manni-Bucau  wrote: 
> Hope I didnt miss it but how monorepo=single build?
> 
> It is working well to not have a common parent too and is unlinked to
> monorepo which uses local relative paths in general (at least in the
> references you quoted which are also not about java ;)).
> 
> Unrelated to making maven better at incremental builds but both tracks can
> help you to get a very fast build feedback.
> 
> Le sam. 14 sept. 2019 à 17:35, Robert Scholte  a
> écrit :
> 
> > https://issues.apache.org/jira/browse/MPLUGIN-350 is the issue to start
> > with.
> >
> > Please read all the comments, because my original thought won't work.
> >
> > thanks,
> > Robert
> >
> > On Sat, 14 Sep 2019 17:10:13 +0200, Alexander Ashitkin
> >  wrote:
> >
> > > We checked and price of 550$ per user makes us think twice of what's
> > the
> > > best way to proceed here :-)
> > > Regarding plugin api - yes, changes are desirable to make maven model
> > > cache-friendly. Both in plugin invocation model and Mojo#execute
> > > input/output apis. But it is possible to work with current model with
> > > declarative approach.
> > >
> > > Thanks in advance
> > >
> > > On 2019/09/14 10:45:24, Tibor Digana  wrote:
> > >> But I do not understand why the Maven should be responsible for the
> > >> project
> > >> cahe control/management of "/target" directories.
> > >> It is a responsibility of the build manager which is the Jenkins.
> > >> The Jenkins has the ability to archive files and such property already
> > >> exists in the Jenkins.
> > >>
> > >> So the Jenkins has a full knowledge about:
> > >>
> > >> 1. how long the workspace content retains intact
> > >> 2. what commit hash is for the last build/job/branch
> > >> 3. and what commit was successful
> > >>
> > >> If the target directories retain intact (or renewed from archive) in the
> > >> workspace for very long time and the workspace was reused by the next
> > >> build
> > >> then I would say that the improvement should work as it is on CI level.
> > >>
> > >> Maybe what is necessary is only that improvement in Maven where we would
> > >> obtain the list of modules or directories of changes in the current
> > >> commit.
> > >> Then the Maven can highly optimize its own build steps and build only
> > >> those
> > >> modules which have been changed and their dependent modules.
> > >> So the interface between CI and Maven is needed in a kind of extension
> > >> or
> > >> the class MavenCli can be extended with some new entrypoint.
> > >>
> > >> But I do not hink that Maven has to take care of responsibilities of CI
> > >> (project cache mgmt), that's not our task I would say and we as Maven
> > >> would
> > >> never know all about the miscellaneous CI specifics and therefore we
> > >> would
> > >> not cope with CI related troubles.
> > >>
> > >> Cheers
> > >> Tibor17
> > >>
> > >>
> > >>
> > >> On Sat, Sep 14, 2019 at 11:08 AM Robert Scholte 
> > >> wrote:
> > >>
> > >> > On Fri, 13 Sep 2019 23:37:15 +0200, Romain Manni-Bucau
> > >> >  wrote:
> > >> >
> > >> > > There are multiple possible incremental support:
> > >> > >
> > >> > > 1. Scm related: do a status and rebuild downstream reactor
> > >> > > 2. Full and module build graph: seems it is the one you target, ie
> > >> bypass
> > >> > > modules without change. Note that it only works if upstream graph is
> > >> > > taken
> > >> > > into account.
> > >> > > 3. Full build: each mojo has incremental support so the full build
> > >> gets
> > >> > > it.
> > >> > > Issue is that it requires each mojo to know if it needs to be
> > >> executed or
> > >> > > give enough info to the mojo executor to do so (gradle requires all
> > >> > > inputs/outputs to assume this state - whic

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-15 Thread Alexander Ashitkin
Hi Robert 
sounds like right direction, but just categorizing parameters is not enough. 
1) You need to connect plugins into a chain, so you need to match outputs of 
multiple plugins as input for downstream plugins. 
2) Input output is not enough. You need to know which parameters affect plugin 
behavoir and sometimes how (like threading doesnt affect tests result but 
exclude does). So parameter should have more metadata i guess

Thank you 

On 2019/09/14 15:35:26, "Robert Scholte"  wrote: 
> https://issues.apache.org/jira/browse/MPLUGIN-350 is the issue to start  
> with.
> 
> Please read all the comments, because my original thought won't work.
> 
> thanks,
> Robert
> 
> On Sat, 14 Sep 2019 17:10:13 +0200, Alexander Ashitkin  
>  wrote:
> 
> > We checked and price of 550$ per user makes us think twice of what's the  
> > best way to proceed here :-)
> > Regarding plugin api - yes, changes are desirable to make maven model  
> > cache-friendly. Both in plugin invocation model and Mojo#execute  
> > input/output apis. But it is possible to work with current model with  
> > declarative approach.
> >
> > Thanks in advance
> >
> > On 2019/09/14 10:45:24, Tibor Digana  wrote:
> >> But I do not understand why the Maven should be responsible for the  
> >> project
> >> cahe control/management of "/target" directories.
> >> It is a responsibility of the build manager which is the Jenkins.
> >> The Jenkins has the ability to archive files and such property already
> >> exists in the Jenkins.
> >>
> >> So the Jenkins has a full knowledge about:
> >>
> >> 1. how long the workspace content retains intact
> >> 2. what commit hash is for the last build/job/branch
> >> 3. and what commit was successful
> >>
> >> If the target directories retain intact (or renewed from archive) in the
> >> workspace for very long time and the workspace was reused by the next  
> >> build
> >> then I would say that the improvement should work as it is on CI level.
> >>
> >> Maybe what is necessary is only that improvement in Maven where we would
> >> obtain the list of modules or directories of changes in the current  
> >> commit.
> >> Then the Maven can highly optimize its own build steps and build only  
> >> those
> >> modules which have been changed and their dependent modules.
> >> So the interface between CI and Maven is needed in a kind of extension  
> >> or
> >> the class MavenCli can be extended with some new entrypoint.
> >>
> >> But I do not hink that Maven has to take care of responsibilities of CI
> >> (project cache mgmt), that's not our task I would say and we as Maven  
> >> would
> >> never know all about the miscellaneous CI specifics and therefore we  
> >> would
> >> not cope with CI related troubles.
> >>
> >> Cheers
> >> Tibor17
> >>
> >>
> >>
> >> On Sat, Sep 14, 2019 at 11:08 AM Robert Scholte 
> >> wrote:
> >>
> >> > On Fri, 13 Sep 2019 23:37:15 +0200, Romain Manni-Bucau
> >> >  wrote:
> >> >
> >> > > There are multiple possible incremental support:
> >> > >
> >> > > 1. Scm related: do a status and rebuild downstream reactor
> >> > > 2. Full and module build graph: seems it is the one you target, ie  
> >> bypass
> >> > > modules without change. Note that it only works if upstream graph is
> >> > > taken
> >> > > into account.
> >> > > 3. Full build: each mojo has incremental support so the full build  
> >> gets
> >> > > it.
> >> > > Issue is that it requires each mojo to know if it needs to be  
> >> executed or
> >> > > give enough info to the mojo executor to do so (gradle requires all
> >> > > inputs/outputs to assume this state - which is still just an  
> >> heuristic
> >> > > and
> >> > > not 100% reliable).
> >> > >
> >> > > In current state, 2. sounds like a good option since 3 can require   
> >> a
> >> > > loot
> >> > > of work for external plugins (today's builds have a lot more of not  
> >> maven
> >> > > provide plugins than core plugins).
> >> > > Now, we should be able to activate it or not so having a  
> >> cacheLocation
> >> > > config in settings.xml can be good.
> >> > &g

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-15 Thread Alexander Ashitkin
;
> > Alexander,
> > Enrico is really right. Today it is Microservices and there every
> > microservice is in a separate SCM repo.
> >
> > It was just only an example with Microservices but in my experiences you
> > can always find the lower bound modules in the hierary which do not change
> > so much and segragate them in another SCM repos. Those should undergo the
> > release process, share release versions and avoid sharing SNAPSHOT
> > versions.
> >
> > You can find the top roots which are actually applications. If you have 10
> > WAR files as a result of the build and all of them should be deployed, then
> > there is a strong reason to separate them in separate SCM repos.
> >
> > Then this separation concept will guide you to isolate the middle layers
> > into isolated services as JAR files. And then you endup with Microservices,
> > SOA services and not JAR files or you will be much closer to them. the huge
> > monolith project is gone.
> >
> > All the development process will be faster and more flexible than it was
> > before. Just try!
> >
> > Cheers
> > Tibor17
> >
> > On Sat, Sep 14, 2019 at 5:23 PM Alexander Ashitkin <
> > ashitkin.a...@gmail.com>
> > wrote:
> >
> > > HI Enrico
> > > Thanks for feedback. that's a side discussion for best approach for
> > > projects layouts. Monorepo has own own advocates and it is easy to find
> > > posts describing why google, microsoft or facebook go monorepo.
> > > Unlike of way of thought, we are ready to go globally in case of
> > emergency
> > > scenario. If say zero-day vulnerability is discovered in some of
> > low-level
> > > widely reused core libraries, we need just one click to build/test/deploy
> > > and safely go live globally with whole estate updated on scale of
> > thousands
> > > of processes. And you know, there are people in the world who think that
> > > scattered across small repos codebase is difficult to maintain and
> > > snapshots are evil. It all depends.
> > > Honestly, i think it will be it's a kind of reversed approach them you
> > > build system defines how your software development processes work. Google
> > > has own vision and just implemented Bazel and this is correct approach.
> > Btw
> > > Bazel is perfect for such scenario, but costly to migrate on for existing
> > > project.
> > >
> > > So if you choose monorepo as we did it is normal to work just on a part
> > of
> > > project. You just need a way to deal with scalability challenges:
> > > a) you hit hardware and infrastructure limitations and need to address
> > > them in some way.
> > > b) need to have incremental build so you can work on subpart of project
> > > but contribute to shared codebase
> > >
> > > Sincerely yours, Aleks
> > >
> > > On 2019/09/14 08:41:37, Enrico Olivelli  wrote:
> > > > I feel that in general having an huge monolithic project is kind of a
> > > > project-smell.
> > > > Btw I have some big project with 100+ modules so I can see your pain.
> > > > In the daywork experience a single developer doesn't work on all of the
> > > > modules but usually you touch 1-2 modules and maybe some
> > > integration/system
> > > > test.
> > > > If you need to rebuild the full project for every change maybe there is
> > > > something wrong with the overall design.
> > > >
> > > > I think you have you motivations for your layout, so let's talk about
> > > your
> > > > proposal.
> > > >
> > > > If you have a way to split your project in subsystems you can use some
> > > > shared remote repository for deploying snapshots in order to share
> > > > intermediate results with other developers
> > > >
> > > > If your goal is to be ready for releases I don't get your point.
> > Usually
> > > > you work with snapshots and for a release you have to rebuild one time
> > > and
> > > > only once the full codebase in order to ensure that you a consistent
> > > build
> > > > of the project.
> > > > With all of this kind of temporary caches how do you ensure that the
> > > final
> > > > artifacts are the intended ones?
> > > >
> > > >
> > > > Beside note: this is not a real VOTE thread
> > > >
> > > > Just my 2 cents
> > > >
> > > > don't get

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
Let us evaluate this approach. But if we go extension way, it will be not so 
big motivation to make it part of maven. and i'm not sure what are long term 
strategy for maven, but without incremental builld it becomes less and less 
attractive in our multi-branched world

Thank you

On 2019/09/14 08:48:00, Romain Manni-Bucau  wrote: 
> Le sam. 14 sept. 2019 à 08:00, Alexander Ashitkin 
> a écrit :
> 
> > Indeed we have a kind of the option 2 with variations. Current
> > implementation is opt-in feature driven by configuration with some metadata
> > of required cache behavior and hints.
> >
> > Maven extensions is the option, but we would love to have it in maven
> > itself which is in interest of maven community i believe. Extension is a
> > way we are trying to avoid and even not sure it could be implemented as
> > extension as it requires changes in maven core.
> >
> 
> No real change required in maven core here since guice enables to override
> any bean or even just to rewrite the pom to remove modules to just rebuild
> the minimum set (keeping downstream project).
> 
> The only challenge is an exhaustive test suite since your current impl can
> easily fake a passing build (as gradle does today if you dont disable the
> daemon and state cache on the CI).
> 
> Side note: test relationship discovery is close to AOT in terms of impl and
> very very slow so can be worse than doing the full suite in simple projects
> and it still asks the IT question.
> 
> So due to the numerous "?" of a core solution, extension is the way to go.
> Now if a guice bean in core can help to write your extension, it can surely
> be reviewed more easily IMHO.
> 
> Hope it helps.
> 
> 
> > Thanks in advance, Aleks
> >
> > On 2019/09/13 21:37:15, Romain Manni-Bucau  wrote:
> > > There are multiple possible incremental support:
> > >
> > > 1. Scm related: do a status and rebuild downstream reactor
> > > 2. Full and module build graph: seems it is the one you target, ie bypass
> > > modules without change. Note that it only works if upstream graph is
> > taken
> > > into account.
> > > 3. Full build: each mojo has incremental support so the full build gets
> > it.
> > > Issue is that it requires each mojo to know if it needs to be executed or
> > > give enough info to the mojo executor to do so (gradle requires all
> > > inputs/outputs to assume this state - which is still just an heuristic
> > and
> > > not 100% reliable).
> > >
> > > In current state, 2. sounds like a good option since 3 can require  a
> > loot
> > > of work for external plugins (today's builds have a lot more of not maven
> > > provide plugins than core plugins).
> > > Now, we should be able to activate it or not so having a cacheLocation
> > > config in settings.xml can be good.
> > >
> > > Side notes:
> > >
> > > 1. having it on by default will break builds - reactor is deterministic
> > and
> > > bypassing a module can break a build since it can init maven properties -
> > > for ex - for next modules
> > > 2. You cant find all in/out paths from the pom in general so your algo is
> > > not generic, a meta config can be needed in .mvn
> > > 3. We should let a mojo be able to disable that to replace default logic
> > > (surefire is a good example where it must be refined and it can save
> > hours
> > > there ;))
> > > 4. Let's try to impl it as a mvn extension first then if it works well on
> > > multiple big project get it to core?
> > >
> > > Romain
> > >
> > >
> > >
> > > Le ven. 13 sept. 2019 à 23:18, Tibor Digana  a
> > > écrit :
> > >
> > > > In theory, the incremental compiler would make it faster.
> > > > But this can be told only if you present a demo project with has
> > trivial
> > > > tests taking much less time to complete than the compiler.
> > > >
> > > > In reality the tests in huge projects take significantly longer time
> > than
> > > > the compiler.
> > > > Some developers say "switch off all the tests" in the release phase but
> > > > that's wrong because then the quality goes down and methodologies are
> > > > broken.
> > > >
> > > > I can see a big problem that we do not have an interface between
> > Surefire
> > > > and Compiler plugin negotiating which tests have been modified
> > including
> > > > modules and classes in 

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
HI Robert
seems to your thinking matches to our own one. Indeed, the question is - should 
be executed this goal or not? But in current plugin-api limitations not a 
plugin-developer but only project developer can understand should this goal run 
or not because of side effects each plugin might have. And yes, if plugin api 
defines input output and have more granular execution lifecycle, it will be 
much more friendly for caching/incremental approach. That was one of the 
options for us, but we decided to avoid huge reworks in sake of easier 
portability between versions.

Thank you


On 2019/09/14 13:44:36, "Robert Scholte"  wrote: 
> Tibor, it seems like you're missing the bigger picture.
> The question is similar to what we've discussed in the past: can we define  
> if surefire should be executed or not?
> 
> We should define incremental builds as "should a goal be executed or  
> not?", e.g. based on the results of the previous build.
> First of all: calling 'clean' makes it impossible to do incremental builds.
> Next, it is the *plugin-developer* that knows best if the goal should be  
> executed or not. Now it is still logic inside the plugin, but if the  
> plugin API understands input and output, we can leave it up to Maven to  
> decide if a goal should be executed.
> The buildplan now gives us a graph of Maven Projects, but theoretically  
> with such changes we could make a graph of goals. And it could detect  
> useless calls of goals, because the output is never being used.
> Some might recognize a Gradle concept here, and that's correct. At this  
> point they were able to design something that works better compared to  
> Maven. For their build cache extension they had to analyze the plugin  
> descriptors, marking all parameters as either input or output. And that  
> boosts the builds with their extension.
> 
> thanks,
> Robert
> 
> 
> On Sat, 14 Sep 2019 13:37:40 +0200, Tibor Digana   
> wrote:
> 
> > oh yeah, exactly opposite.
> > Jenkins has several ways to create Maven build configuration and it knows
> > where the repo and workspace is, it knows where to store the archive, it
> > knows when the build failed.
> > We cannot take the responsibility because the build may fail for whatever
> > reason and we do not know whether to keep the folders or delete all
> > "/target" folders or just to delete only the failed one. The user knows  
> > it.
> > We cannot archive the folders because we may significantly cause very  
> > high
> > disk usage which would be without the control of CI. And we cannot take  
> > the
> > responsibility of lifetime of these archives. It is all the property of
> > Jenkins and Jenkins has the feature and management plugins where the
> > workspace may retain for certain period of time, archives are limited in
> > some way. The archives can be stored in another folder and we should not
> > adopt these responsibilities because then we suddenly end up with all the
> > knowledge of the distributed system and then we as maven project would  
> > end
> > as unmaintainable project with many more issues in Jira and requirements  
> > we
> > would be able to find the spare time to develop.
> >
> > On Sat, Sep 14, 2019 at 1:25 PM Romain Manni-Bucau  
> > 
> > wrote:
> >
> >> Tibor, maven is the only one with the logic to give any cache the data  
> >> it
> >> needs. Jenkins alone can't since it does not own the reactor nor plugin  
> >> I/O
> >> values.
> >>
> >> Le sam. 14 sept. 2019 à 12:45, Tibor Digana  a
> >> écrit :
> >>
> >> > But I do not understand why the Maven should be responsible for the
> >> project
> >> > cahe control/management of "/target" directories.
> >> > It is a responsibility of the build manager which is the Jenkins.
> >> > The Jenkins has the ability to archive files and such property already
> >> > exists in the Jenkins.
> >> >
> >> > So the Jenkins has a full knowledge about:
> >> >
> >> > 1. how long the workspace content retains intact
> >> > 2. what commit hash is for the last build/job/branch
> >> > 3. and what commit was successful
> >> >
> >> > If the target directories retain intact (or renewed from archive) in  
> >> the
> >> > workspace for very long time and the workspace was reused by the next
> >> build
> >> > then I would say that the improvement should work as it is on CI  
> >> level.
> >> >
> >> > Maybe what is necessary is only that improvement in Maven where we  
> >> would
> >> > obtain the list of modules or directories of changes in the current
> >> commit.
> >> > Then the Maven can highly optimize its own build steps and build only
> >> those
> >> > modules which have been changed and their dependent modules.
> >> > So the interface between CI and Maven is needed in a kind of  
> >> extension or
> >> > the class MavenCli can be extended with some new entrypoint.
> >> >
> >> > But I do not hink that Maven has to take care of responsibilities of  
> >> CI
> >> > (project cache mgmt), that's not our task I would say and we as 

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
We checked and price of 550$ per user makes us think twice of what's the best 
way to proceed here :-) 
Regarding plugin api - yes, changes are desirable to make maven model 
cache-friendly. Both in plugin invocation model and Mojo#execute input/output 
apis. But it is possible to work with current model with declarative approach.

Thanks in advance

On 2019/09/14 10:45:24, Tibor Digana  wrote: 
> But I do not understand why the Maven should be responsible for the project
> cahe control/management of "/target" directories.
> It is a responsibility of the build manager which is the Jenkins.
> The Jenkins has the ability to archive files and such property already
> exists in the Jenkins.
> 
> So the Jenkins has a full knowledge about:
> 
> 1. how long the workspace content retains intact
> 2. what commit hash is for the last build/job/branch
> 3. and what commit was successful
> 
> If the target directories retain intact (or renewed from archive) in the
> workspace for very long time and the workspace was reused by the next build
> then I would say that the improvement should work as it is on CI level.
> 
> Maybe what is necessary is only that improvement in Maven where we would
> obtain the list of modules or directories of changes in the current commit.
> Then the Maven can highly optimize its own build steps and build only those
> modules which have been changed and their dependent modules.
> So the interface between CI and Maven is needed in a kind of extension or
> the class MavenCli can be extended with some new entrypoint.
> 
> But I do not hink that Maven has to take care of responsibilities of CI
> (project cache mgmt), that's not our task I would say and we as Maven would
> never know all about the miscellaneous CI specifics and therefore we would
> not cope with CI related troubles.
> 
> Cheers
> Tibor17
> 
> 
> 
> On Sat, Sep 14, 2019 at 11:08 AM Robert Scholte 
> wrote:
> 
> > On Fri, 13 Sep 2019 23:37:15 +0200, Romain Manni-Bucau
> >  wrote:
> >
> > > There are multiple possible incremental support:
> > >
> > > 1. Scm related: do a status and rebuild downstream reactor
> > > 2. Full and module build graph: seems it is the one you target, ie bypass
> > > modules without change. Note that it only works if upstream graph is
> > > taken
> > > into account.
> > > 3. Full build: each mojo has incremental support so the full build gets
> > > it.
> > > Issue is that it requires each mojo to know if it needs to be executed or
> > > give enough info to the mojo executor to do so (gradle requires all
> > > inputs/outputs to assume this state - which is still just an heuristic
> > > and
> > > not 100% reliable).
> > >
> > > In current state, 2. sounds like a good option since 3 can require  a
> > > loot
> > > of work for external plugins (today's builds have a lot more of not maven
> > > provide plugins than core plugins).
> > > Now, we should be able to activate it or not so having a cacheLocation
> > > config in settings.xml can be good.
> > >
> > > Side notes:
> > >
> > > 1. having it on by default will break builds - reactor is deterministic
> > > and
> > > bypassing a module can break a build since it can init maven properties -
> > > for ex - for next modules
> > > 2. You cant find all in/out paths from the pom in general so your algo is
> > > not generic, a meta config can be needed in .mvn
> > > 3. We should let a mojo be able to disable that to replace default logic
> > > (surefire is a good example where it must be refined and it can save
> > > hours
> > > there ;))
> > > 4. Let's try to impl it as a mvn extension first then if it works well on
> > > multiple big project get it to core?
> >
> > Did anyone Google for "maven extension build cache"? There are already
> > commercial solutions for it.
> > Even though I would like to see improvements in this area, the old
> > architecture of Maven makes it quite hard to move to that situation.
> > First
> > of all it requires changes to the Plugin API (without breaking backwards
> > compatibility) to have support out of the box.
> >
> > Robert
> >
> > >
> > > Romain
> > >
> > >
> > >
> > > Le ven. 13 sept. 2019 à 23:18, Tibor Digana  a
> > > écrit :
> > >
> > >> In theory, the incremental compiler would make it faster.
> > >> But this can be told only if you present a demo project with has trivial
> > >> tests taking much less time to complete than the compiler.
> > >>
> > >> In reality the tests in huge projects take significantly longer time
> > >> than
> > >> the compiler.
> > >> Some developers say "switch off all the tests" in the release phase but
> > >> that's wrong because then the quality goes down and methodologies are
> > >> broken.
> > >>
> > >> I can see a big problem that we do not have an interface between
> > >> Surefire
> > >> and Compiler plugin negotiating which tests have been modified including
> > >> modules and classes in the entire structure.
> > >>
> > >> Having incremental compiler is easy, just use compiler:3.8.1 or use the

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
Sorry, i think Jenkins is irrelevant here at all. we need solution which works 
everythere - on workstations, from commandline, on other build servers, in 
intellij, etc. Any solution which is worth to discuss must be Jenkins agnostic 
honestly. Also, FYI we don't rely on target directory state at all - it is not 
saved.

Thank you

On 2019/09/14 11:37:40, Tibor Digana  wrote: 
> oh yeah, exactly opposite.
> Jenkins has several ways to create Maven build configuration and it knows
> where the repo and workspace is, it knows where to store the archive, it
> knows when the build failed.
> We cannot take the responsibility because the build may fail for whatever
> reason and we do not know whether to keep the folders or delete all
> "/target" folders or just to delete only the failed one. The user knows it.
> We cannot archive the folders because we may significantly cause very high
> disk usage which would be without the control of CI. And we cannot take the
> responsibility of lifetime of these archives. It is all the property of
> Jenkins and Jenkins has the feature and management plugins where the
> workspace may retain for certain period of time, archives are limited in
> some way. The archives can be stored in another folder and we should not
> adopt these responsibilities because then we suddenly end up with all the
> knowledge of the distributed system and then we as maven project would end
> as unmaintainable project with many more issues in Jira and requirements we
> would be able to find the spare time to develop.
> 
> On Sat, Sep 14, 2019 at 1:25 PM Romain Manni-Bucau 
> wrote:
> 
> > Tibor, maven is the only one with the logic to give any cache the data it
> > needs. Jenkins alone can't since it does not own the reactor nor plugin I/O
> > values.
> >
> > Le sam. 14 sept. 2019 à 12:45, Tibor Digana  a
> > écrit :
> >
> > > But I do not understand why the Maven should be responsible for the
> > project
> > > cahe control/management of "/target" directories.
> > > It is a responsibility of the build manager which is the Jenkins.
> > > The Jenkins has the ability to archive files and such property already
> > > exists in the Jenkins.
> > >
> > > So the Jenkins has a full knowledge about:
> > >
> > > 1. how long the workspace content retains intact
> > > 2. what commit hash is for the last build/job/branch
> > > 3. and what commit was successful
> > >
> > > If the target directories retain intact (or renewed from archive) in the
> > > workspace for very long time and the workspace was reused by the next
> > build
> > > then I would say that the improvement should work as it is on CI level.
> > >
> > > Maybe what is necessary is only that improvement in Maven where we would
> > > obtain the list of modules or directories of changes in the current
> > commit.
> > > Then the Maven can highly optimize its own build steps and build only
> > those
> > > modules which have been changed and their dependent modules.
> > > So the interface between CI and Maven is needed in a kind of extension or
> > > the class MavenCli can be extended with some new entrypoint.
> > >
> > > But I do not hink that Maven has to take care of responsibilities of CI
> > > (project cache mgmt), that's not our task I would say and we as Maven
> > would
> > > never know all about the miscellaneous CI specifics and therefore we
> > would
> > > not cope with CI related troubles.
> > >
> > > Cheers
> > > Tibor17
> > >
> > >
> > >
> > > On Sat, Sep 14, 2019 at 11:08 AM Robert Scholte 
> > > wrote:
> > >
> > > > On Fri, 13 Sep 2019 23:37:15 +0200, Romain Manni-Bucau
> > > >  wrote:
> > > >
> > > > > There are multiple possible incremental support:
> > > > >
> > > > > 1. Scm related: do a status and rebuild downstream reactor
> > > > > 2. Full and module build graph: seems it is the one you target, ie
> > > bypass
> > > > > modules without change. Note that it only works if upstream graph is
> > > > > taken
> > > > > into account.
> > > > > 3. Full build: each mojo has incremental support so the full build
> > gets
> > > > > it.
> > > > > Issue is that it requires each mojo to know if it needs to be
> > executed
> > > or
> > > > > give enough info to the mojo executor to do so (gradle requires all
> > > > > inputs/outputs to assume this state - which is still just an
> > heuristic
> > > > > and
> > > > > not 100% reliable).
> > > > >
> > > > > In current state, 2. sounds like a good option since 3 can require  a
> > > > > loot
> > > > > of work for external plugins (today's builds have a lot more of not
> > > maven
> > > > > provide plugins than core plugins).
> > > > > Now, we should be able to activate it or not so having a
> > cacheLocation
> > > > > config in settings.xml can be good.
> > > > >
> > > > > Side notes:
> > > > >
> > > > > 1. having it on by default will break builds - reactor is
> > deterministic
> > > > > and
> > > > > bypassing a module can break a build since it can init maven
> > > properties -
> > > > > for ex - for 

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
HI Enrico
Thanks for feedback. that's a side discussion for best approach for projects 
layouts. Monorepo has own own advocates and it is easy to find posts describing 
why google, microsoft or facebook go monorepo. 
Unlike of way of thought, we are ready to go globally in case of emergency 
scenario. If say zero-day vulnerability is discovered in some of low-level 
widely reused core libraries, we need just one click to build/test/deploy and 
safely go live globally with whole estate updated on scale of thousands of 
processes. And you know, there are people in the world who think that scattered 
across small repos codebase is difficult to maintain and snapshots are evil. It 
all depends.
Honestly, i think it will be it's a kind of reversed approach them you build 
system defines how your software development processes work. Google has own 
vision and just implemented Bazel and this is correct approach. Btw Bazel is 
perfect for such scenario, but costly to migrate on for existing project.

So if you choose monorepo as we did it is normal to work just on a part of 
project. You just need a way to deal with scalability challenges:
a) you hit hardware and infrastructure limitations and need to address them in 
some way.
b) need to have incremental build so you can work on subpart of project but 
contribute to shared codebase

Sincerely yours, Aleks

On 2019/09/14 08:41:37, Enrico Olivelli  wrote: 
> I feel that in general having an huge monolithic project is kind of a
> project-smell.
> Btw I have some big project with 100+ modules so I can see your pain.
> In the daywork experience a single developer doesn't work on all of the
> modules but usually you touch 1-2 modules and maybe some integration/system
> test.
> If you need to rebuild the full project for every change maybe there is
> something wrong with the overall design.
> 
> I think you have you motivations for your layout, so let's talk about your
> proposal.
> 
> If you have a way to split your project in subsystems you can use some
> shared remote repository for deploying snapshots in order to share
> intermediate results with other developers
> 
> If your goal is to be ready for releases I don't get your point. Usually
> you work with snapshots and for a release you have to rebuild one time and
> only once the full codebase in order to ensure that you a consistent build
> of the project.
> With all of this kind of temporary caches how do you ensure that the final
> artifacts are the intended ones?
> 
> 
> Beside note: this is not a real VOTE thread
> 
> Just my 2 cents
> 
> don't get me wrong, I admire your will to improve Maven ecosystem with this
> cool feature! Thank you for contribution your work. We will try to get the
> best
> 
> Enrico
> 
> Il sab 14 set 2019, 08:29 Laird Nelson  ha scritto:
> 
> > On Fri, Sep 13, 2019 at 11:01 PM Alexander Ashitkin <
> > alexander.ashit...@db.com> wrote:
> >
> > > This feature is true incremental build – you don’t build modules which
> > > were not changed at all and build only modified/changed ones.
> > >
> >
> > Suppose module B depends on module A and I change A.  Does B get rebuilt in
> > your system?
> >
> > Best,
> > Laird
> >
> 

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



Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
Hi Laird
yes, in this case B will be rebuilt - that's on of the basic requirements.

Thanks in advance

On 2019/09/14 06:29:00, Laird Nelson  wrote: 
> On Fri, Sep 13, 2019 at 11:01 PM Alexander Ashitkin <
> alexander.ashit...@db.com> wrote:
> 
> > This feature is true incremental build – you don’t build modules which
> > were not changed at all and build only modified/changed ones.
> >
> 
> Suppose module B depends on module A and I change A.  Does B get rebuilt in
> your system?
> 
> Best,
> Laird
> 

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



RE: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
Hi
Yes we tried, but Takari is a bit different story – it’s a smarter scheduler 
which gives you some boost over default lifecycle scheduler, but still require 
you to build your modules.
This feature is true incremental build – you don’t build modules which were not 
changed at all and build only modified/changed ones. Required build state for 
skipped modules is restored from cache.
So for our 600 modules build time is down to 1 minute from ~40 minutes and even 
single threaded build benefits from the cache. Takari just doesn’t do that.

Kindly yours
Aleks

From: Tamás Cservenák [mailto:ta...@cservenak.net]
Sent: Friday, September 13, 2019 4:54 PM
To: Maven Developers List 
Cc: Alexander Ashitkin 
Subject: Re: [VOTE] Maven incremental build for BIG-sized projects with local 
and remote caching

Hi there,

just a shot in a dark: Have you tried any of the existing stuff, like Takari 
Lifecycle before modding Maven itself? (http://takari.io/book/40-lifecycle.html)

Thanks,
T

On Fri, Sep 13, 2019 at 10:46 PM Maximilian Novikov 
mailto:maximilian.novi...@db.com>> wrote:
Hi All,

We want to create upstream change to Maven to support true incremental build 
for big-sized projects.
To raise a pull request we have to pass long chain of Deutsche Bank’s internal 
procedures. So, before starting the process we would like to get your feedback 
regarding this feature.

Motivation:

Our project is hosted in mono-repo and contains ~600 modules. All modules has 
the same SNAPSHOT version.
There are lot of test automation around this, everything is tested before merge 
into release branch.

Current setup helps us to simplify build/release/dependency management for 10+ 
teams those contribute into codebase. We can release everything in 1-click.
The major drawback of such approach is build time: full local build took 45-60 
min (-T8), CI build ~25min(-T16).

To speed-up our build we needed 2 features: incremental build and shared cache.
Initially we started to think about migration to Gradle or Bazel. As migration 
costs for the mentioned tools were too high, we decided to add similar 
functionality into Maven.

Current results we get: 1-2 mins for local build(-T8) if build was cached by 
CI, CI build ~5 mins (-T16).

Feature description:

The idea is to calculate checksum for inputs and save outputs in cache.
Each node checksum calculated with:


• Effective POM hash

• Sources hash

• Dependencies hash (dependencies within multi-module project)

Project sources inputs are searched inside project + all paths from plugins 
configuration:
How does it work in practice:



1.   CI: runs builds and stores outputs in shared cache

2.   CI: reuse outputs for same inputs, so time is decreasing

3.   Locally: when I checkout branch and run ‘install’ for whole project, I 
get all actual snapshots from remote cache for this branch

4.   Locally: if I change multiple modules in tree, only changed subtree is 
rebuilt

Impact on current Maven codebase is very localized (MojoExecutor, where we 
injected cache controller).
Caching can be activated/deactivated by property, so current maven flow will 
work as is.

And the big plus is that you don’t need to re-work your current project. 
Caching should work out of box, just need to add config in .mvn folder.

Please let us know what do you think. We are ready to invest in this feature 
and address any further feedback.

Kind regards,
Max



---
This e-mail may contain confidential and/or privileged information. If you are 
not the intended recipient (or have received this e-mail in error) please 
notify the sender immediately and delete this e-mail. Any unauthorized copying, 
disclosure or distribution of the material in this e-mail is strictly forbidden.

Please refer to https://www.db.com/disclosures for additional EU corporate and 
regulatory disclosures and to 
http://www.db.com/unitedkingdom/content/privacy.htm for information about 
privacy.


---
Die Europäische Kommission hat unter http://ec.europa.eu/consumers/odr/ eine 
Europäische Online-Streitbeilegungsplattform (OS-Plattform) errichtet. 
Verbraucher können die OS-Plattform für die außergerichtliche Beilegung von 
Streitigkeiten aus Online-Verträgen mit in der EU niedergelassenen Unternehmen 
nutzen.

Informationen (einschließlich Pflichtangaben) zu einzelnen, innerhalb der EU 
tätigen Gesellschaften und Zweigniederlassungen des Konzerns Deutsche Bank 
finden Sie unter https://www.deutsche-bank.de/Pflichtangaben. Diese E-Mail 
enthält vertrauliche und/ oder rechtlich geschützte Informationen. Wenn Sie 
nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, 
informieren Sie bitte sofort den Absender und vernichten Sie diese E-Mail. Das 
unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail ist nicht 
gestattet.

The European Commission has established a European online dispute resolution 
platform (OS platform) under http://ec.europa.eu/consume

RE: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
This feature caches Tests results too, but granularity is per-project. In our 
case we even cache result of long-running integration tests as well so 
developers rerun unit/integration tests only for changed projects and 
dependents from them. That’s significant time win.
In our multi module project if you change just 1 module of 600, you invalidate 
only that module and run test for that module.

If project is invalidated by changed inputs – it will be rebuild from scratch 
by usual plugins regardless of which features are supported by particular 
plugin. In case of Takari and incremental compiler that will result in faster 
compilation for second and consequent runs.
Any plugin could benefit from cache/incremental nature for multi-module project.

Kindly yours
Aleks

From: Tibor Digana [mailto:tibordig...@apache.org]
Sent: Friday, September 13, 2019 5:18 PM
To: Maven Developers List 
Cc: Alexander Ashitkin 
Subject: Re: [VOTE] Maven incremental build for BIG-sized projects with local 
and remote caching

In theory, the incremental compiler would make it faster.
But this can be told only if you present a demo project with has trivial tests 
taking much less time to complete than the compiler.

In reality the tests in huge projects take significantly longer time than the 
compiler.
Some developers say "switch off all the tests" in the release phase but that's 
wrong because then the quality goes down and methodologies are broken.

I can see a big problem that we do not have an interface between Surefire and 
Compiler plugin negotiating which tests have been modified including modules 
and classes in the entire structure.

Having incremental compiler is easy, just use compiler:3.8.1 or use the Takari 
compiler.
But IMO the biggest benefit in performance would be after having the truly 
incremental test executor.

On Fri, Sep 13, 2019 at 10:46 PM Maximilian Novikov 
mailto:maximilian.novi...@db.com>> wrote:
Hi All,

We want to create upstream change to Maven to support true incremental build 
for big-sized projects.
To raise a pull request we have to pass long chain of Deutsche Bank’s internal 
procedures. So, before starting the process we would like to get your feedback 
regarding this feature.

Motivation:

Our project is hosted in mono-repo and contains ~600 modules. All modules has 
the same SNAPSHOT version.
There are lot of test automation around this, everything is tested before merge 
into release branch.

Current setup helps us to simplify build/release/dependency management for 10+ 
teams those contribute into codebase. We can release everything in 1-click.
The major drawback of such approach is build time: full local build took 45-60 
min (-T8), CI build ~25min(-T16).

To speed-up our build we needed 2 features: incremental build and shared cache.
Initially we started to think about migration to Gradle or Bazel. As migration 
costs for the mentioned tools were too high, we decided to add similar 
functionality into Maven.

Current results we get: 1-2 mins for local build(-T8) if build was cached by 
CI, CI build ~5 mins (-T16).

Feature description:

The idea is to calculate checksum for inputs and save outputs in cache.
Each node checksum calculated with:


• Effective POM hash

• Sources hash

• Dependencies hash (dependencies within multi-module project)

Project sources inputs are searched inside project + all paths from plugins 
configuration:
How does it work in practice:



1.   CI: runs builds and stores outputs in shared cache

2.   CI: reuse outputs for same inputs, so time is decreasing

3.   Locally: when I checkout branch and run ‘install’ for whole project, I 
get all actual snapshots from remote cache for this branch

4.   Locally: if I change multiple modules in tree, only changed subtree is 
rebuilt

Impact on current Maven codebase is very localized (MojoExecutor, where we 
injected cache controller).
Caching can be activated/deactivated by property, so current maven flow will 
work as is.

And the big plus is that you don’t need to re-work your current project. 
Caching should work out of box, just need to add config in .mvn folder.

Please let us know what do you think. We are ready to invest in this feature 
and address any further feedback.

Kind regards,
Max



---
This e-mail may contain confidential and/or privileged information. If you are 
not the intended recipient (or have received this e-mail in error) please 
notify the sender immediately and delete this e-mail. Any unauthorized copying, 
disclosure or distribution of the material in this e-mail is strictly forbidden.

Please refer to https://www.db.com/disclosures for additional EU corporate and 
regulatory disclosures and to 
http://www.db.com/unitedkingdom/content/privacy.htm for information about 
privacy.


---
Die Europäische Kommission hat unter http://ec.europa.eu/consumers/odr/ eine 
Europäische Online-Streitbeilegungsplattform (OS-Plattform) erricht

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
Indeed we have a kind of the option 2 with variations. Current implementation 
is opt-in feature driven by configuration with some metadata of required cache 
behavior and hints.

Maven extensions is the option, but we would love to have it in maven itself 
which is in interest of maven community i believe. Extension is a way we are 
trying to avoid and even not sure it could be implemented as extension as it 
requires changes in maven core.

Thanks in advance, Aleks

On 2019/09/13 21:37:15, Romain Manni-Bucau  wrote: 
> There are multiple possible incremental support:
> 
> 1. Scm related: do a status and rebuild downstream reactor
> 2. Full and module build graph: seems it is the one you target, ie bypass
> modules without change. Note that it only works if upstream graph is taken
> into account.
> 3. Full build: each mojo has incremental support so the full build gets it.
> Issue is that it requires each mojo to know if it needs to be executed or
> give enough info to the mojo executor to do so (gradle requires all
> inputs/outputs to assume this state - which is still just an heuristic and
> not 100% reliable).
> 
> In current state, 2. sounds like a good option since 3 can require  a loot
> of work for external plugins (today's builds have a lot more of not maven
> provide plugins than core plugins).
> Now, we should be able to activate it or not so having a cacheLocation
> config in settings.xml can be good.
> 
> Side notes:
> 
> 1. having it on by default will break builds - reactor is deterministic and
> bypassing a module can break a build since it can init maven properties -
> for ex - for next modules
> 2. You cant find all in/out paths from the pom in general so your algo is
> not generic, a meta config can be needed in .mvn
> 3. We should let a mojo be able to disable that to replace default logic
> (surefire is a good example where it must be refined and it can save hours
> there ;))
> 4. Let's try to impl it as a mvn extension first then if it works well on
> multiple big project get it to core?
> 
> Romain
> 
> 
> 
> Le ven. 13 sept. 2019 à 23:18, Tibor Digana  a
> écrit :
> 
> > In theory, the incremental compiler would make it faster.
> > But this can be told only if you present a demo project with has trivial
> > tests taking much less time to complete than the compiler.
> >
> > In reality the tests in huge projects take significantly longer time than
> > the compiler.
> > Some developers say "switch off all the tests" in the release phase but
> > that's wrong because then the quality goes down and methodologies are
> > broken.
> >
> > I can see a big problem that we do not have an interface between Surefire
> > and Compiler plugin negotiating which tests have been modified including
> > modules and classes in the entire structure.
> >
> > Having incremental compiler is easy, just use compiler:3.8.1 or use the
> > Takari compiler.
> > But IMO the biggest benefit in performance would be after having the truly
> > incremental test executor.
> >
> > On Fri, Sep 13, 2019 at 10:46 PM Maximilian Novikov <
> > maximilian.novi...@db.com> wrote:
> >
> > > Hi All,
> > >
> > >
> > >
> > > *We want to create upstream change to Maven* to support true incremental
> > > build for big-sized projects.
> > >
> > > To raise a pull request we have to pass long chain of Deutsche Bank’s
> > > internal procedures. So, *before starting the process we would like to
> > > get your feedback regarding this feature*.
> > >
> > >
> > >
> > > *Motivation:*
> > >
> > >
> > >
> > > Our project is hosted in mono-repo and contains ~600 modules. All modules
> > > has the same SNAPSHOT version.
> > >
> > > There are lot of test automation around this, everything is tested before
> > > merge into release branch.
> > >
> > >
> > >
> > > Current setup helps us to simplify build/release/dependency management
> > for
> > > 10+ teams those contribute into codebase. We can release everything in
> > > 1-click.
> > >
> > > The major drawback of such approach is build time: *full local build took
> > > 45-60 min (*-T8)*, CI build ~25min(*-T16*)*.
> > >
> > >
> > >
> > > To speed-up our build we needed 2 features: incremental build and shared
> > > cache.
> > >
> > > Initially we started to think about migration to Gradle or Bazel. As
> > > migration costs for the mentioned tools were too high, we decided to add
> > > similar functionality into Maven.
> > >
> > >
> > >
> > > Current results we get: *1-2 mins for local build(*-T8*)* if build was
> > > cached by CI*, CI build ~5 mins (*-T16*).*
> > >
> > >
> > >
> > > *Feature description:*
> > >
> > >
> > >
> > > The idea is to calculate checksum for inputs and save outputs in cache.
> > >
> > > [image: image2019-8-27_20-0-14.png]
> > >
> > > Each node checksum calculated with:
> > >
> > >
> > >
> > > · Effective POM hash
> > >
> > > · Sources hash
> > >
> > > · Dependencies hash (dependencies within multi-module project)
> > >
> > >
> > >
> > > Project sources 

Re: [VOTE] Maven incremental build for BIG-sized projects with local and remote caching

2019-09-14 Thread Alexander Ashitkin
The feature doesn't do per Test/Classes analysis. Granularity of incremental 
build is per project - if project is invalidated by changes in 
dependencies/source code/plugins it will be rebuilt fully. So, single module of 
multi-module build doesn't receive any increment, but for multi module projects 
with hundreds of modules just skipping not affected part of graph is a huge win.

Sincerely yours, Aleks

On 2019/09/13 21:48:37, Tibor Digana  wrote: 
> Disabling a Surefire/Failsafe in a particular module is easy but it won't
> gain the performance so much if you do not analyse the relations between
> classes and the test.
> 
> If you analyse the relations then you can easily fetch the list of the
> tests in -Dtests or in the included/excludedTests. So everything is in
> Surefire but I guess that the analysis of the code would be so time
> demanding that it would be all contraprodactive effort on our side.
> 
> Regarding the cache, the repo is the cache. And if the CI build deletes the
> repo, we would not know it today.
> So these performance improvements must be optional feature only enabled by
> the user and not by default.
> 
> On Fri, Sep 13, 2019 at 11:37 PM Romain Manni-Bucau 
> wrote:
> 
> > There are multiple possible incremental support:
> >
> > 1. Scm related: do a status and rebuild downstream reactor
> > 2. Full and module build graph: seems it is the one you target, ie bypass
> > modules without change. Note that it only works if upstream graph is taken
> > into account.
> > 3. Full build: each mojo has incremental support so the full build gets it.
> > Issue is that it requires each mojo to know if it needs to be executed or
> > give enough info to the mojo executor to do so (gradle requires all
> > inputs/outputs to assume this state - which is still just an heuristic and
> > not 100% reliable).
> >
> > In current state, 2. sounds like a good option since 3 can require  a loot
> > of work for external plugins (today's builds have a lot more of not maven
> > provide plugins than core plugins).
> > Now, we should be able to activate it or not so having a cacheLocation
> > config in settings.xml can be good.
> >
> > Side notes:
> >
> > 1. having it on by default will break builds - reactor is deterministic and
> > bypassing a module can break a build since it can init maven properties -
> > for ex - for next modules
> > 2. You cant find all in/out paths from the pom in general so your algo is
> > not generic, a meta config can be needed in .mvn
> > 3. We should let a mojo be able to disable that to replace default logic
> > (surefire is a good example where it must be refined and it can save hours
> > there ;))
> > 4. Let's try to impl it as a mvn extension first then if it works well on
> > multiple big project get it to core?
> >
> > Romain
> >
> >
> >
> > Le ven. 13 sept. 2019 à 23:18, Tibor Digana  a
> > écrit :
> >
> > > In theory, the incremental compiler would make it faster.
> > > But this can be told only if you present a demo project with has trivial
> > > tests taking much less time to complete than the compiler.
> > >
> > > In reality the tests in huge projects take significantly longer time than
> > > the compiler.
> > > Some developers say "switch off all the tests" in the release phase but
> > > that's wrong because then the quality goes down and methodologies are
> > > broken.
> > >
> > > I can see a big problem that we do not have an interface between Surefire
> > > and Compiler plugin negotiating which tests have been modified including
> > > modules and classes in the entire structure.
> > >
> > > Having incremental compiler is easy, just use compiler:3.8.1 or use the
> > > Takari compiler.
> > > But IMO the biggest benefit in performance would be after having the
> > truly
> > > incremental test executor.
> > >
> > > On Fri, Sep 13, 2019 at 10:46 PM Maximilian Novikov <
> > > maximilian.novi...@db.com> wrote:
> > >
> > > > Hi All,
> > > >
> > > >
> > > >
> > > > *We want to create upstream change to Maven* to support true
> > incremental
> > > > build for big-sized projects.
> > > >
> > > > To raise a pull request we have to pass long chain of Deutsche Bank’s
> > > > internal procedures. So, *before starting the process we would like to
> > > > get your feedback regarding this feature*.
> > > >
> > > >
> > > >
> > > > *Motivation:*
> > > >
> > > >
> > > >
> > > > Our project is hosted in mono-repo and contains ~600 modules. All
> > modules
> > > > has the same SNAPSHOT version.
> > > >
> > > > There are lot of test automation around this, everything is tested
> > before
> > > > merge into release branch.
> > > >
> > > >
> > > >
> > > > Current setup helps us to simplify build/release/dependency management
> > > for
> > > > 10+ teams those contribute into codebase. We can release everything in
> > > > 1-click.
> > > >
> > > > The major drawback of such approach is build time: *full local build
> > took
> > > > 45-60 min (*-T8)*, CI build ~25min(*-T16*)*.
> > > >
> > > >
> >