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

Reply via email to