Not sure how I've missed this post. Have you tried this build with the
master build of Maven?
MNG-6566 [1] should prevent any unnecessary double executions, thus
optimizing the buildplan.
I'm interested if this will solve the problem at hand.

Martin

[1] https://issues.apache.org/jira/browse/MNG-6566

Op di 18 mei 2021 om 14:57 schreef Guillaume Nodet <gno...@apache.org>:

> I'm looking a bit at aggregator goals.
> At first glance, it seems most of the problem comes from the fact that the
> build ordering is done mostly per-project.  This causes obvious problems
> for aggregators when a mojo needs a given phase to be executed for all
> children before it can run (for example the compilation phase before
> creating the javadoc).  Another problem comes from the clean task which has
> obvious side effects.  Calling clean with an aggregator goal involved in
> the build seems like a recipe for problems...
>
> Would you see bad side effects to split the build in smaller chunks
> (basically down to a mojo execution) so that ordering can be changed in a
> more meaningful way ? For example when running an aggregate javadoc, the
> top level project would be built first until before the javadoc aggregate
> goal.  The build would then go to all other projects (like the forked
> lifecycle) until all required goals have been run, then resume from the
> javadoc goal.
> Note that with the current behavior, when you run "clean verify", the
> execution is the following
>
> [INFO] Scanning for projects...
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Reactor Build Order:
> [INFO]
> [INFO] forked
> [pom]
> [INFO] forked-mod1
>  [jar]
> [INFO] forked-mod2
>  [jar]
> [INFO]
> [INFO] ---------------< org.mvndaemon.mvnd.test.forked:forked
> >----------------
> [INFO] Building forked 0.0.1-SNAPSHOT
> [1/3]
> [INFO] --------------------------------[ pom
> ]---------------------------------
> [INFO]
> [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ forked ---
> [INFO] >>> maven-javadoc-plugin:3.2.0:aggregate-jar (aggregate-jar) >
> compile @ forked >>>
> [INFO]
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> [INFO] Forking forked-mod1 0.0.1-SNAPSHOT
> [INFO]
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @
> forked-mod1 ---
> [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @
> forked-mod1 ---
> [INFO]
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> [INFO] Forking forked-mod2 0.0.1-SNAPSHOT
> [INFO]
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @
> forked-mod2 ---
> [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @
> forked-mod2 ---
> [INFO] <<< maven-javadoc-plugin:3.2.0:aggregate-jar (aggregate-jar) <
> compile @ forked <<<
> [INFO] --- maven-javadoc-plugin:3.2.0:aggregate-jar (aggregate-jar) @
> forked ---
> [INFO]
> [INFO] -------------< org.mvndaemon.mvnd.test.forked:forked-mod1
> >-------------
> [INFO] Building forked-mod1 0.0.1-SNAPSHOT
>  [2/3]
> [INFO] --------------------------------[ jar
> ]---------------------------------
> [INFO]
> [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ forked-mod1 ---
> [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @
> forked-mod1 ---
> [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @
> forked-mod1 ---
> [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)
> @ forked-mod1 ---
> [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @
> forked-mod1 ---
> [INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ forked-mod1
> ---
> [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ forked-mod1 ---
> [INFO]
> [INFO] -------------< org.mvndaemon.mvnd.test.forked:forked-mod2
> >-------------
> [INFO] Building forked-mod2 0.0.1-SNAPSHOT
>  [3/3]
> [INFO] --------------------------------[ jar
> ]---------------------------------
> [INFO]
> [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ forked-mod2 ---
> [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @
> forked-mod2 ---
> [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @
> forked-mod2 ---
> [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)
> @ forked-mod2 ---
> [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @
> forked-mod2 ---
> [INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ forked-mod2
> ---
> [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ forked-mod2 ---
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Reactor Summary for forked 0.0.1-SNAPSHOT:
> [INFO]
> [INFO] forked ............................................. SUCCESS [
>  1.921 s]
> [INFO] forked-mod1 ........................................ SUCCESS [
>  0.498 s]
> [INFO] forked-mod2 ........................................ SUCCESS [
>  0.046 s]
> [INFO]
> ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Total time:  2.535 s
> [INFO] Finished at: 2021-05-18T14:32:09+02:00
> [INFO]
> ------------------------------------------------------------------------
>
>   As you can see, the resources and compile goals are run twice for each
> project.  Furthermore, given the clean goal is in the loop, the compiler
> actually compiles things twice.
>
> The build plan could be rewritten as
>
> [INFO] Scanning for projects...
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Reactor Build Order:
> [INFO]
> [INFO] forked
> [pom]
> [INFO] forked-mod1
>  [jar]
> [INFO] forked-mod2
>  [jar]
> [INFO]
> [INFO] ---------------< org.mvndaemon.mvnd.test.forked:forked
> >----------------
> [INFO] Building forked 0.0.1-SNAPSHOT
> [1/3]
> [INFO] --------------------------------[ pom
> ]---------------------------------
> [INFO]
> [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ forked ---
> ... normal lifecycle interrupted because the next goal is the aggregator
> goal ...
> [INFO]
> [INFO] -------------< org.mvndaemon.mvnd.test.forked:forked-mod1
> >-------------
> [INFO] Building forked-mod1 0.0.1-SNAPSHOT
>  [2/3]
> [INFO] --------------------------------[ jar
> ]---------------------------------
> [INFO]
> [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ forked-mod1 ---
> [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @
> forked-mod1 ---
> [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @
> forked-mod1 ---
> ... interrupting forked-mod1 build as it reached the required point
> execution ...
> [INFO]
> [INFO] -------------< org.mvndaemon.mvnd.test.forked:forked-mod2
> >-------------
> [INFO] Building forked-mod2 0.0.1-SNAPSHOT
>  [3/3]
> [INFO] --------------------------------[ jar
> ]---------------------------------
> [INFO]
> [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ forked-mod2 ---
> [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @
> forked-mod2 ---
> [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @
> forked-mod2 ---
> ... interrupting forked-mod2 build as it reached the required point
> execution ...
> ... resuming the top level project...
> [INFO]
> [INFO] ---------------< org.mvndaemon.mvnd.test.forked:forked
> >----------------
> [INFO] Building forked 0.0.1-SNAPSHOT
> [1/3]
> [INFO] --------------------------------[ pom
> ]---------------------------------
> [INFO]
> [INFO] --- maven-javadoc-plugin:3.2.0:aggregate-jar (aggregate-jar) @
> forked ---
> ... then resuming the forked-mod1 project...
> [INFO]
> [INFO] -------------< org.mvndaemon.mvnd.test.forked:forked-mod1
> >-------------
> [INFO] Building forked-mod1 0.0.1-SNAPSHOT
>  [2/3]
> [INFO] --------------------------------[ jar
> ]---------------------------------
> [INFO]
> [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)
> @ forked-mod1 ---
> [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @
> forked-mod1 ---
> [INFO] --- maven-javadoc-plugin:3.2.0:aggregate-jar (aggregate-jar) @
> forked ---
> [INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ forked-mod1
> ---
> [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ forked-mod1 ---
> ... and resuming the forked-mod2 project...
> [INFO]
> [INFO] -------------< org.mvndaemon.mvnd.test.forked:forked-mod2
> >-------------
> [INFO] Building forked-mod2 0.0.1-SNAPSHOT
>  [3/3]
> [INFO] --------------------------------[ jar
> ]---------------------------------
> [INFO]
> [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources)
> @ forked-mod2 ---
> [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @
> forked-mod2 ---
> [INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ forked-mod2
> ---
> [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ forked-mod2 ---
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Reactor Summary for forked 0.0.1-SNAPSHOT:
> [INFO]
> [INFO] forked ............................................. SUCCESS [
>  1.921 s]
> [INFO] forked-mod1 ........................................ SUCCESS [
>  0.498 s]
> [INFO] forked-mod2 ........................................ SUCCESS [
>  0.046 s]
> [INFO]
> ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Total time:  2.535 s
> [INFO] Finished at: 2021-05-18T14:32:09+02:00
> [INFO]
> ------------------------------------------------------------------------
>
> This would also solve the parallel build problem because each project would
> not be able to be both "cleaned" and "compiled" concurrently, which is
> currently possible in the current state.
>
>
> Le lun. 17 mai 2021 à 14:06, Guillaume Nodet <gno...@apache.org> a écrit :
>
> > I've raised https://issues.apache.org/jira/browse/MNG-7156
> >
> > Le mer. 12 mai 2021 à 17:57, Falko Modler <f.mod...@gmx.net> a écrit :
> >
> >> Hi Guillaume,
> >>
> >> aggregation goals and parallel builds in combination are a bit of a
> >> mess, e.g.:
> >>
> >> - https://issues.apache.org/jira/browse/MNG-6843
> >> - https://github.com/apache/maven/pull/413
> >> - https://www.mail-archive.com/dev@maven.apache.org/msg123439.html
> >>
> >> Cheers,
> >>
> >> Falko
> >>
> >> Am 12.05.2021 um 17:25 schrieb Guillaume Nodet:
> >> > Hi
> >> >
> >> > I've analyzed a bug reported on mvnd this afternoon (
> >> > https://github.com/mvndaemon/mvnd/issues/408).  It appears that the
> >> parent
> >> > pom executes the javadoc aggregate goal, which forks the lifecycle of
> >> the
> >> > children modules in order to compile the sources.  In a traditional
> >> build,
> >> > this does not cause any real problem, but in a parallel build, a
> clean
> >> > verify can definitely cause issues if the forked lifecycle and the
> >> normal
> >> > project build (and especially the clean) are run concurrently.
> >> > This definitely looks like an issue to me.  Any idea where I should
> >> look at
> >> > how to solve the problem ?  I wonder if the MojoExecutor should
> somehow
> >> > delegate to the Builder which is responsible for synchronizing the
> >> > executions in the case of a multithreaded build...
> >> > Thoughts ?
> >> >
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
> >> For additional commands, e-mail: dev-h...@maven.apache.org
> >>
> >>
> >
> > --
> > ------------------------
> > Guillaume Nodet
> >
> >
>
> --
> ------------------------
> Guillaume Nodet
>

Reply via email to