This discussion is about aggregators, and not about parent.
Quite often an aggregator is also the parent of its modules, but that is not 
required.

Calling -pl <aggregator> with Maven3 behaves unnatural: if you want to call a 
specific aggregator, you want its modules to be built.

Hence I still support the change to make this the default behavior.

In those rare cases where you want to build it only because it is a parent (and 
not for the aggregator part), it makes sense to add --non-recursive

All the options you had in Maven 3 for selecting a subset of a multimodule 
project are still available in Maven 4.

To me the new behavior is much better. Maven 4 is the perfect version to 
introduce these changes.

thanks,
Robert



 
On 26-2-2021 14:02:29, Romain Manni-Bucau <rmannibu...@gmail.com> wrote:
I still think it is wrong to have such a global toggle + break backward
compatibility (-pl + -N is *already* used for what it is today which is not
the proposal but -pl parent without -N is also already used and works well).
You can also take into consideration that -pl -module -N meaning is
completely broken with this new definition.
For these 3 reasons I think we shouldn't break current API and either add a
new toggle/syntax (>parent or !!parent or whatever forbidden character in
module names/folder fits you) or not do anything since nothing prevents to
build a subtree with -pl as of today, it is just a bit more verbose than a
single module selection.

Romain Manni-Bucau
@rmannibucau | Blog
| Old Blog
| Github |
LinkedIn | Book



Le ven. 26 févr. 2021 à 13:16, Martin Kanters a
écrit :

