mirror of https://github.com/apache/maven.git
[MNG-6765] tycho pom-less builds fails with 3.6.2
This commit is contained in:
parent
eca4905fcd
commit
07ab962c85
|
@ -35,9 +35,31 @@ import org.apache.maven.model.locator.ModelLocator;
|
||||||
import org.eclipse.sisu.Typed;
|
import org.eclipse.sisu.Typed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DefaultModelProcessor
|
*
|
||||||
|
* Note: uses @Typed to limit the types it is available for injection to just ModelProcessor.
|
||||||
|
*
|
||||||
|
* This is because the ModelProcessor interface extends ModelLocator and ModelReader. If we
|
||||||
|
* made this component available under all its interfaces then it could end up being injected
|
||||||
|
* into itself leading to a stack overflow.
|
||||||
|
*
|
||||||
|
* A side-effect of using @Typed is that it translates to explicit bindings in the container.
|
||||||
|
* So instead of binding the component under a 'wildcard' key it is now bound with an explicit
|
||||||
|
* key. Since this is a default component this will be a plain binding of ModelProcessor to
|
||||||
|
* this implementation type, ie. no hint/name.
|
||||||
|
*
|
||||||
|
* This leads to a second side-effect in that any @Inject request for just ModelProcessor in
|
||||||
|
* the same injector is immediately matched to this explicit binding, which means extensions
|
||||||
|
* cannot override this binding. This is because the lookup is always short-circuited in this
|
||||||
|
* specific situation (plain @Inject request, and plain explicit binding for the same type.)
|
||||||
|
*
|
||||||
|
* The simplest solution is to use a custom @Named here so it isn't bound under the plain key.
|
||||||
|
* This is only necessary for default components using @Typed that want to support overriding.
|
||||||
|
*
|
||||||
|
* As a non-default component this now gets a negative priority relative to other implementations
|
||||||
|
* of the same interface. Since we want to allow overriding this doesn't matter in this case.
|
||||||
|
* (if it did we could add @Priority of 0 to match the priority given to default components.)
|
||||||
*/
|
*/
|
||||||
@Named
|
@Named( "core-default" )
|
||||||
@Singleton
|
@Singleton
|
||||||
@Typed( ModelProcessor.class )
|
@Typed( ModelProcessor.class )
|
||||||
public class DefaultModelProcessor
|
public class DefaultModelProcessor
|
||||||
|
|
Loading…
Reference in New Issue