Le sam. 14 sept. 2019 à 19:34, Maximilian Novikov <maximilian.novi...@db.com>
a écrit :

> Classification: For internal use only
>
> Ok, looks like this is the only option for us: create extension and
> override MojoExecutor.
>
> > The only challenge is an exhaustive test suite since your current impl
> can easily fake a passing build (as gradle does today if you don't disable
> the daemon and state cache on the CI).
> I assume we are safe here. Our solution provides incremental build with
> per project granularity. So there is no need in smart "test relationship
> discovery" within a project.
>

Well, for you I trust you, but not as a generic core maven feature so if it
stays like that it can't exit extension state IMHO.



> -----Original Message-----
> From: Romain Manni-Bucau [mailto:rmannibu...@gmail.com]
> Sent: Saturday, September 14, 2019 11:48 AM
> To: Maven Developers List <dev@maven.apache.org>
> Subject: Re: [VOTE] Maven incremental build for BIG-sized projects with
> local and remote caching
>
> Le sam. 14 sept. 2019 à 08:00, Alexander Ashitkin <ashitkin.a...@gmail.com>
> 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 <rmannibu...@gmail.com>
> 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 <tibordig...@apache.org>
> > > 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
> > > > > 10+ 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 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.
> > > > >
> > > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org For
> > additional commands, e-mail: dev-h...@maven.apache.org
> >
> >
>
>
> ---
> 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.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> For additional commands, e-mail: dev-h...@maven.apache.org
>

Reply via email to