> I've had a talk this morning with Robert Scholte and Maarten Mulders about
> this, since I had the feeling we were not getting further in this mail
> thread.
>
> First of all, we all agreed that we definitely needed functionality for
> both recursive and non-recursive project selection. What Robert prefers is
> the following: reusing existing flags if possible and no extra magic in the
> -pl syntax. So that boils down to "-pl + -N". By default, project selection
> will be recursive and by passing -N to it, it will be switched to
> non-recursive.
>
> While first I was hesitant on this solution, I realize now that this is the
> most user-friendly solution. Technically -N might mean different things
> when used with and without -pl, but functionally it's the same.
>
> Two points of concern were:
> - "it's a global switch, we cannot select a recursive and non-recursive
> project in one maven-command". That's true, but that's currently also not
> possible in 3.6.3 (automatically) and we should find the balance between
> usability and ensuring every possible scenario is possible.
> - "it might cause a performance degradation". This is not true when the
> current behavior of -N will only change when used together with -pl.
>
> We’ll continue work in this direction. Feel free to raise any new concerns
> if they arise.
>
> Martin
>
> Op zo 21 feb. 2021 om 22:29 schreef Romain Manni-Bucau
> rmannibu...@gmail.com>:
>
> > Put some comments inline but agree another minilanguage solution works.
> > Maybe -pl !!parent?
> >
> > Le dim. 21 févr. 2021 à 22:08, Martin Kanters
> a
> > écrit :
> >
> > > Romain: 2 has overlap if I'm not mistaken, what if the user invokes:
> mvn
> > > -pl project-a -plr !project-a. Perhaps the user should be able to only
> > > select aggregator poms via -plr..
> > > And I'm not sure how the alias function would work. I assume something
> > > like:
> > >
> >
> > Yes but same as today with -pl foo -pl!foo. We can fail in such a case
> too
> > (my preference). Then more specific wins, ie -plr parent -pl !parent/foo
> is
> > obvious.
> >
> >
> > - pom.xml config (psuedo code): -pl parent, submodule-a,
> > > submodule-b, submodule-c
> > > - invocation mvn alias:rec.
> > > If that assumption is correct, the user would have to manually maintain
> > the
> > > list of modules of "parent", while Maven can do this perfectly.
> > >
> >
> > Right, is it an issue? I dont think. Opposite is true too, you need to
> > maintain children exclusions in general (all but "build" child module or
> > all but front or all but doc etc) so 1-1 IMHO.
> >
> >
> > > Falko: I don't intend to drop the recursive behavior either :)
> > > I don't dislike the idea of adding a suffix to a project to include
> > > everything recursively and + might fix the shell expansion issue
> (which *
> > > has).
> > > I guess this might be a nice alternative as well, but I'm not sure if
> > > everybody likes increasing the complexity of the -pl syntax. "-pl
> > !?proj/+"
> > > or "-pl !?group:artifact+" is starting to look a bit like magic.. :)
> >
> >
> > > Martin
> > >
> > > Op zo 21 feb. 2021 om 21:38 schreef Falko Modler :
> > >
> > > > My 2 cents: Please don't drop the recursive behavior again because it
> > is
> > > > really useful!
> > > >
> > > > Crazy idea (just brainstorming here):
> > > > -pl foo builds only foo
> > > > -pl foo+ builds foo and its children, wherever they are exactly
> > > >
> > > > This would also co-exist with the ! and ? prefixes.
> > > >
> > > > PS: Since if often use shell path completion, -pl foo/+ should have
> the
> > > > same effect, ideally.
> > > >
> > > > Cheers,
> > > >
> > > > Falko
> > > >
> > > > Am 21.02.2021 um 21:09 schrieb Romain Manni-Bucau:
> > > > > Le dim. 21 févr. 2021 à 20:39, Martin Kanters
> > > martinkant...@apache.org>
> > > > a
> > > > > écrit :
> > > > >
> > > > >> Hm, so I guess that's indeed a valid reason to keep the old
> > > > functionality
> > > > >> working. Thanks for the enlightenment, Romain.
> > > > >> Still I think it makes more sense to make project selection
> > recursive
> > > by
> > > > >> default, but it's not straightforward to come up with a nice
> > > > combination of
> > > > >> flags.
> > > > >> Let's summarize:
> > > > >>
> > > > >> 1. -pl + -N:
> > > > >> While it does sound like the flag to re-use, I do not like the
> fact
> > > > that -N
> > > > >> works differently than normal when used together with -pl. The
> code
> > > > would
> > > > >> become more complex and the flag hard to explain to users.
> > > > >>
> > > > > Does not really solves the issue as soon as you use it for 2
> > different
> > > > kind
> > > > > of modules until it becomes -plN which is 4 IMHO
> > > > >
> > > > >
> > > > >> 2. -pl + -plr:
> > > > >> This gives the most flexibility, giving users the option to select
> > > > >> non-recursive and recursive projects in one command. The two flags
> > > have
> > > > a
> > > > >> lot of overlap though, what happens when a project is selected
> with
> > > -pl
> > > > and
> > > > >> deselected with -plr, which gets precedence etc.
> > > > >>
> > > > > -plr without -pl, dont use a global toggle probably.
> > > > >
> > > > > Ex: -pl parent-with-plugins -plr myaggregator -pl foo/bar -plr
> > > > docker-images
> > > > >
> > > > >
> > > > >> 3. -pl /*
> > > > >> This gives the same flexibility as 2, but then in one command. I
> do
> > > like
> > > > >> that, but it can get messy with shell expansion. One other thing
> is
> > > that
> > > > >> with -pl you can select projects using the directory, but also by
> > > > >> (optionally groupid and) artifactId. The star (or its replacement)
> > > could
> > > > >> mean different things when used in either variant. Mind that
> > > submodules
> > > > do
> > > > >> not have to be placed directly in a subdirectory.
> > > > >>
> > > > > Other issue is maven works with not linear (tree) children so can
> be
> > > > > complex to handle when parents or children are in other physical
> tree
> > > or
> > > > > even projects.
> > > > >
> > > > >
> > > > >> 4. (new idea) -pl + --pl-non-recursive:
> > > > >> This does not have the flexibility 2 and 3 provides and we would
> > have
> > > to
> > > > >> introduce a new CLI flag. But it does have a very clear goal which
> > is
> > > > easy
> > > > >> to implement + explain.
> > > > >>
> > > > > Hmm another global toggle? It will have the same combination issue
> > than
> > > > -N
> > > > > IMHO.
> > > > > So overall this sounds like reversing -pl and adding this
> > complementary
> > > > > option so 2 sounds the saner equivalent option for backward compat.
> > > > >
> > > > >
> > > > >> 5. Revert all and restore 3.6.3 functionality.
> > > > >> Users could build extensions or plugin functionality to achieve
> the
> > > > >> recursiveness. Not my favorite, because I think this is something
> > > Maven
> > > > >> Core should be able to provide out of the box.
> > > > >>
> > > > > "Extension" can be built in too, just mentionned we can solve it
> > > > > differently than enriching again the cli since functionally we
> > already
> > > > > cover it.
> > > > >
> > > > >
> > > > >> 6. Make recursiveness the default and do not provide a workaround
> > for
> > > > >> non-recursiveness
> > > > >> Since we are going to a new major version it's acceptable to
> > > > break/change
> > > > >> existing behavior. We could wait until users complain and then
> build
> > > > >> something in.
> > > > >> Not my favorite (anymore) either, since apparently it's a common
> > > > use-case
> > > > >> that we would break.
> > > > >>
> > > > > Just my 2cts but sounds the worse.
> > > > > Even if going major backward compat is key for not internals
> > otherwise
> > > we
> > > > > do another build tool and break everyone which is always a moment
> of
> > > > > temptation to reject the tool, in particular when trivial to avoid
> > from
> > > > > user PoV.
> > > > >
> > > > >
> > > > >> I understand the thread might've become hard to follow, so I hope
> > this
> > > > >> summary helps other people to join the discussion.
> > > > >> My current favorite is 4.
> > > > >>
> > > > >
> > > > > Personally, I'd say investigate alias option and if not satistying
> > then
> > > > use
> > > > > 2.
> > > > >
> > > > >
> > > > >> Martin
> > > > >>
> > > > >> Op za 20 feb. 2021 om 17:53 schreef Romain Manni-Bucau
> > > > >> rmannibu...@gmail.com>:
> > > > >>
> > > > >>> I like the regex idea but wildcard (*) does not work well due to
> > > common
> > > > >>> shell expansion (or it already works but it is outside of maven
> > scope
> > > > to
> > > > >> be
> > > > >>> concrete).
> > > > >>>
> > > > >>> My 2cts would be that, to be honest, I think we all lead to have
> > > > aliases
> > > > >> in
> > > > >>> maven for potentially very long commands (there was some threads
> > > about
> > > > >> it),
> > > > >>> CLI then just needs to enable to activate/deactivate things, not
> to
> > > be
> > > > >>> clever and it would enable all combination without any behavior
> > > change
> > > > >> nor
> > > > >>> new option IMHO. Concretely "mvn alias:bd" would run "mvn -pl
> > foo/bar
> > > > -pl
> > > > >>> foo/dummy" for example. Thinking out loud it can be done with a
> > > plugin
> > > > >>> already so can maybe give a try if it sounds like a good idea for
> > > > others
> > > > >>> too.
> > > > >>>
> > > > >>> Romain Manni-Bucau
> > > > >>> @rmannibucau | Blog
> > > > >>> | Old Blog
> > > > >>> | Github
> > > > >>> https://github.com/rmannibucau> |
> > > > >>> LinkedIn | Book
> > > > >>>
> > > > >>>
> > > > >>
> > > >
> > >
> >
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> > > > >>>
> > > > >>> Le sam. 20 févr. 2021 à 14:40, Falko Modler a
> > > > écrit :
> > > > >>>
> > > > >>>> Thanks for the quick reaction/answers!
> > > > >>>>
> > > > >>>> TBH, I haven't fully understood why -N cannot be used here. I do
> > > > >>>> understand that -N reduces the reactor to one project (before
> > > project
> > > > >>>> selection via -pl can kick in).
> > > > >>>> But what if -N wouldn't be applied if -pl is present? It would
> > then
> > > > >>> become
> > > > >>>> a "secondary" option, only applying to the projects selected or
> > > > >>> deselected
> > > > >>>> via -pl.
> > > > >>>>
> > > > >>>> However, the most flexible and fully backwards compatiple
> solution
> > > > >> would
> > > > >>>> indeed be something like -plr as suggested before. You could
> then
> > > also
> > > > >>> mix
> > > > >>>> and match -pl and -plr.
> > > > >>>>
> > > > >>>> Btw, half offtopic: I proposed [1] to add ? to -pl and in that
> > > context
> > > > >> I
> > > > >>>> also thought about wildcard support for -pl, but Robert didn't
> > like
> > > > the
> > > > >>>> idea.
> > > > >>>> I'm just thinking whether -pl foo/* might be something that
> could
> > > help
> > > > >>>> here as well, but it wouldn't be trivial to do, I suppose.
> > > > >>>> PS: -help doesn't mention ! at all.
> > > > >>>>
> > > > >>>> [1] https://issues.apache.org/jira/browse/MNG-6511
> > > > >>>>
> > > > >>>> 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
> > > >
> > > >
> > >
> >
>

Reply via email to