MNG-6799 issue created [1]
proposed fix added to the reproducible branch [2] by simply removing the @Named 
annotation for the deprecated StringSearchModelInterpolator: CI seems ok
ok for merge?

Regards,

Hervé

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

[2] 
https://github.com/apache/maven/commit/16961b32b7dccbc9447ed4e18b4e0949d5fe3b56

On 2019/11/03 21:27:21, Stuart McCulloch <mccu...@gmail.com> wrote: 
> I did a quick review of the various components in core
> and StringVisitorModelInterpolator / StringSearchModelInterpolator appears
> to be the only case where a role (ModelInterpolator) has two non-default
> implementations and another component only asks for the first
> implementation. There are other roles which have multiple implementations,
> but in those cases that's expected because each implementation has a
> specific name and handles a specific case (see the various ProfileActivator
> implementations which are all then injected into a list in
> DefaultProfileSelector.)
> 
> It also appears that StringVisitorModelInterpolator was only added recently
> - if it's meant to be a replacement of StringSearchModelInterpolator then
> one option would be to simply remove StringSearchModelInterpolator.
> Alternatively if StringSearchModelInterpolator is needed to be kept around
> for compatibility reasons (such as someone directly extending it outside of
> Maven) then the Named annotation could be removed
> from StringSearchModelInterpolator so it isn't automatically picked up.
> 
> Wrt. extra checks, checking for multiple implementations in the same
> realm/classloader that haven't been given specific names is a possibility -
> you can open feature requests at
> https://bugs.eclipse.org/bugs/describecomponents.cgi?product=Sisu
> 
> On Sun, 3 Nov 2019 at 19:05, Gabriel Belingueres <belingue...@gmail.com>
> wrote:
> 
> > Hi Hervé:
> >
> > I was thinking in the lines of some checking at the maven core level only,
> > enough to detect problems and ensure there are no regressions.
> >
> > At the plugin level, I guess the assurance that the right component is
> > injected can be checked with an integration test.
> >
> > The way I realized the problem was that I was adding some logging traces
> > into the StringVisitorModelInterpolator class but *nothing* showed (even
> > the build was successful and the interpolation indeed was happening
> > somewhere). Then added the same logging lines to
> > StringSearchModelInterpolator, and the logging appeared in the build, which
> > confirmed the issue. (I didn't test if there are any other component with
> > the same problem.)
> >
> > El dom., 3 de nov. de 2019 a la(s) 06:27, Hervé BOUTEMY (
> > herve.bout...@free.fr) escribió:
> >
> > > nice idea, but overriding by adding a new implementation in classpath is
> > > the
> > > normal overriding way: not sure how "ambiguity checker" could make a
> > > difference
> > > between such wanted override vs unwanted ambiguity
> > >
> > > BTW, how did you see that StringVisitorModelInterpolator was not used but
> > > StringSearchModelInterpolator instead, please?
> > >
> > > Regards,
> > >
> > > Hervé
> > >
> > > Le dimanche 3 novembre 2019, 05:30:50 CET Gabriel Belingueres a écrit :
> > > > Thanks Stuart.
> > > >
> > > > The reproducibility PR you mention helps in having a deterministic
> > > ordering
> > > > inside the Named components file to buld exactly the same executable,
> > but
> > > > it does not mean it is the right priority for component injection.
> > > >
> > > > Do you know if it is possible to configure sisu to throw an exception
> > if
> > > > trying to inject an ambiguous component? Otherwise, I guess we must
> > > > implement some sort of "ambiguity checker", either as an integration
> > test
> > > > (don't know if it is possible) or either built-it into maven
> > executable.
> > > >
> > > >
> > > >
> > > >
> > > > El sáb., 2 de nov. de 2019 a la(s) 20:54, Stuart McCulloch (
> > > >
> > > > mccu...@gmail.com) escribió:
> > > > > Yes, when there are multiple non-default implementations with the
> > same
> > > > > priority then it will pick the first in the list (where the "list" in
> > > > > question is actually a combination of plugins + extensions + core
> > > > > bindings for the given type)
> > > > >
> > > > > If a particular implementation should be treated as the default then
> > it
> > > > > should either start with "Default" or be annotated with
> > > @Named("default")
> > > > > -
> > > > > the benefit of this approach is that it documents that this is the
> > > default
> > > > > implementation, to be favoured over the others. Alternatively if you
> > > want
> > > > > to have an ordering between implementations then you can use
> > @Priority
> > > to
> > > > > assign specific priorities and favour one over the other.
> > > > >
> > > > > If you don't mark an implementation as default and don't define any
> > > > > priorities then the only current guarantees are that implementations
> > in
> > > > > plugins and extensions will be favoured over implementations in core
> > > (to
> > > > > allow overriding). But there is an upcoming improvement to sort the
> > > list
> > > > > inside each module that would make this more deterministic from build
> > > to
> > > > > build, at least when ranking implementations inside a particular
> > > module:
> > > > > https://github.com/eclipse/sisu.inject/pull/5 - with that change
> > then
> > > > > you'll get an extra guarantee that inside a module it will be ordered
> > > by
> > > > > package+name.
> > > > >
> > > > > PS. even with the old Plexus runtime annotations you could be at the
> > > whim
> > > > > of classpath ordering, similarly Plexus XML descriptors are
> > influenced
> > > by
> > > > > classpath resource ordering - so ideally it's better to be explicit
> > > about
> > > > > ordering
> > > > >
> > > > > On Sat, 2 Nov 2019 at 23:07, Gabriel Belingueres <
> > > belingue...@gmail.com>
> > > > >
> > > > > wrote:
> > > > > > Hi:
> > > > > >
> > > > > > I just built maven core from source and found that it was using
> > > > > > StringSearchModelInterpolator instead of
> > > StringVisitorModelInterpolator,
> > > > >
> > > > > a
> > > > >
> > > > > > regression from the last 3.6.2 release.
> > > > > >
> > > > > > I found that in
> > > maven-model-builder/META-INF/sisu/javax.injected.Named
> > > > > > file, both interpolators are listed but in reverse order (comparing
> > > it
> > > > >
> > > > > with
> > > > >
> > > > > > the same file in 3.6.2), that is StringSearchModelInterpolator
> > appear
> > > > >
> > > > > first
> > > > >
> > > > > > in the file and StringVisitorModelInterpolator second.
> > > > > >
> > > > > > (I believe the dependency injection picks up the first one it finds
> > > with
> > > > > > the right type.)
> > > > > >
> > > > > > Deleting the @Named annotation from StringSearchModelInterpolator
> > > solved
> > > > > > the issue, as this make the entry disappear from the
> > > > > > javax.injected.Named
> > > > > > file. Then the dependency injection uses the
> > > > > > StringVisitorModelInterpolator.
> > > > > >
> > > > > > Can anyone confirm this issue?
> > > > > > And if so, how to best prevent in the future that this type of
> > > > > > dependency
> > > > > > injection regressions from happening?
> > > > > >
> > > > > > Kind regards,
> > > > > > Gabriel
> > >
> > >
> > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > 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