You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2021/10/02 10:26:34 UTC

[maven] 03/03: [MNG-5577] Use JSR 330 constructor injection

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 35e5a4d71db9f3bf6490998b51ec50827caa6141
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Sep 21 16:18:38 2021 +0200

    [MNG-5577] Use JSR 330 constructor injection
    
    # Conflicts:
    #	maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
---
 .../apache/maven/project/ProjectClasspathTest.java |   7 +-
 .../apache/maven/project/TestProjectBuilder.java   |  19 +-
 .../main/java/org/apache/maven/DefaultMaven.java   |  50 ++-
 .../maven/DefaultProjectDependenciesResolver.java  |  13 +-
 .../main/java/org/apache/maven/ReactorReader.java  |  11 +-
 .../artifact/factory/DefaultArtifactFactory.java   |   7 +-
 .../manager/DefaultArtifactHandlerManager.java     |  11 +-
 .../eventspy/internal/EventSpyDispatcher.java      |  13 +-
 .../DefaultRepositorySystemSessionFactory.java     |  47 +--
 .../maven/lifecycle/DefaultLifecycleExecutor.java  |  43 +--
 .../DefaultLifecycleExecutionPlanCalculator.java   |  45 +--
 .../DefaultLifecycleTaskSegmentCalculator.java     |  13 +-
 .../lifecycle/internal/LifecycleDebugLogger.java   |  10 +-
 .../internal/LifecycleDependencyResolver.java      |  32 +-
 .../lifecycle/internal/LifecycleModuleBuilder.java |  29 +-
 .../maven/lifecycle/internal/LifecycleStarter.java |  43 ++-
 .../lifecycle/internal/MojoDescriptorCreator.java  |  32 +-
 .../maven/lifecycle/internal/MojoExecutor.java     |  24 +-
 .../lifecycle/internal/builder/BuilderCommon.java  |  28 +-
 .../multithreaded/MultiThreadedBuilder.java        |  10 +-
 .../plugin/DefaultLifecycleBindingsInjector.java   |   9 +-
 .../maven/plugin/DefaultBuildPluginManager.java    |  25 +-
 .../plugin/internal/DefaultMavenPluginManager.java |  57 ++--
 .../DefaultPluginDependenciesResolver.java         |  10 +-
 .../plugin/internal/DefaultPluginManager.java      |  30 +-
 .../internal/DefaultPluginPrefixResolver.java      |  24 +-
 .../internal/DefaultPluginVersionResolver.java     |  24 +-
 .../maven/project/DefaultProjectBuilder.java       |  52 ++--
 .../project/DefaultProjectBuildingHelper.java      |  36 ++-
 .../DefaultProjectDependenciesResolver.java        |  18 +-
 .../project/artifact/DefaultMetadataSource.java    |  15 +-
 .../project/artifact/MavenMetadataSource.java      |  55 ++--
 .../rtinfo/internal/DefaultRuntimeInformation.java |   9 +-
 .../settings/DefaultMavenSettingsBuilder.java      |   7 +-
 .../maven/toolchain/DefaultToolchainManager.java   |  10 +-
 .../toolchain/DefaultToolchainManagerPrivate.java  |   8 +
 .../maven/toolchain/DefaultToolchainsBuilder.java  |   7 +-
 .../building/DefaultToolchainsBuilder.java         |  13 +-
 .../maven/toolchain/java/JavaToolchainFactory.java |   7 +-
 .../lifecycle/DelegatingMojoExecutionListener.java |   1 +
 .../lifecycle/internal/BuilderCommonTest.java      |   3 +-
 .../LifecycleExecutionPlanCalculatorTest.java      |   2 +-
 .../stub/LifecycleTaskSegmentCalculatorStub.java   |   8 +-
 .../lifecycle/internal/stub/MojoExecutorStub.java  |  15 +-
 .../apache/maven/project/TestMetadataSource.java   |  10 +
 .../DefaultToolchainManagerPrivateTest.java        |   8 +-
 .../toolchain/DefaultToolchainManagerTest.java     |   9 +-
 .../SettingsXmlConfigurationProcessor.java         |  12 +-
 .../maven/model/building/DefaultModelBuilder.java  | 345 +++++++++++++++------
 .../model/building/DefaultModelBuilderFactory.java | 213 ++++++++++---
 .../model/building/DefaultModelProcessor.java      |  14 +-
 .../AbstractStringBasedModelInterpolator.java      |  18 +-
 .../StringSearchModelInterpolator.java             |  15 +
 .../StringVisitorModelInterpolator.java            |   8 +
 .../apache/maven/model/io/DefaultModelReader.java  |   6 +-
 .../model/path/DefaultModelPathTranslator.java     |   7 +-
 .../model/path/DefaultModelUrlNormalizer.java      |   7 +-
 .../ProfileActivationFilePathInterpolator.java     |   7 +-
 .../model/profile/DefaultProfileSelector.java      |   7 +-
 .../profile/activation/FileProfileActivator.java   |   8 +-
 .../model/superpom/DefaultSuperPomProvider.java    |   7 +-
 .../DefaultInheritanceAssemblerTest.java           |   3 +-
 .../StringVisitorModelInterpolatorTest.java        |   2 +-
 .../activation/AbstractProfileActivatorTest.java   |  16 +-
 .../activation/FileProfileActivatorTest.java       |  12 +-
 .../activation/JdkVersionProfileActivatorTest.java |   9 +-
 .../activation/PropertyProfileActivatorTest.java   |   9 +-
 .../internal/DefaultArtifactDescriptorReader.java  |  81 ++---
 .../internal/DefaultVersionRangeResolver.java      |  39 +--
 .../internal/DefaultVersionResolver.java           |  35 +--
 .../DefaultArtifactDescriptorReaderTest.java       |   6 +-
 71 files changed, 1098 insertions(+), 747 deletions(-)

diff --git a/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java b/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
index a2119ce..ad4531c 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java
@@ -20,6 +20,7 @@ package org.apache.maven.project;
  */
 
 import java.io.File;
+import java.lang.reflect.Field;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
@@ -45,8 +46,10 @@ public class ProjectClasspathTest
         super.setUp();
 
         ArtifactResolver resolver = getContainer().lookup( ArtifactResolver.class, "classpath" );
-        DefaultArtifactDescriptorReader pomReader = (DefaultArtifactDescriptorReader)getContainer().lookup(ArtifactDescriptorReader.class);
-        pomReader.setArtifactResolver( resolver );
+        DefaultArtifactDescriptorReader pomReader = (DefaultArtifactDescriptorReader) getContainer().lookup(ArtifactDescriptorReader.class);
+        Field field = DefaultArtifactDescriptorReader.class.getDeclaredField( "artifactResolver" );
+        field.setAccessible( true );
+        field.set( pomReader, resolver );
 
         projectBuilder = getContainer().lookup( ProjectBuilder.class, "classpath" );
     }
diff --git a/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java b/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
index 18deb43..b5a0348 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
@@ -19,7 +19,14 @@ import java.io.File;
 import java.util.Collections;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
-
+import org.apache.maven.bridge.MavenRepositorySystem;
+import org.apache.maven.model.building.ModelBuilder;
+import org.apache.maven.model.building.ModelProcessor;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.impl.RemoteRepositoryManager;
+
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -28,6 +35,16 @@ import javax.inject.Singleton;
 public class TestProjectBuilder
     extends DefaultProjectBuilder
 {
+    @Inject
+    public TestProjectBuilder(
+            Logger logger, ModelBuilder modelBuilder, ModelProcessor modelProcessor,
+            ProjectBuildingHelper projectBuildingHelper, MavenRepositorySystem repositorySystem,
+            RepositorySystem repoSystem, RemoteRepositoryManager repositoryManager,
+            ProjectDependenciesResolver dependencyResolver )
+    {
+        super( logger, modelBuilder, modelProcessor, projectBuildingHelper, repositorySystem, repoSystem,
+                repositoryManager, dependencyResolver );
+    }
 
     @Override
     public ProjectBuildingResult build( File pomFile, ProjectBuildingRequest configuration )
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index f80833b..a334e80 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -83,42 +83,58 @@ public class DefaultMaven
     implements Maven
 {
 
-    @Inject
-    private Logger logger;
+    private final Logger logger;
 
-    @Inject
     protected ProjectBuilder projectBuilder;
 
-    @Inject
     private LifecycleStarter lifecycleStarter;
 
-    @Inject
     protected PlexusContainer container;
 
-    @Inject
     private ExecutionEventCatapult eventCatapult;
 
-    @Inject
     private LegacySupport legacySupport;
 
-    @Inject
     private SessionScope sessionScope;
 
-    @Inject
     private DefaultRepositorySystemSessionFactory repositorySessionFactory;
 
-    @Inject
-    @Named( GraphBuilder.HINT )
-    private GraphBuilder graphBuilder;
+    private final GraphBuilder graphBuilder;
 
-    @Inject
-    private BuildResumptionAnalyzer buildResumptionAnalyzer;
+    private final BuildResumptionAnalyzer buildResumptionAnalyzer;
 
-    @Inject
-    private BuildResumptionDataRepository buildResumptionDataRepository;
+    private final BuildResumptionDataRepository buildResumptionDataRepository;
+
+    private final SuperPomProvider superPomProvider;
 
     @Inject
-    private SuperPomProvider superPomProvider;
+    public DefaultMaven(
+            Logger logger,
+            ProjectBuilder projectBuilder,
+            LifecycleStarter lifecycleStarter,
+            PlexusContainer container,
+            ExecutionEventCatapult eventCatapult,
+            LegacySupport legacySupport,
+            SessionScope sessionScope,
+            DefaultRepositorySystemSessionFactory repositorySessionFactory,
+            @Named( GraphBuilder.HINT ) GraphBuilder graphBuilder,
+            BuildResumptionAnalyzer buildResumptionAnalyzer,
+            BuildResumptionDataRepository buildResumptionDataRepository,
+            SuperPomProvider superPomProvider )
+    {
+        this.logger = logger;
+        this.projectBuilder = projectBuilder;
+        this.lifecycleStarter = lifecycleStarter;
+        this.container = container;
+        this.eventCatapult = eventCatapult;
+        this.legacySupport = legacySupport;
+        this.sessionScope = sessionScope;
+        this.repositorySessionFactory = repositorySessionFactory;
+        this.graphBuilder = graphBuilder;
+        this.buildResumptionAnalyzer = buildResumptionAnalyzer;
+        this.buildResumptionDataRepository = buildResumptionDataRepository;
+        this.superPomProvider = superPomProvider;
+    }
 
     @Override
     public MavenExecutionResult execute( MavenExecutionRequest request )
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java b/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
index 0ee0bee..4402d7e 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
@@ -56,11 +56,18 @@ public class DefaultProjectDependenciesResolver
     implements ProjectDependenciesResolver
 {
 
-    @Inject
-    private RepositorySystem repositorySystem;
+    private final RepositorySystem repositorySystem;
+
+    private final ResolutionErrorHandler resolutionErrorHandler;
 
     @Inject
-    private ResolutionErrorHandler resolutionErrorHandler;
+    public DefaultProjectDependenciesResolver(
+            RepositorySystem repositorySystem,
+            ResolutionErrorHandler resolutionErrorHandler )
+    {
+        this.repositorySystem = repositorySystem;
+        this.resolutionErrorHandler = resolutionErrorHandler;
+    }
 
     public Set<Artifact> resolve( MavenProject project, Collection<String> scopesToResolve, MavenSession session )
         throws ArtifactResolutionException, ArtifactNotFoundException
diff --git a/maven-core/src/main/java/org/apache/maven/ReactorReader.java b/maven-core/src/main/java/org/apache/maven/ReactorReader.java
index 42c41ac..247632a 100644
--- a/maven-core/src/main/java/org/apache/maven/ReactorReader.java
+++ b/maven-core/src/main/java/org/apache/maven/ReactorReader.java
@@ -67,13 +67,10 @@ class ReactorReader
 
     private static final Logger LOGGER = LoggerFactory.getLogger( ReactorReader.class );
 
-    private MavenSession session;
-
-    private Map<String, MavenProject> projectsByGAV;
-
-    private Map<String, List<MavenProject>> projectsByGA;
-
-    private WorkspaceRepository repository;
+    private final MavenSession session;
+    private final Map<String, MavenProject> projectsByGAV;
+    private final Map<String, List<MavenProject>> projectsByGA;
+    private final WorkspaceRepository repository;
 
     @Inject
     ReactorReader( MavenSession session )
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java b/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java
index 9fc0506..70466a7 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java
@@ -39,8 +39,13 @@ import org.apache.maven.artifact.versioning.VersionRange;
 public class DefaultArtifactFactory
     implements ArtifactFactory
 {
+    private final ArtifactHandlerManager artifactHandlerManager;
+
     @Inject
-    private ArtifactHandlerManager artifactHandlerManager;
+    public DefaultArtifactFactory( ArtifactHandlerManager artifactHandlerManager )
+    {
+        this.artifactHandlerManager = artifactHandlerManager;
+    }
 
     public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java b/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java
index a3013d4..3145d58 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java
@@ -39,10 +39,15 @@ public class DefaultArtifactHandlerManager
     implements ArtifactHandlerManager
 {
 
-    @Inject
-    private Map<String, ArtifactHandler> artifactHandlers;
+    private final Map<String, ArtifactHandler> artifactHandlers;
+
+    private final Map<String, ArtifactHandler> allHandlers = new ConcurrentHashMap<>();
 
-    private Map<String, ArtifactHandler> allHandlers = new ConcurrentHashMap<>();
+    @Inject
+    public DefaultArtifactHandlerManager( Map<String, ArtifactHandler> artifactHandlers )
+    {
+        this.artifactHandlers = artifactHandlers;
+    }
 
     public ArtifactHandler getArtifactHandler( String type )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java b/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java
index 980bc15..78d5441 100644
--- a/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java
+++ b/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java
@@ -40,23 +40,18 @@ import org.eclipse.aether.RepositoryListener;
 public class EventSpyDispatcher
 {
 
-    @Inject
-    private Logger logger;
+    private final Logger logger;
 
-    private List<EventSpy> eventSpies;
+    private final List<EventSpy> eventSpies;
 
     @Inject
-    public void setEventSpies( List<EventSpy> eventSpies )
+    public EventSpyDispatcher( Logger logger, List<EventSpy> eventSpies )
     {
+        this.logger = logger;
         // make copy to get rid of needless overhead for dynamic lookups
         this.eventSpies = new ArrayList<>( eventSpies );
     }
 
-    public List<EventSpy> getEventSpies()
-    {
-        return eventSpies;
-    }
-
     public ExecutionListener chainListener( ExecutionListener listener )
     {
         if ( eventSpies.isEmpty() )
diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
index c419f17..63bc4cb 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
@@ -77,33 +77,42 @@ import java.util.Properties;
 @Named
 public class DefaultRepositorySystemSessionFactory
 {
-    @Inject
-    private Logger logger;
+    private final Logger logger;
 
-    @Inject
-    private ArtifactHandlerManager artifactHandlerManager;
+    private final ArtifactHandlerManager artifactHandlerManager;
 
-    @Inject
-    private RepositorySystem repoSystem;
+    private final RepositorySystem repoSystem;
 
-    @Inject
-    @Nullable
-    @Named( "simple" )
-    private LocalRepositoryManagerFactory simpleLocalRepoMgrFactory;
+    private final LocalRepositoryManagerFactory simpleLocalRepoMgrFactory;
 
-    @Inject
-    @Nullable
-    @Named( "ide" )
-    private WorkspaceReader workspaceRepository;
+    private final WorkspaceReader workspaceRepository;
 
-    @Inject
-    private SettingsDecrypter settingsDecrypter;
+    private final SettingsDecrypter settingsDecrypter;
 
-    @Inject
-    private EventSpyDispatcher eventSpyDispatcher;
+    private final EventSpyDispatcher eventSpyDispatcher;
+
+    private final MavenRepositorySystem mavenRepositorySystem;
 
     @Inject
-    MavenRepositorySystem mavenRepositorySystem;
+    public DefaultRepositorySystemSessionFactory(
+            Logger logger,
+            ArtifactHandlerManager artifactHandlerManager,
+            RepositorySystem repoSystem,
+            @Nullable @Named( "simple" ) LocalRepositoryManagerFactory simpleLocalRepoMgrFactory,
+            @Nullable @Named( "ide" ) WorkspaceReader workspaceRepository,
+            SettingsDecrypter settingsDecrypter,
+            EventSpyDispatcher eventSpyDispatcher,
+            MavenRepositorySystem mavenRepositorySystem )
+    {
+        this.logger = logger;
+        this.artifactHandlerManager = artifactHandlerManager;
+        this.repoSystem = repoSystem;
+        this.simpleLocalRepoMgrFactory = simpleLocalRepoMgrFactory;
+        this.workspaceRepository = workspaceRepository;
+        this.settingsDecrypter = settingsDecrypter;
+        this.eventSpyDispatcher = eventSpyDispatcher;
+        this.mavenRepositorySystem = mavenRepositorySystem;
+    }
 
     public DefaultRepositorySystemSession newRepositorySession( MavenExecutionRequest request )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
index b164f08..c8b4c2d 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
@@ -62,33 +62,38 @@ public class DefaultLifecycleExecutor
     implements LifecycleExecutor
 {
 
-    @Inject
-    private LifeCyclePluginAnalyzer lifeCyclePluginAnalyzer;
-
-    @Inject
-    private DefaultLifecycles defaultLifeCycles;
-
-    @Inject
-    private LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
-
-    @Inject
-    private LifecycleExecutionPlanCalculator lifecycleExecutionPlanCalculator;
+    private final LifeCyclePluginAnalyzer lifeCyclePluginAnalyzer;
+    private final DefaultLifecycles defaultLifeCycles;
+    private final LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
+    private final LifecycleExecutionPlanCalculator lifecycleExecutionPlanCalculator;
+    private final MojoExecutor mojoExecutor;
+    private final LifecycleStarter lifecycleStarter;
+    private final MojoDescriptorCreator mojoDescriptorCreator;
 
     @Inject
-    private MojoExecutor mojoExecutor;
-
-    @Inject
-    private LifecycleStarter lifecycleStarter;
-
+    public DefaultLifecycleExecutor(
+            LifeCyclePluginAnalyzer lifeCyclePluginAnalyzer,
+            DefaultLifecycles defaultLifeCycles,
+            LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator,
+            LifecycleExecutionPlanCalculator lifecycleExecutionPlanCalculator,
+            MojoExecutor mojoExecutor,
+            LifecycleStarter lifecycleStarter,
+            MojoDescriptorCreator mojoDescriptorCreator )
+    {
+        this.lifeCyclePluginAnalyzer = lifeCyclePluginAnalyzer;
+        this.defaultLifeCycles = defaultLifeCycles;
+        this.lifecycleTaskSegmentCalculator = lifecycleTaskSegmentCalculator;
+        this.lifecycleExecutionPlanCalculator = lifecycleExecutionPlanCalculator;
+        this.mojoExecutor = mojoExecutor;
+        this.lifecycleStarter = lifecycleStarter;
+        this.mojoDescriptorCreator = mojoDescriptorCreator;
+    }
 
     public void execute( MavenSession session )
     {
         lifecycleStarter.execute( session );
     }
 
-    @Inject
-    private MojoDescriptorCreator mojoDescriptorCreator;
-
     // These methods deal with construction intact Plugin object that look like they come from a standard
     // <plugin/> block in a Maven POM. We have to do some wiggling to pull the sources of information
     // together and this really shows the problem of constructing a sensible default configuration but
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
index fc64b92..f22f028 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
@@ -56,7 +56,6 @@ import org.apache.maven.plugin.lifecycle.Execution;
 import org.apache.maven.plugin.lifecycle.Phase;
 import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
-import org.apache.maven.plugin.version.PluginVersionResolver;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -75,34 +74,38 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 public class DefaultLifecycleExecutionPlanCalculator
     implements LifecycleExecutionPlanCalculator
 {
-    @Inject
-    private PluginVersionResolver pluginVersionResolver;
 
-    @Inject
-    private BuildPluginManager pluginManager;
+    private final BuildPluginManager pluginManager;
 
-    @Inject
-    private DefaultLifecycles defaultLifeCycles;
+    private final DefaultLifecycles defaultLifeCycles;
 
-    @Inject
-    private MojoDescriptorCreator mojoDescriptorCreator;
+    private final MojoDescriptorCreator mojoDescriptorCreator;
 
-    @Inject
-    private LifecyclePluginResolver lifecyclePluginResolver;
+    private final LifecyclePluginResolver lifecyclePluginResolver;
 
-    @Inject
-    @Named( DefaultLifecycleMappingDelegate.HINT )
-    private LifecycleMappingDelegate standardDelegate;
+    private final LifecycleMappingDelegate standardDelegate;
 
-    @Inject
-    private Map<String, LifecycleMappingDelegate> delegates;
+    private final Map<String, LifecycleMappingDelegate> delegates;
 
-    @Inject
-    private Map<String, MojoExecutionConfigurator> mojoExecutionConfigurators;
+    private final Map<String, MojoExecutionConfigurator> mojoExecutionConfigurators;
 
-    @SuppressWarnings( { "UnusedDeclaration" } )
-    public DefaultLifecycleExecutionPlanCalculator()
+    @Inject
+    public DefaultLifecycleExecutionPlanCalculator(
+            BuildPluginManager pluginManager,
+            DefaultLifecycles defaultLifeCycles,
+            MojoDescriptorCreator mojoDescriptorCreator,
+            LifecyclePluginResolver lifecyclePluginResolver,
+            @Named( DefaultLifecycleMappingDelegate.HINT ) LifecycleMappingDelegate standardDelegate,
+            Map<String, LifecycleMappingDelegate> delegates,
+            Map<String, MojoExecutionConfigurator> mojoExecutionConfigurators )
     {
+        this.pluginManager = pluginManager;
+        this.defaultLifeCycles = defaultLifeCycles;
+        this.mojoDescriptorCreator = mojoDescriptorCreator;
+        this.lifecyclePluginResolver = lifecyclePluginResolver;
+        this.standardDelegate = standardDelegate;
+        this.delegates = delegates;
+        this.mojoExecutionConfigurators = mojoExecutionConfigurators;
     }
 
     // Only used for testing
@@ -115,6 +118,8 @@ public class DefaultLifecycleExecutionPlanCalculator
         this.defaultLifeCycles = defaultLifeCycles;
         this.mojoDescriptorCreator = mojoDescriptorCreator;
         this.lifecyclePluginResolver = lifecyclePluginResolver;
+        this.standardDelegate = null;
+        this.delegates = null;
         this.mojoExecutionConfigurators = Collections.singletonMap(
              "default", (MojoExecutionConfigurator) new DefaultMojoExecutionConfigurator() );
     }
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
index e98e0fb..8d4c324 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
@@ -58,14 +58,17 @@ import org.codehaus.plexus.util.StringUtils;
 public class DefaultLifecycleTaskSegmentCalculator
     implements LifecycleTaskSegmentCalculator
 {
-    @Inject
-    private MojoDescriptorCreator mojoDescriptorCreator;
+    private final MojoDescriptorCreator mojoDescriptorCreator;
 
-    @Inject
-    private LifecyclePluginResolver lifecyclePluginResolver;
+    private final LifecyclePluginResolver lifecyclePluginResolver;
 
-    public DefaultLifecycleTaskSegmentCalculator()
+    @Inject
+    public DefaultLifecycleTaskSegmentCalculator(
+            MojoDescriptorCreator mojoDescriptorCreator,
+            LifecyclePluginResolver lifecyclePluginResolver )
     {
+        this.mojoDescriptorCreator = mojoDescriptorCreator;
+        this.lifecyclePluginResolver = lifecyclePluginResolver;
     }
 
     public List<TaskSegment> calculateTaskSegments( MavenSession session )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
index 9ffb3d4..2feaca5 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
@@ -52,20 +52,14 @@ import org.codehaus.plexus.util.StringUtils;
 @Singleton
 public class LifecycleDebugLogger
 {
-    @Inject
-    private Logger logger;
-
-
-    public LifecycleDebugLogger()
-    {
-    }
+    private final Logger logger;
 
+    @Inject
     public LifecycleDebugLogger( Logger logger )
     {
         this.logger = logger;
     }
 
-
     public void debug( String s )
     {
         logger.debug( s );
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
index 44d6cef..e2a4c73 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
@@ -67,29 +67,29 @@ import org.eclipse.aether.util.filter.ScopeDependencyFilter;
 public class LifecycleDependencyResolver
 {
 
-    @Inject
-    private ProjectDependenciesResolver dependenciesResolver;
+    private final ProjectDependenciesResolver dependenciesResolver;
 
-    @Inject
-    private Logger logger;
+    private final Logger logger;
 
-    @Inject
-    private ProjectArtifactFactory artifactFactory;
+    private final ProjectArtifactFactory artifactFactory;
 
-    @Inject
-    private EventSpyDispatcher eventSpyDispatcher;
+    private final EventSpyDispatcher eventSpyDispatcher;
 
-    @Inject
-    private ProjectArtifactsCache projectArtifactsCache;
+    private final ProjectArtifactsCache projectArtifactsCache;
 
-    public LifecycleDependencyResolver()
-    {
-    }
-
-    public LifecycleDependencyResolver( ProjectDependenciesResolver projectDependenciesResolver, Logger logger )
+    @Inject
+    public LifecycleDependencyResolver(
+            ProjectDependenciesResolver dependenciesResolver,
+            Logger logger,
+            ProjectArtifactFactory artifactFactory,
+            EventSpyDispatcher eventSpyDispatcher,
+            ProjectArtifactsCache projectArtifactsCache )
     {
-        this.dependenciesResolver = projectDependenciesResolver;
+        this.dependenciesResolver = dependenciesResolver;
         this.logger = logger;
+        this.artifactFactory = artifactFactory;
+        this.eventSpyDispatcher = eventSpyDispatcher;
+        this.projectArtifactsCache = projectArtifactsCache;
     }
 
     public static List<MavenProject> getProjects( MavenProject project, MavenSession session, boolean aggregator )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
index 73839fc..a2f90be 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
@@ -53,24 +53,25 @@ import org.apache.maven.session.scope.internal.SessionScope;
 public class LifecycleModuleBuilder
 {
 
-    @Inject
-    private MojoExecutor mojoExecutor;
-
-    @Inject
-    private BuilderCommon builderCommon;
-
-    @Inject
-    private ExecutionEventCatapult eventCatapult;
-
-    private ProjectExecutionListener projectExecutionListener;
-
-    @Inject
-    private SessionScope sessionScope;
+    private final MojoExecutor mojoExecutor;
+    private final BuilderCommon builderCommon;
+    private final ExecutionEventCatapult eventCatapult;
+    private final ProjectExecutionListener projectExecutionListener;
+    private final SessionScope sessionScope;
 
     @Inject
-    public void setProjectExecutionListeners( final List<ProjectExecutionListener> listeners )
+    public LifecycleModuleBuilder(
+            MojoExecutor mojoExecutor,
+            BuilderCommon builderCommon,
+            ExecutionEventCatapult eventCatapult,
+            List<ProjectExecutionListener> listeners,
+            SessionScope sessionScope )
     {
+        this.mojoExecutor = mojoExecutor;
+        this.builderCommon = builderCommon;
+        this.eventCatapult = eventCatapult;
         this.projectExecutionListener = new CompoundProjectExecutionListener( listeners );
+        this.sessionScope = sessionScope;
     }
 
     public void buildProject( MavenSession session, ReactorContext reactorContext, MavenProject currentProject,
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
index e3d886d..06ba60d 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java
@@ -48,29 +48,42 @@ import org.codehaus.plexus.logging.Logger;
 @Singleton
 public class LifecycleStarter
 {
-    @Inject
-    private ExecutionEventCatapult eventCatapult;
+    private final ExecutionEventCatapult eventCatapult;
 
-    @Inject
-    private DefaultLifecycles defaultLifeCycles;
+    private final DefaultLifecycles defaultLifeCycles;
 
-    @Inject
-    private Logger logger;
+    private final Logger logger;
 
-    @Inject
-    private BuildListCalculator buildListCalculator;
+    private final BuildListCalculator buildListCalculator;
 
-    @Inject
-    private LifecycleDebugLogger lifecycleDebugLogger;
+    private final LifecycleDebugLogger lifecycleDebugLogger;
 
-    @Inject
-    private LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
+    private final LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
 
-    @Inject
-    private Map<String, Builder> builders;
+    private final Map<String, Builder> builders;
+
+    private final SessionScope sessionScope;
 
     @Inject
-    private SessionScope sessionScope;
+    public LifecycleStarter(
+            ExecutionEventCatapult eventCatapult,
+            DefaultLifecycles defaultLifeCycles,
+            Logger logger,
+            BuildListCalculator buildListCalculator,
+            LifecycleDebugLogger lifecycleDebugLogger,
+            LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator,
+            Map<String, Builder> builders,
+            SessionScope sessionScope )
+    {
+        this.eventCatapult = eventCatapult;
+        this.defaultLifeCycles = defaultLifeCycles;
+        this.logger = logger;
+        this.buildListCalculator = buildListCalculator;
+        this.lifecycleDebugLogger = lifecycleDebugLogger;
+        this.lifecycleTaskSegmentCalculator = lifecycleTaskSegmentCalculator;
+        this.builders = builders;
+        this.sessionScope = sessionScope;
+    }
 
     public void execute( MavenSession session )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
index 03eae37..e584966 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
@@ -67,29 +67,21 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
 public class MojoDescriptorCreator
 {
 
-    @Inject
-    private Logger logger;
-
-    @Inject
-    private PluginVersionResolver pluginVersionResolver;
+    private final Logger logger;
+    private final PluginVersionResolver pluginVersionResolver;
+    private final BuildPluginManager pluginManager;
+    private final PluginPrefixResolver pluginPrefixResolver;
+    private final LifecyclePluginResolver lifecyclePluginResolver;
 
     @Inject
-    private BuildPluginManager pluginManager;
-
-    @Inject
-    private PluginPrefixResolver pluginPrefixResolver;
-
-    @Inject
-    private LifecyclePluginResolver lifecyclePluginResolver;
-
-    public MojoDescriptorCreator()
-    {
-    }
-
-    public MojoDescriptorCreator( PluginVersionResolver pluginVersionResolver, BuildPluginManager pluginManager,
-                                  PluginPrefixResolver pluginPrefixResolver,
-                                  LifecyclePluginResolver lifecyclePluginResolver )
+    public MojoDescriptorCreator(
+            Logger logger,
+            PluginVersionResolver pluginVersionResolver,
+            BuildPluginManager pluginManager,
+            PluginPrefixResolver pluginPrefixResolver,
+            LifecyclePluginResolver lifecyclePluginResolver )
     {
+        this.logger = logger;
         this.pluginVersionResolver = pluginVersionResolver;
         this.pluginManager = pluginManager;
         this.pluginPrefixResolver = pluginPrefixResolver;
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
index 89fadfd..c28f218 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
@@ -67,20 +67,22 @@ import org.codehaus.plexus.util.StringUtils;
 public class MojoExecutor
 {
 
-    @Inject
-    private BuildPluginManager pluginManager;
-
-    @Inject
-    private MavenPluginManager mavenPluginManager;
+    private final BuildPluginManager pluginManager;
+    private final MavenPluginManager mavenPluginManager;
+    private final LifecycleDependencyResolver lifeCycleDependencyResolver;
+    private final ExecutionEventCatapult eventCatapult;
 
     @Inject
-    private LifecycleDependencyResolver lifeCycleDependencyResolver;
-
-    @Inject
-    private ExecutionEventCatapult eventCatapult;
-
-    public MojoExecutor()
+    public MojoExecutor(
+            BuildPluginManager pluginManager,
+            MavenPluginManager mavenPluginManager,
+            LifecycleDependencyResolver lifeCycleDependencyResolver,
+            ExecutionEventCatapult eventCatapult )
     {
+        this.pluginManager = pluginManager;
+        this.mavenPluginManager = mavenPluginManager;
+        this.lifeCycleDependencyResolver = lifeCycleDependencyResolver;
+        this.eventCatapult = eventCatapult;
     }
 
     public DependencyContext newDependencyContext( MavenSession session, List<MojoExecution> mojoExecutions )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
index d16b27d..e956dd2 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
@@ -71,28 +71,22 @@ import org.codehaus.plexus.logging.Logger;
 @Singleton
 public class BuilderCommon
 {
-    @Inject
-    private LifecycleDebugLogger lifecycleDebugLogger;
-
-    @Inject
-    private LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator;
+    private final Logger logger;
+    private final LifecycleDebugLogger lifecycleDebugLogger;
+    private final LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator;
+    private final ExecutionEventCatapult eventCatapult;
 
     @Inject
-    private ExecutionEventCatapult eventCatapult;
-
-    @Inject
-    private Logger logger;
-
-    public BuilderCommon()
-    {
-    }
-
-    public BuilderCommon( LifecycleDebugLogger lifecycleDebugLogger,
-                          LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator, Logger logger )
+    public BuilderCommon(
+            Logger logger,
+            LifecycleDebugLogger lifecycleDebugLogger,
+            LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator,
+            ExecutionEventCatapult eventCatapult )
     {
+        this.logger = logger;
         this.lifecycleDebugLogger = lifecycleDebugLogger;
         this.lifeCycleExecutionPlanCalculator = lifeCycleExecutionPlanCalculator;
-        this.logger = logger;
+        this.eventCatapult = eventCatapult;
     }
 
     public MavenExecutionPlan resolveBuildPlan( MavenSession session, MavenProject project, TaskSegment taskSegment,
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
index 285217f..fd2676b 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
@@ -65,14 +65,14 @@ public class MultiThreadedBuilder
     implements Builder
 {
 
-    @Inject
-    private Logger logger;
+    private final Logger logger;
+    private final LifecycleModuleBuilder lifecycleModuleBuilder;
 
     @Inject
-    private LifecycleModuleBuilder lifecycleModuleBuilder;
-
-    public MultiThreadedBuilder()
+    public MultiThreadedBuilder( Logger logger, LifecycleModuleBuilder lifecycleModuleBuilder )
     {
+        this.logger = logger;
+        this.lifecycleModuleBuilder = lifecycleModuleBuilder;
     }
 
     @Override
diff --git a/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java b/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
index 6ffcb06..378ebf1 100644
--- a/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
+++ b/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java
@@ -55,10 +55,15 @@ public class DefaultLifecycleBindingsInjector
     implements LifecycleBindingsInjector
 {
 
-    private LifecycleBindingsMerger merger = new LifecycleBindingsMerger();
+    private final LifecycleBindingsMerger merger = new LifecycleBindingsMerger();
+
+    private final LifeCyclePluginAnalyzer lifecycle;
 
     @Inject
-    private LifeCyclePluginAnalyzer lifecycle;
+    public DefaultLifecycleBindingsInjector( LifeCyclePluginAnalyzer lifecycle )
+    {
+        this.lifecycle = lifecycle;
+    }
 
     public void injectLifecycleBindings( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
index 15a35ea..272371a 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
@@ -51,21 +51,22 @@ public class DefaultBuildPluginManager
     implements BuildPluginManager
 {
 
-    @Inject
-    private MavenPluginManager mavenPluginManager;
-
-    @Inject
-    private LegacySupport legacySupport;
-
-    @Inject
-    private MojoExecutionScope scope;
-
-    private MojoExecutionListener mojoExecutionListener;
+    private final MavenPluginManager mavenPluginManager;
+    private final LegacySupport legacySupport;
+    private final MojoExecutionScope scope;
+    private final MojoExecutionListener mojoExecutionListener;
 
     @Inject
-    public void setMojoExecutionListeners( final List<MojoExecutionListener> listeners )
+    public DefaultBuildPluginManager(
+            MavenPluginManager mavenPluginManager,
+            LegacySupport legacySupport,
+            MojoExecutionScope scope,
+            List<MojoExecutionListener> mojoExecutionListeners )
     {
-        this.mojoExecutionListener = new CompoundMojoExecutionListener( listeners );
+        this.mavenPluginManager = mavenPluginManager;
+        this.legacySupport = legacySupport;
+        this.scope = scope;
+        this.mojoExecutionListener = new CompoundMojoExecutionListener( mojoExecutionListeners );
     }
 
     /**
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
index 7bb19bb..398846e 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
@@ -132,48 +132,53 @@ public class DefaultMavenPluginManager
      */
     public static final String KEY_EXTENSIONS_REALMS = DefaultMavenPluginManager.class.getName() + "/extensionsRealms";
 
-    @Inject
     private Logger logger;
-
-    @Inject
     private LoggerManager loggerManager;
-
-    @Inject
     private PlexusContainer container;
-
-    @Inject
     private ClassRealmManager classRealmManager;
-
-    @Inject
     private PluginDescriptorCache pluginDescriptorCache;
-
-    @Inject
     private PluginRealmCache pluginRealmCache;
-
-    @Inject
     private PluginDependenciesResolver pluginDependenciesResolver;
-
-    @Inject
     private RuntimeInformation runtimeInformation;
-
-    @Inject
     private ExtensionRealmCache extensionRealmCache;
-
-    @Inject
     private PluginVersionResolver pluginVersionResolver;
-
-    @Inject
     private PluginArtifactsCache pluginArtifactsCache;
-
-    @Inject
     private MavenPluginValidator pluginValidator;
 
-    private ExtensionDescriptorBuilder extensionDescriptorBuilder = new ExtensionDescriptorBuilder();
+    private final ExtensionDescriptorBuilder extensionDescriptorBuilder = new ExtensionDescriptorBuilder();
+    private final PluginDescriptorBuilder builder = new PluginDescriptorBuilder();
 
-    private PluginDescriptorBuilder builder = new PluginDescriptorBuilder();
+    @Inject
+    public DefaultMavenPluginManager(
+            Logger logger,
+            LoggerManager loggerManager,
+            PlexusContainer container,
+            ClassRealmManager classRealmManager,
+            PluginDescriptorCache pluginDescriptorCache,
+            PluginRealmCache pluginRealmCache,
+            PluginDependenciesResolver pluginDependenciesResolver,
+            RuntimeInformation runtimeInformation,
+            ExtensionRealmCache extensionRealmCache,
+            PluginVersionResolver pluginVersionResolver,
+            PluginArtifactsCache pluginArtifactsCache,
+            MavenPluginValidator pluginValidator )
+    {
+        this.logger = logger;
+        this.loggerManager = loggerManager;
+        this.container = container;
+        this.classRealmManager = classRealmManager;
+        this.pluginDescriptorCache = pluginDescriptorCache;
+        this.pluginRealmCache = pluginRealmCache;
+        this.pluginDependenciesResolver = pluginDependenciesResolver;
+        this.runtimeInformation = runtimeInformation;
+        this.extensionRealmCache = extensionRealmCache;
+        this.pluginVersionResolver = pluginVersionResolver;
+        this.pluginArtifactsCache = pluginArtifactsCache;
+        this.pluginValidator = pluginValidator;
+    }
 
     public synchronized PluginDescriptor getPluginDescriptor( Plugin plugin, List<RemoteRepository> repositories,
-                                                              RepositorySystemSession session )
+                                                             RepositorySystemSession session )
         throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException
     {
         PluginDescriptorCache.Key cacheKey = pluginDescriptorCache.createKey( plugin, repositories, session );
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
index 709bd72..9fa424e 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
@@ -78,11 +78,15 @@ public class DefaultPluginDependenciesResolver
 
     private static final String REPOSITORY_CONTEXT = "plugin";
 
-    @Inject
-    private Logger logger;
+    private final Logger logger;
+    private final RepositorySystem repoSystem;
 
     @Inject
-    private RepositorySystem repoSystem;
+    public DefaultPluginDependenciesResolver( Logger logger, RepositorySystem repoSystem )
+    {
+        this.logger = logger;
+        this.repoSystem = repoSystem;
+    }
 
     private Artifact toArtifact( Plugin plugin, RepositorySystemSession session )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
index 547e457..24f7135 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java
@@ -70,20 +70,26 @@ public class DefaultPluginManager
     implements PluginManager
 {
 
-    @Inject
-    private PlexusContainer container;
-
-    @Inject
-    private MavenPluginManager pluginManager;
-
-    @Inject
-    private PluginVersionResolver pluginVersionResolver;
+    private final PlexusContainer container;
+    private final MavenPluginManager pluginManager;
+    private final PluginVersionResolver pluginVersionResolver;
+    private final PluginPrefixResolver pluginPrefixResolver;
+    private final LegacySupport legacySupport;
 
     @Inject
-    private PluginPrefixResolver pluginPrefixResolver;
-
-    @Inject
-    private LegacySupport legacySupport;
+    public DefaultPluginManager(
+            PlexusContainer container,
+            MavenPluginManager pluginManager,
+            PluginVersionResolver pluginVersionResolver,
+            PluginPrefixResolver pluginPrefixResolver,
+            LegacySupport legacySupport )
+    {
+        this.container = container;
+        this.pluginManager = pluginManager;
+        this.pluginVersionResolver = pluginVersionResolver;
+        this.pluginPrefixResolver = pluginPrefixResolver;
+        this.legacySupport = legacySupport;
+    }
 
     public void executeMojo( MavenProject project, MojoExecution execution, MavenSession session )
         throws MojoExecutionException, ArtifactResolutionException, MojoFailureException, ArtifactNotFoundException,
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java
index 7b98e80..86ada01 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java
@@ -68,17 +68,23 @@ public class DefaultPluginPrefixResolver
 
     private static final String REPOSITORY_CONTEXT = "plugin";
 
-    @Inject
-    private Logger logger;
-
-    @Inject
-    private BuildPluginManager pluginManager;
+    private final Logger logger;
+    private final BuildPluginManager pluginManager;
+    private final RepositorySystem repositorySystem;
+    private final MetadataReader metadataReader;
 
     @Inject
-    private RepositorySystem repositorySystem;
-
-    @Inject
-    private MetadataReader metadataReader;
+    public DefaultPluginPrefixResolver(
+            Logger logger,
+            BuildPluginManager pluginManager,
+            RepositorySystem repositorySystem,
+            MetadataReader metadataReader )
+    {
+        this.logger = logger;
+        this.pluginManager = pluginManager;
+        this.repositorySystem = repositorySystem;
+        this.metadataReader = metadataReader;
+    }
 
     public PluginPrefixResult resolve( PluginPrefixRequest request )
         throws NoPluginFoundForPrefixException
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
index ec72f2a..9517af7 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
@@ -81,17 +81,23 @@ public class DefaultPluginVersionResolver
 
     private static final Object CACHE_KEY = new Object();
 
-    @Inject
-    private Logger logger;
-
-    @Inject
-    private RepositorySystem repositorySystem;
+    private final Logger logger;
+    private final RepositorySystem repositorySystem;
+    private final MetadataReader metadataReader;
+    private final MavenPluginManager pluginManager;
 
     @Inject
-    private MetadataReader metadataReader;
-
-    @Inject
-    private MavenPluginManager pluginManager;
+    public DefaultPluginVersionResolver(
+            Logger logger,
+            RepositorySystem repositorySystem,
+            MetadataReader metadataReader,
+            MavenPluginManager pluginManager )
+    {
+        this.logger = logger;
+        this.repositorySystem = repositorySystem;
+        this.metadataReader = metadataReader;
+        this.pluginManager = pluginManager;
+    }
 
     public PluginVersionResult resolve( PluginVersionRequest request )
         throws PluginVersionResolutionException
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 3aaf8ee..80145c5 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -75,6 +75,7 @@ import org.apache.maven.repository.internal.DefaultModelCache;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.Os;
 import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.RequestTrace;
 import org.eclipse.aether.impl.RemoteRepositoryManager;
@@ -93,31 +94,36 @@ public class DefaultProjectBuilder
     implements ProjectBuilder
 {
 
-    @Inject
-    private Logger logger;
-
-    @Inject
-    private ModelBuilder modelBuilder;
-
-    @Inject
-    private ModelProcessor modelProcessor;
-
-    @Inject
-    private ProjectBuildingHelper projectBuildingHelper;
-
-    @Inject
-    private MavenRepositorySystem repositorySystem;
+    private final Logger logger;
+    private final ModelBuilder modelBuilder;
+    private final ModelProcessor modelProcessor;
+    private final ProjectBuildingHelper projectBuildingHelper;
+    private final MavenRepositorySystem repositorySystem;
+    private final org.eclipse.aether.RepositorySystem repoSystem;
+    private final RemoteRepositoryManager repositoryManager;
+    private final ProjectDependenciesResolver dependencyResolver;
 
     @Inject
-    private org.eclipse.aether.RepositorySystem repoSystem;
-
-    @Inject
-    private RemoteRepositoryManager repositoryManager;
-
-    @Inject
-    private ProjectDependenciesResolver dependencyResolver;
-
-    // ----------------------------------------------------------------------
+    public DefaultProjectBuilder(
+            Logger logger,
+            ModelBuilder modelBuilder,
+            ModelProcessor modelProcessor,
+            ProjectBuildingHelper projectBuildingHelper,
+            MavenRepositorySystem repositorySystem,
+            RepositorySystem repoSystem,
+            RemoteRepositoryManager repositoryManager,
+            ProjectDependenciesResolver dependencyResolver )
+    {
+        this.logger = logger;
+        this.modelBuilder = modelBuilder;
+        this.modelProcessor = modelProcessor;
+        this.projectBuildingHelper = projectBuildingHelper;
+        this.repositorySystem = repositorySystem;
+        this.repoSystem = repoSystem;
+        this.repositoryManager = repositoryManager;
+        this.dependencyResolver = dependencyResolver;
+    }
+// ----------------------------------------------------------------------
     // MavenProjectBuilder Implementation
     // ----------------------------------------------------------------------
 
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
index e5c89e6..eeb2dbc 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
@@ -68,23 +68,29 @@ public class DefaultProjectBuildingHelper
     implements ProjectBuildingHelper
 {
 
-    @Inject
-    private Logger logger;
-
-    @Inject
-    private PlexusContainer container;
+    private final Logger logger;
+    private final PlexusContainer container;
+    private final ClassRealmManager classRealmManager;
+    private final ProjectRealmCache projectRealmCache;
+    private final RepositorySystem repositorySystem;
+    private final MavenPluginManager pluginManager;
 
     @Inject
-    private ClassRealmManager classRealmManager;
-
-    @Inject
-    private ProjectRealmCache projectRealmCache;
-
-    @Inject
-    private RepositorySystem repositorySystem;
-
-    @Inject
-    private MavenPluginManager pluginManager;
+    public DefaultProjectBuildingHelper(
+            Logger logger,
+            PlexusContainer container,
+            ClassRealmManager classRealmManager,
+            ProjectRealmCache projectRealmCache,
+            RepositorySystem repositorySystem,
+            MavenPluginManager pluginManager )
+    {
+        this.logger = logger;
+        this.container = container;
+        this.classRealmManager = classRealmManager;
+        this.projectRealmCache = projectRealmCache;
+        this.repositorySystem = repositorySystem;
+        this.pluginManager = pluginManager;
+    }
 
     public List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
                                                                 List<ArtifactRepository> externalRepositories,
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
index 267dc2d..2f6bebf 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
@@ -62,14 +62,20 @@ public class DefaultProjectDependenciesResolver
     implements ProjectDependenciesResolver
 {
 
-    @Inject
-    private Logger logger;
-
-    @Inject
-    private RepositorySystem repoSystem;
+    private final Logger logger;
+    private final RepositorySystem repoSystem;
+    private final List<RepositorySessionDecorator> decorators;
 
     @Inject
-    private List<RepositorySessionDecorator> decorators;
+    public DefaultProjectDependenciesResolver(
+            Logger logger,
+            RepositorySystem repoSystem,
+            List<RepositorySessionDecorator> decorators )
+    {
+        this.logger = logger;
+        this.repoSystem = repoSystem;
+        this.decorators = decorators;
+    }
 
     public DependencyResolutionResult resolve( DependencyResolutionRequest request )
         throws DependencyResolutionException
diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java
index 9f22f99..fd1c3e0 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java
@@ -19,9 +19,16 @@ package org.apache.maven.project.artifact;
  * under the License.
  */
 
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.project.ProjectBuilder;
+import org.codehaus.plexus.logging.Logger;
+
 /**
  * This realizes the metadata source via the default hint to provide backward-compat with Maven 2.x whose Plexus version
  * registered component descriptors twice: once keyed by role+roleHint and once keyed by role only. This effectively
@@ -34,5 +41,11 @@ import javax.inject.Singleton;
 public class DefaultMetadataSource
     extends MavenMetadataSource
 {
-
+    @Inject
+    public DefaultMetadataSource(
+            Logger logger, RepositoryMetadataManager repositoryMetadataManager, ArtifactFactory repositorySystem,
+            ProjectBuilder projectBuilder, MavenMetadataCache cache, LegacySupport legacySupport )
+    {
+        super( logger, repositoryMetadataManager, repositorySystem, projectBuilder, cache, legacySupport );
+    }
 }
diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index 271e6d6..31d239a 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -78,8 +78,6 @@ import org.apache.maven.properties.internal.SystemProperties;
 import org.apache.maven.repository.internal.MavenWorkspaceReader;
 import org.apache.maven.repository.legacy.metadata.DefaultMetadataResolutionRequest;
 import org.apache.maven.repository.legacy.metadata.MetadataResolutionRequest;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RepositoryPolicy;
@@ -94,27 +92,30 @@ import org.eclipse.aether.transfer.ArtifactNotFoundException;
 public class MavenMetadataSource
     implements ArtifactMetadataSource
 {
-    @Inject
-    private RepositoryMetadataManager repositoryMetadataManager;
 
-    @Inject
+    private Logger logger;
+    private RepositoryMetadataManager repositoryMetadataManager;
     private ArtifactFactory repositorySystem;
-
-    //TODO This prevents a cycle in the composition which shows us another problem we need to deal with.
-    //@Inject
     private ProjectBuilder projectBuilder;
-
-    @Inject
-    private PlexusContainer container;
-
-    @Inject
-    private Logger logger;
-
-    @Inject
     private MavenMetadataCache cache;
+    private LegacySupport legacySupport;
 
     @Inject
-    private LegacySupport legacySupport;
+    public MavenMetadataSource(
+            Logger logger,
+            RepositoryMetadataManager repositoryMetadataManager,
+            ArtifactFactory repositorySystem,
+            ProjectBuilder projectBuilder,
+            MavenMetadataCache cache,
+            LegacySupport legacySupport )
+    {
+        this.logger = logger;
+        this.repositoryMetadataManager = repositoryMetadataManager;
+        this.repositorySystem = repositorySystem;
+        this.projectBuilder = projectBuilder;
+        this.cache = cache;
+        this.legacySupport = legacySupport;
+    }
 
     private void injectSession( MetadataResolutionRequest request )
     {
@@ -535,24 +536,6 @@ public class MavenMetadataSource
         return artifacts;
     }
 
-    private ProjectBuilder getProjectBuilder()
-    {
-        if ( projectBuilder != null )
-        {
-            return projectBuilder;
-        }
-
-        try
-        {
-            projectBuilder = container.lookup( ProjectBuilder.class );
-        }
-        catch ( ComponentLookupException e )
-        {
-            // Won't happen
-        }
-
-        return projectBuilder;
-    }
     @SuppressWarnings( "checkstyle:methodlength" )
     private ProjectRelocation retrieveRelocatedProject( Artifact artifact, MetadataResolutionRequest repositoryRequest )
         throws ArtifactMetadataRetrievalException
@@ -593,7 +576,7 @@ public class MavenMetadataSource
                     configuration.setSystemProperties( getSystemProperties() );
                     configuration.setRepositorySession( legacySupport.getRepositorySession() );
 
-                    project = getProjectBuilder().build( pomArtifact, configuration ).getProject();
+                    project = projectBuilder.build( pomArtifact, configuration ).getProject();
                 }
                 catch ( ProjectBuildingException e )
                 {
diff --git a/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java b/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java
index fbb817e..9c01ba6 100644
--- a/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java
+++ b/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java
@@ -46,11 +46,16 @@ public class DefaultRuntimeInformation
     implements RuntimeInformation
 {
 
-    @Inject
-    private Logger logger;
+    private final Logger logger;
 
     private String mavenVersion;
 
+    @Inject
+    public DefaultRuntimeInformation( Logger logger )
+    {
+        this.logger = logger;
+    }
+
     public String getMavenVersion()
     {
         if ( mavenVersion == null )
diff --git a/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java b/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
index 8b12796..3c173ec 100644
--- a/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
@@ -46,8 +46,13 @@ public class DefaultMavenSettingsBuilder
     implements MavenSettingsBuilder
 {
 
+    private final SettingsBuilder settingsBuilder;
+
     @Inject
-    private SettingsBuilder settingsBuilder;
+    public DefaultMavenSettingsBuilder( SettingsBuilder settingsBuilder )
+    {
+        this.settingsBuilder = settingsBuilder;
+    }
 
     public Settings buildSettings()
         throws IOException, XmlPullParserException
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
index cfe22cb..7bb6db6 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
@@ -43,11 +43,15 @@ import org.codehaus.plexus.logging.Logger;
 public class DefaultToolchainManager
     implements ToolchainManager
 {
-    @Inject
-    Logger logger;
+    final Logger logger;
+    final Map<String, ToolchainFactory> factories;
 
     @Inject
-    Map<String, ToolchainFactory> factories;
+    public DefaultToolchainManager( Logger logger, Map<String, ToolchainFactory> factories )
+    {
+        this.logger = logger;
+        this.factories = factories;
+    }
 
     @Override
     public Toolchain getToolchainFromBuildContext( String type, MavenSession session )
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java
index 538c99d..bfe3a4b 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java
@@ -23,11 +23,13 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.toolchain.model.ToolchainModel;
+import org.codehaus.plexus.logging.Logger;
 
 /**
  * @author mkleint
@@ -40,6 +42,12 @@ public class DefaultToolchainManagerPrivate
     implements ToolchainManagerPrivate
 {
 
+    @Inject
+    public DefaultToolchainManagerPrivate( Logger logger, Map<String, ToolchainFactory> factories )
+    {
+        super( logger, factories );
+    }
+
     @Override
     public ToolchainPrivate[] getToolchainsForType( String type, MavenSession context )
         throws MisconfiguredToolchainException
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java
index 94f3114..5bdbccb 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java
@@ -42,8 +42,13 @@ public class DefaultToolchainsBuilder
     implements ToolchainsBuilder
 {
 
+    private final Logger logger;
+
     @Inject
-    private Logger logger;
+    public DefaultToolchainsBuilder( Logger logger )
+    {
+        this.logger = logger;
+    }
 
     public PersistedToolchains build( File userToolchainsFile )
         throws MisconfiguredToolchainException
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java b/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java
index 6b337a6..66b3aa5 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java
@@ -53,13 +53,18 @@ import java.util.Map;
 public class DefaultToolchainsBuilder
     implements ToolchainsBuilder
 {
-    private MavenToolchainMerger toolchainsMerger = new MavenToolchainMerger();
-
-    @Inject
+    private final MavenToolchainMerger toolchainsMerger = new MavenToolchainMerger();
     private ToolchainsWriter toolchainsWriter;
+    private ToolchainsReader toolchainsReader;
 
     @Inject
-    private ToolchainsReader toolchainsReader;
+    public DefaultToolchainsBuilder(
+            ToolchainsWriter toolchainsWriter,
+            ToolchainsReader toolchainsReader )
+    {
+        this.toolchainsWriter = toolchainsWriter;
+        this.toolchainsReader = toolchainsReader;
+    }
 
     @Override
     public ToolchainsBuildingResult build( ToolchainsBuildingRequest request )
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java b/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java
index f2e45a3..e32e35c 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java
@@ -51,9 +51,14 @@ public class JavaToolchainFactory
     implements ToolchainFactory
 {
 
-    @Inject
     private Logger logger;
 
+    @Inject
+    public JavaToolchainFactory( Logger logger )
+    {
+        this.logger = logger;
+    }
+
     public ToolchainPrivate createToolchain( ToolchainModel model )
         throws MisconfiguredToolchainException
     {
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java b/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java
index b111969..6da190c 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java
@@ -28,6 +28,7 @@ import javax.inject.Singleton;
 import org.apache.maven.execution.MojoExecutionEvent;
 import org.apache.maven.execution.MojoExecutionListener;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.eclipse.sisu.Priority;
 
 @Named
 @Singleton
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
index fe0776e..88c2dab 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java
@@ -98,8 +98,7 @@ public class BuilderCommonTest
     public BuilderCommon getBuilderCommon()
     {
         final LifecycleDebugLogger debugLogger = new LifecycleDebugLogger( logger );
-        return new BuilderCommon( debugLogger, new LifecycleExecutionPlanCalculatorStub(),
-                                  logger );
+        return new BuilderCommon( logger, debugLogger, new LifecycleExecutionPlanCalculatorStub(), null );
     }
 
 }
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
index 28d552a..f669bdb 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
@@ -72,7 +72,7 @@ public class LifecycleExecutionPlanCalculatorTest
 
     public static MojoDescriptorCreator createMojoDescriptorCreator()
     {
-        return new MojoDescriptorCreator( new PluginVersionResolverStub(), new BuildPluginManagerStub(),
+        return new MojoDescriptorCreator( null, new PluginVersionResolverStub(), new BuildPluginManagerStub(),
                                           new PluginPrefixResolverStub(),
                                           new LifecyclePluginResolver( new PluginVersionResolverStub() ) );
     }
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java
index ae613cc..80c4ab7 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java
@@ -17,8 +17,10 @@ package org.apache.maven.lifecycle.internal.stub;
 
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.internal.GoalTask;
+import org.apache.maven.lifecycle.internal.LifecyclePluginResolver;
 import org.apache.maven.lifecycle.internal.LifecycleTask;
 import org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator;
+import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
 import org.apache.maven.lifecycle.internal.TaskSegment;
 import org.apache.maven.plugin.InvalidPluginDescriptorException;
 import org.apache.maven.plugin.MojoNotFoundException;
@@ -43,8 +45,12 @@ public class LifecycleTaskSegmentCalculatorStub
 
     public static final String install = "install";
 
+    public LifecycleTaskSegmentCalculatorStub()
+    {
+        super( null, null );
+    }
 
-    public List<TaskSegment> calculateTaskSegments( MavenSession session, List<String> tasks )
+    public List<TaskSegment> calculateTaskSegments(MavenSession session, List<String> tasks )
         throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
         MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
         PluginVersionResolutionException
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
index 250e60d..f035351 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
@@ -18,9 +18,13 @@ package org.apache.maven.lifecycle.internal.stub;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.internal.DependencyContext;
+import org.apache.maven.lifecycle.internal.ExecutionEventCatapult;
+import org.apache.maven.lifecycle.internal.LifecycleDependencyResolver;
 import org.apache.maven.lifecycle.internal.MojoExecutor;
 import org.apache.maven.lifecycle.internal.PhaseRecorder;
 import org.apache.maven.lifecycle.internal.ProjectIndex;
+import org.apache.maven.plugin.BuildPluginManager;
+import org.apache.maven.plugin.MavenPluginManager;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
@@ -36,7 +40,16 @@ public class MojoExecutorStub
     extends MojoExecutor
 { // This is being lazy instead of making interface
 
-    public List<MojoExecution> executions = Collections.synchronizedList(new ArrayList<>() );
+    public final List<MojoExecution> executions = Collections.synchronizedList(new ArrayList<>() );
+
+    public MojoExecutorStub(
+            BuildPluginManager pluginManager,
+            MavenPluginManager mavenPluginManager,
+            LifecycleDependencyResolver lifeCycleDependencyResolver,
+            ExecutionEventCatapult eventCatapult )
+    {
+        super( pluginManager, mavenPluginManager, lifeCycleDependencyResolver, eventCatapult );
+    }
 
     @Override
     public void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex,
diff --git a/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java b/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java
index d39f4c6..e07bf93 100644
--- a/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java
+++ b/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java
@@ -25,10 +25,15 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.ResolutionGroup;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.project.artifact.MavenMetadataCache;
 import org.apache.maven.project.artifact.MavenMetadataSource;
+import org.codehaus.plexus.logging.Logger;
 
 @SuppressWarnings( "deprecation" )
 @Named( "classpath" )
@@ -36,6 +41,11 @@ import org.apache.maven.project.artifact.MavenMetadataSource;
 public class TestMetadataSource
     extends MavenMetadataSource
 {
+
+    public TestMetadataSource( Logger logger, RepositoryMetadataManager repositoryMetadataManager, ArtifactFactory repositorySystem, ProjectBuilder projectBuilder, MavenMetadataCache cache, LegacySupport legacySupport) {
+        super( logger, repositoryMetadataManager, repositorySystem, projectBuilder, cache, legacySupport );
+    }
+
     @Override
     public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
                                      List<ArtifactRepository> remoteRepositories )
diff --git a/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java b/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java
index 523645f..cbdf6f5 100644
--- a/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java
+++ b/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java
@@ -60,13 +60,13 @@ public class DefaultToolchainManagerPrivateTest
     @BeforeEach
     public void setUp()
     {
-        toolchainManager = new DefaultToolchainManagerPrivate();
 
         MockitoAnnotations.initMocks( this );
 
-        toolchainManager.factories = new HashMap<>();
-        toolchainManager.factories.put( "basic", toolchainFactory_basicType );
-        toolchainManager.factories.put( "rare", toolchainFactory_rareType );
+        Map<String, ToolchainFactory> factories = new HashMap<>();
+        factories.put( "basic", toolchainFactory_basicType );
+        factories.put( "rare", toolchainFactory_rareType );
+        toolchainManager = new DefaultToolchainManagerPrivate( logger, factories );
     }
 
     @Test
diff --git a/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java b/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java
index c5b808f..5358a5b 100644
--- a/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java
+++ b/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java
@@ -61,13 +61,12 @@ public class DefaultToolchainManagerTest
     @BeforeEach
     public void onSetup() throws Exception
     {
-        toolchainManager = new DefaultToolchainManager();
-
         MockitoAnnotations.initMocks( this );
 
-        toolchainManager.factories = new HashMap<>();
-        toolchainManager.factories.put( "basic", toolchainFactory_basicType );
-        toolchainManager.factories.put( "rare", toolchainFactory_rareType );
+        Map<String, ToolchainFactory> factories = new HashMap<>();
+        factories.put( "basic", toolchainFactory_basicType );
+        factories.put( "rare", toolchainFactory_rareType );
+        toolchainManager = new DefaultToolchainManager( logger, factories );
     }
 
     @Test
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java b/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
index 5197f32..ef0c553 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
@@ -73,11 +73,17 @@ public class SettingsXmlConfigurationProcessor
 
     private static final Logger LOGGER = LoggerFactory.getLogger( SettingsXmlConfigurationProcessor.class );
 
-    @Inject
-    private SettingsBuilder settingsBuilder;
+    private final SettingsBuilder settingsBuilder;
+    private final SettingsDecrypter settingsDecrypter;
 
     @Inject
-    private SettingsDecrypter settingsDecrypter;
+    public SettingsXmlConfigurationProcessor(
+            SettingsBuilder settingsBuilder,
+            SettingsDecrypter settingsDecrypter )
+    {
+        this.settingsBuilder = settingsBuilder;
+        this.settingsDecrypter = settingsDecrypter;
+    }
 
     @Override
     public void process( CliRequest cliRequest )
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index b16819d..a45fa2c 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -103,170 +103,321 @@ import org.eclipse.sisu.Nullable;
 public class DefaultModelBuilder
     implements ModelBuilder
 {
-    @Inject
-    private ModelProcessor modelProcessor;
-
-    @Inject
-    private ModelValidator modelValidator;
-
-    @Inject
-    private ModelNormalizer modelNormalizer;
-
-    @Inject
-    private ModelInterpolator modelInterpolator;
-
-    @Inject
-    private ModelPathTranslator modelPathTranslator;
-
-    @Inject
-    private ModelUrlNormalizer modelUrlNormalizer;
-
-    @Inject
-    private SuperPomProvider superPomProvider;
-
-    @Inject
-    private InheritanceAssembler inheritanceAssembler;
-
-    @Inject
-    private ProfileSelector profileSelector;
-
-    @Inject
-    private ProfileInjector profileInjector;
-
-    @Inject
-    private PluginManagementInjector pluginManagementInjector;
-
-    @Inject
-    private DependencyManagementInjector dependencyManagementInjector;
-
-    @Inject
-    private DependencyManagementImporter dependencyManagementImporter;
-
-    @Inject
-    @Nullable
-    private LifecycleBindingsInjector lifecycleBindingsInjector;
-
-    @Inject
-    private PluginConfigurationExpander pluginConfigurationExpander;
+    private final ModelMerger modelMerger = new FileToRawModelMerger();
+
+    private final ModelProcessor modelProcessor;
+    private final ModelValidator modelValidator;
+    private final ModelNormalizer modelNormalizer;
+    private final ModelInterpolator modelInterpolator;
+    private final ModelPathTranslator modelPathTranslator;
+    private final ModelUrlNormalizer modelUrlNormalizer;
+    private final SuperPomProvider superPomProvider;
+    private final InheritanceAssembler inheritanceAssembler;
+    private final ProfileSelector profileSelector;
+    private final ProfileInjector profileInjector;
+    private final PluginManagementInjector pluginManagementInjector;
+    private final DependencyManagementInjector dependencyManagementInjector;
+    private final DependencyManagementImporter dependencyManagementImporter;
+    private final LifecycleBindingsInjector lifecycleBindingsInjector;
+    private final PluginConfigurationExpander pluginConfigurationExpander;
+    private final ReportConfigurationExpander reportConfigurationExpander;
+    private final ReportingConverter reportingConverter;
+    private final ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator;
 
     @Inject
-    private ReportConfigurationExpander reportConfigurationExpander;
-
-    @Inject
-    private ReportingConverter reportingConverter;
-
-    private ModelMerger modelMerger = new FileToRawModelMerger();
-
-    @Inject
-    private ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator;
+    public DefaultModelBuilder(
+            ModelProcessor modelProcessor,
+            ModelValidator modelValidator,
+            ModelNormalizer modelNormalizer,
+            ModelInterpolator modelInterpolator,
+            ModelPathTranslator modelPathTranslator,
+            ModelUrlNormalizer modelUrlNormalizer,
+            SuperPomProvider superPomProvider,
+            InheritanceAssembler inheritanceAssembler,
+            ProfileSelector profileSelector,
+            ProfileInjector profileInjector,
+            PluginManagementInjector pluginManagementInjector,
+            DependencyManagementInjector dependencyManagementInjector,
+            DependencyManagementImporter dependencyManagementImporter,
+            @Nullable LifecycleBindingsInjector lifecycleBindingsInjector,
+            PluginConfigurationExpander pluginConfigurationExpander,
+            ReportConfigurationExpander reportConfigurationExpander,
+            ReportingConverter reportingConverter,
+            ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator )
+    {
+        this.modelProcessor = modelProcessor;
+        this.modelValidator = modelValidator;
+        this.modelNormalizer = modelNormalizer;
+        this.modelInterpolator = modelInterpolator;
+        this.modelPathTranslator = modelPathTranslator;
+        this.modelUrlNormalizer = modelUrlNormalizer;
+        this.superPomProvider = superPomProvider;
+        this.inheritanceAssembler = inheritanceAssembler;
+        this.profileSelector = profileSelector;
+        this.profileInjector = profileInjector;
+        this.pluginManagementInjector = pluginManagementInjector;
+        this.dependencyManagementInjector = dependencyManagementInjector;
+        this.dependencyManagementImporter = dependencyManagementImporter;
+        this.lifecycleBindingsInjector = lifecycleBindingsInjector;
+        this.pluginConfigurationExpander = pluginConfigurationExpander;
+        this.reportConfigurationExpander = reportConfigurationExpander;
+        this.reportingConverter = reportingConverter;
+        this.profileActivationFilePathInterpolator = profileActivationFilePathInterpolator;
+    }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#set
+     */
+    @Deprecated
     public DefaultModelBuilder setModelProcessor( ModelProcessor modelProcessor )
     {
-        this.modelProcessor = modelProcessor;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setModelProcessor(ModelProcessor) 
+     */
+    @Deprecated
     public DefaultModelBuilder setModelValidator( ModelValidator modelValidator )
     {
-        this.modelValidator = modelValidator;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setModelNormalizer(ModelNormalizer) 
+     */
+    @Deprecated
     public DefaultModelBuilder setModelNormalizer( ModelNormalizer modelNormalizer )
     {
-        this.modelNormalizer = modelNormalizer;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setModelInterpolator(ModelInterpolator) 
+     */
+    @Deprecated
     public DefaultModelBuilder setModelInterpolator( ModelInterpolator modelInterpolator )
     {
-        this.modelInterpolator = modelInterpolator;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#set
+     */
+    @Deprecated
     public DefaultModelBuilder setModelPathTranslator( ModelPathTranslator modelPathTranslator )
     {
-        this.modelPathTranslator = modelPathTranslator;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setModelUrlNormalizer(ModelUrlNormalizer) 
+     */
+    @Deprecated
     public DefaultModelBuilder setModelUrlNormalizer( ModelUrlNormalizer modelUrlNormalizer )
     {
-        this.modelUrlNormalizer = modelUrlNormalizer;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setSuperPomProvider(SuperPomProvider) 
+     */
+    @Deprecated
     public DefaultModelBuilder setSuperPomProvider( SuperPomProvider superPomProvider )
     {
-        this.superPomProvider = superPomProvider;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
+    }
+
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setInheritanceAssembler(InheritanceAssembler) 
+     */
+    @Deprecated
+    public DefaultModelBuilder setInheritanceAssembler( InheritanceAssembler inheritanceAssembler )
+    {
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#set
+     */
+    @Deprecated
     public DefaultModelBuilder setProfileSelector( ProfileSelector profileSelector )
     {
-        this.profileSelector = profileSelector;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setProfileInjector(ProfileInjector) 
+     */
+    @Deprecated
     public DefaultModelBuilder setProfileInjector( ProfileInjector profileInjector )
     {
-        this.profileInjector = profileInjector;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
-    public DefaultModelBuilder setInheritanceAssembler( InheritanceAssembler inheritanceAssembler )
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setPluginManagementInjector(PluginManagementInjector) 
+     */
+    @Deprecated
+    public DefaultModelBuilder setPluginManagementInjector( PluginManagementInjector pluginManagementInjector )
     {
-        this.inheritanceAssembler = inheritanceAssembler;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
-    public DefaultModelBuilder setDependencyManagementImporter( DependencyManagementImporter depMgmtImporter )
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setDependencyManagementInjector(DependencyManagementInjector)  
+     */
+    @Deprecated
+    public DefaultModelBuilder setDependencyManagementInjector(
+            DependencyManagementInjector dependencyManagementInjector )
     {
-        this.dependencyManagementImporter = depMgmtImporter;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
-    public DefaultModelBuilder setDependencyManagementInjector( DependencyManagementInjector depMgmtInjector )
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setDependencyManagementImporter(DependencyManagementImporter) 
+     */
+    @Deprecated
+    public DefaultModelBuilder setDependencyManagementImporter(
+            DependencyManagementImporter dependencyManagementImporter )
     {
-        this.dependencyManagementInjector = depMgmtInjector;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setLifecycleBindingsInjector(LifecycleBindingsInjector) 
+     */
+    @Deprecated
     public DefaultModelBuilder setLifecycleBindingsInjector( LifecycleBindingsInjector lifecycleBindingsInjector )
     {
-        this.lifecycleBindingsInjector = lifecycleBindingsInjector;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setPluginConfigurationExpander(PluginConfigurationExpander) 
+     */
+    @Deprecated
     public DefaultModelBuilder setPluginConfigurationExpander( PluginConfigurationExpander pluginConfigurationExpander )
     {
-        this.pluginConfigurationExpander = pluginConfigurationExpander;
-        return this;
-    }
-
-    public DefaultModelBuilder setPluginManagementInjector( PluginManagementInjector pluginManagementInjector )
-    {
-        this.pluginManagementInjector = pluginManagementInjector;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setReportConfigurationExpander(ReportConfigurationExpander)  
+     */
+    @Deprecated
     public DefaultModelBuilder setReportConfigurationExpander( ReportConfigurationExpander reportConfigurationExpander )
     {
-        this.reportConfigurationExpander = reportConfigurationExpander;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setReportingConverter(ReportingConverter) 
+     */
+    @Deprecated
     public DefaultModelBuilder setReportingConverter( ReportingConverter reportingConverter )
     {
-        this.reportingConverter = reportingConverter;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
+    /**
+     * @deprecated since Maven 4
+     * @see DefaultModelBuilderFactory#setProfileActivationFilePathInterpolator(ProfileActivationFilePathInterpolator)
+     */
+    @Deprecated
     public DefaultModelBuilder setProfileActivationFilePathInterpolator(
             ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator )
     {
-        this.profileActivationFilePathInterpolator = profileActivationFilePathInterpolator;
-        return this;
+        return new DefaultModelBuilder( modelProcessor, modelValidator, modelNormalizer, modelInterpolator,
+                modelPathTranslator, modelUrlNormalizer, superPomProvider, inheritanceAssembler, profileSelector,
+                profileInjector, pluginManagementInjector, dependencyManagementInjector, dependencyManagementImporter,
+                lifecycleBindingsInjector, pluginConfigurationExpander, reportConfigurationExpander,
+                reportingConverter, profileActivationFilePathInterpolator );
     }
 
     @Override
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
index 027db20..6334f1b 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
@@ -19,6 +19,8 @@ package org.apache.maven.model.building;
  * under the License.
  */
 
+import java.util.Arrays;
+
 import org.apache.maven.model.Model;
 import org.apache.maven.model.composition.DefaultDependencyManagementImporter;
 import org.apache.maven.model.composition.DependencyManagementImporter;
@@ -70,19 +72,151 @@ import org.apache.maven.model.validation.ModelValidator;
  * A factory to create model builder instances when no dependency injection is available. <em>Note:</em> This class is
  * only meant as a utility for developers that want to employ the model builder outside of the Maven build system, Maven
  * plugins should always acquire model builder instances via dependency injection. Developers might want to subclass
- * this factory to provide custom implementations for some of the components used by the model builder.
+ * this factory to provide custom implementations for some of the components used by the model builder, or use the
+ * builder API to inject custom instances.
  *
  * @author Benjamin Bentmann
+ * @author Guillaume Nodet
  */
 public class DefaultModelBuilderFactory
 {
 
+    private ModelProcessor modelProcessor;
+    private ModelValidator modelValidator;
+    private ModelNormalizer modelNormalizer;
+    private ModelInterpolator modelInterpolator;
+    private ModelPathTranslator modelPathTranslator;
+    private ModelUrlNormalizer modelUrlNormalizer;
+    private SuperPomProvider superPomProvider;
+    private InheritanceAssembler inheritanceAssembler;
+    private ProfileSelector profileSelector;
+    private ProfileInjector profileInjector;
+    private PluginManagementInjector pluginManagementInjector;
+    private DependencyManagementInjector dependencyManagementInjector;
+    private DependencyManagementImporter dependencyManagementImporter;
+    private LifecycleBindingsInjector lifecycleBindingsInjector;
+    private PluginConfigurationExpander pluginConfigurationExpander;
+    private ReportConfigurationExpander reportConfigurationExpander;
+    private ReportingConverter reportingConverter;
+    private ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator;
+
+    public DefaultModelBuilderFactory setModelProcessor( ModelProcessor modelProcessor )
+    {
+        this.modelProcessor = modelProcessor;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setModelValidator( ModelValidator modelValidator )
+    {
+        this.modelValidator = modelValidator;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setModelNormalizer( ModelNormalizer modelNormalizer )
+    {
+        this.modelNormalizer = modelNormalizer;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setModelInterpolator( ModelInterpolator modelInterpolator )
+    {
+        this.modelInterpolator = modelInterpolator;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setModelPathTranslator( ModelPathTranslator modelPathTranslator )
+    {
+        this.modelPathTranslator = modelPathTranslator;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setModelUrlNormalizer( ModelUrlNormalizer modelUrlNormalizer )
+    {
+        this.modelUrlNormalizer = modelUrlNormalizer;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setSuperPomProvider( SuperPomProvider superPomProvider )
+    {
+        this.superPomProvider = superPomProvider;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setInheritanceAssembler( InheritanceAssembler inheritanceAssembler )
+    {
+        this.inheritanceAssembler = inheritanceAssembler;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setProfileSelector( ProfileSelector profileSelector )
+    {
+        this.profileSelector = profileSelector;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setProfileInjector( ProfileInjector profileInjector )
+    {
+        this.profileInjector = profileInjector;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setPluginManagementInjector( PluginManagementInjector pluginManagementInjector )
+    {
+        this.pluginManagementInjector = pluginManagementInjector;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setDependencyManagementInjector(
+            DependencyManagementInjector dependencyManagementInjector )
+    {
+        this.dependencyManagementInjector = dependencyManagementInjector;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setDependencyManagementImporter(
+            DependencyManagementImporter dependencyManagementImporter )
+    {
+        this.dependencyManagementImporter = dependencyManagementImporter;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setLifecycleBindingsInjector(
+            LifecycleBindingsInjector lifecycleBindingsInjector )
+    {
+        this.lifecycleBindingsInjector = lifecycleBindingsInjector;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setPluginConfigurationExpander(
+            PluginConfigurationExpander pluginConfigurationExpander )
+    {
+        this.pluginConfigurationExpander = pluginConfigurationExpander;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setReportConfigurationExpander(
+            ReportConfigurationExpander reportConfigurationExpander )
+    {
+        this.reportConfigurationExpander = reportConfigurationExpander;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setReportingConverter( ReportingConverter reportingConverter )
+    {
+        this.reportingConverter = reportingConverter;
+        return this;
+    }
+
+    public DefaultModelBuilderFactory setProfileActivationFilePathInterpolator(
+            ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator )
+    {
+        this.profileActivationFilePathInterpolator = profileActivationFilePathInterpolator;
+        return this;
+    }
+
     protected ModelProcessor newModelProcessor()
     {
-        DefaultModelProcessor processor = new DefaultModelProcessor();
-        processor.setModelLocator( newModelLocator() );
-        processor.setModelReader( newModelReader() );
-        return processor;
+        return new DefaultModelProcessor( newModelLocator(), newModelReader() );
     }
 
     protected ModelLocator newModelLocator()
@@ -92,33 +226,23 @@ public class DefaultModelBuilderFactory
 
     protected ModelReader newModelReader()
     {
-        DefaultModelReader reader = new DefaultModelReader();
-        reader.setTransformer( newModelSourceTransformer() );
-        return reader;
+        return new DefaultModelReader( newModelSourceTransformer() );
     }
 
     protected ProfileSelector newProfileSelector()
     {
-        DefaultProfileSelector profileSelector = new DefaultProfileSelector();
-
-        for ( ProfileActivator activator : newProfileActivators() )
-        {
-            profileSelector.addProfileActivator( activator );
-        }
-
-        return profileSelector;
+        return new DefaultProfileSelector( Arrays.asList( newProfileActivators() ) );
     }
 
     protected ProfileActivator[] newProfileActivators()
     {
         return new ProfileActivator[] { new JdkVersionProfileActivator(), new OperatingSystemProfileActivator(),
-            new PropertyProfileActivator(), new FileProfileActivator()
-                        .setProfileActivationFilePathInterpolator( newProfileActivationFilePathInterpolator() ) };
+            new PropertyProfileActivator(), new FileProfileActivator( newProfileActivationFilePathInterpolator() ) };
     }
 
     protected ProfileActivationFilePathInterpolator newProfileActivationFilePathInterpolator()
     {
-        return new ProfileActivationFilePathInterpolator().setPathTranslator( newPathTranslator() );
+        return new ProfileActivationFilePathInterpolator( newPathTranslator() );
     }
 
     protected UrlNormalizer newUrlNormalizer()
@@ -135,7 +259,7 @@ public class DefaultModelBuilderFactory
     {
         UrlNormalizer normalizer = newUrlNormalizer();
         PathTranslator pathTranslator = newPathTranslator();
-        return new StringVisitorModelInterpolator().setPathTranslator( pathTranslator ).setUrlNormalizer( normalizer );
+        return new StringVisitorModelInterpolator( pathTranslator, normalizer );
     }
 
     protected ModelValidator newModelValidator()
@@ -150,12 +274,12 @@ public class DefaultModelBuilderFactory
 
     protected ModelPathTranslator newModelPathTranslator()
     {
-        return new DefaultModelPathTranslator().setPathTranslator( newPathTranslator() );
+        return new DefaultModelPathTranslator( newPathTranslator() );
     }
 
     protected ModelUrlNormalizer newModelUrlNormalizer()
     {
-        return new DefaultModelUrlNormalizer().setUrlNormalizer( newUrlNormalizer() );
+        return new DefaultModelUrlNormalizer( newUrlNormalizer() );
     }
 
     protected InheritanceAssembler newInheritanceAssembler()
@@ -170,7 +294,7 @@ public class DefaultModelBuilderFactory
 
     protected SuperPomProvider newSuperPomProvider()
     {
-        return new DefaultSuperPomProvider().setModelProcessor( newModelProcessor() );
+        return new DefaultSuperPomProvider( newModelProcessor() );
     }
 
     protected DependencyManagementImporter newDependencyManagementImporter()
@@ -220,28 +344,27 @@ public class DefaultModelBuilderFactory
      */
     public DefaultModelBuilder newInstance()
     {
-        DefaultModelBuilder modelBuilder = new DefaultModelBuilder();
-
-        modelBuilder.setModelProcessor( newModelProcessor() );
-        modelBuilder.setModelValidator( newModelValidator() );
-        modelBuilder.setModelNormalizer( newModelNormalizer() );
-        modelBuilder.setModelPathTranslator( newModelPathTranslator() );
-        modelBuilder.setModelUrlNormalizer( newModelUrlNormalizer() );
-        modelBuilder.setModelInterpolator( newModelInterpolator() );
-        modelBuilder.setInheritanceAssembler( newInheritanceAssembler() );
-        modelBuilder.setProfileInjector( newProfileInjector() );
-        modelBuilder.setProfileSelector( newProfileSelector() );
-        modelBuilder.setSuperPomProvider( newSuperPomProvider() );
-        modelBuilder.setDependencyManagementImporter( newDependencyManagementImporter() );
-        modelBuilder.setDependencyManagementInjector( newDependencyManagementInjector() );
-        modelBuilder.setLifecycleBindingsInjector( newLifecycleBindingsInjector() );
-        modelBuilder.setPluginManagementInjector( newPluginManagementInjector() );
-        modelBuilder.setPluginConfigurationExpander( newPluginConfigurationExpander() );
-        modelBuilder.setReportConfigurationExpander( newReportConfigurationExpander() );
-        modelBuilder.setReportingConverter( newReportingConverter() );
-        modelBuilder.setProfileActivationFilePathInterpolator( newProfileActivationFilePathInterpolator() );
-
-        return modelBuilder;
+        return new DefaultModelBuilder(
+                modelProcessor != null ? modelProcessor : newModelProcessor(),
+                modelValidator != null ? modelValidator : newModelValidator(),
+                modelNormalizer != null ? modelNormalizer : newModelNormalizer(),
+                modelInterpolator != null ? modelInterpolator : newModelInterpolator(),
+                modelPathTranslator != null ? modelPathTranslator : newModelPathTranslator(),
+                modelUrlNormalizer != null ? modelUrlNormalizer : newModelUrlNormalizer(),
+                superPomProvider != null ? superPomProvider : newSuperPomProvider(),
+                inheritanceAssembler != null ? inheritanceAssembler : newInheritanceAssembler(),
+                profileSelector != null ? profileSelector : newProfileSelector(),
+                profileInjector != null ? profileInjector : newProfileInjector(),
+                pluginManagementInjector != null ? pluginManagementInjector : newPluginManagementInjector(),
+                dependencyManagementInjector != null ? dependencyManagementInjector : newDependencyManagementInjector(),
+                dependencyManagementImporter != null ? dependencyManagementImporter : newDependencyManagementImporter(),
+                lifecycleBindingsInjector != null ? lifecycleBindingsInjector : newLifecycleBindingsInjector(),
+                pluginConfigurationExpander != null ? pluginConfigurationExpander : newPluginConfigurationExpander(),
+                reportConfigurationExpander != null ? reportConfigurationExpander : newReportConfigurationExpander(),
+                reportingConverter != null ? reportingConverter : newReportingConverter(),
+                profileActivationFilePathInterpolator != null
+                        ? profileActivationFilePathInterpolator : newProfileActivationFilePathInterpolator()
+        );
     }
 
     private static class StubLifecycleBindingsInjector
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
index 76370ac..cc2daf8 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
@@ -66,22 +66,14 @@ public class DefaultModelProcessor
     implements ModelProcessor
 {
 
-    @Inject
-    private ModelLocator locator;
+    private final ModelLocator locator;
+    private final ModelReader reader;
 
     @Inject
-    private ModelReader reader;
-
-    public DefaultModelProcessor setModelLocator( ModelLocator locator )
+    public DefaultModelProcessor( ModelLocator locator, ModelReader reader )
     {
         this.locator = locator;
-        return this;
-    }
-
-    public DefaultModelProcessor setModelReader( ModelReader reader )
-    {
         this.reader = reader;
-        return this;
     }
 
     @Override
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
index 388671d..588b913 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
@@ -82,26 +82,14 @@ public abstract class AbstractStringBasedModelInterpolator
         TRANSLATED_PATH_EXPRESSIONS = translatedPrefixes;
     }
 
-    @Inject
-    private PathTranslator pathTranslator;
+    private final PathTranslator pathTranslator;
+    private final UrlNormalizer urlNormalizer;
 
     @Inject
-    private UrlNormalizer urlNormalizer;
-
-    public AbstractStringBasedModelInterpolator()
-    {
-    }
-
-    public AbstractStringBasedModelInterpolator setPathTranslator( PathTranslator pathTranslator )
+    public AbstractStringBasedModelInterpolator( PathTranslator pathTranslator, UrlNormalizer urlNormalizer )
     {
         this.pathTranslator = pathTranslator;
-        return this;
-    }
-
-    public AbstractStringBasedModelInterpolator setUrlNormalizer( UrlNormalizer urlNormalizer )
-    {
         this.urlNormalizer = urlNormalizer;
-        return this;
     }
 
     protected List<ValueSource> createValueSources( final Model model, final File projectDir,
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
index 93e53b7..d775fe3 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
@@ -26,6 +26,8 @@ import org.apache.maven.model.building.ModelProblem.Severity;
 import org.apache.maven.model.building.ModelProblem.Version;
 import org.apache.maven.model.building.ModelProblemCollector;
 import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.path.PathTranslator;
+import org.apache.maven.model.path.UrlNormalizer;
 import org.codehaus.plexus.interpolation.InterpolationException;
 import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
 import org.codehaus.plexus.interpolation.RecursionInterceptor;
@@ -46,6 +48,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Inject;
+
 /**
  * StringSearchModelInterpolator
  * @deprecated replaced by StringVisitorModelInterpolator (MNG-6697)
@@ -63,6 +67,17 @@ public class StringSearchModelInterpolator
         String interpolate( String value );
     }
 
+    @Inject
+    public StringSearchModelInterpolator( PathTranslator pathTranslator, UrlNormalizer urlNormalizer )
+    {
+        super( pathTranslator, urlNormalizer );
+    }
+
+    StringSearchModelInterpolator()
+    {
+        super( null, null );
+    }
+
     @Override
     public Model interpolateModel( Model model, File projectDir, ModelBuildingRequest config,
                                    ModelProblemCollector problems )
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolator.java
index a12eb10..e639a50 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolator.java
@@ -26,6 +26,7 @@ import java.util.ListIterator;
 import java.util.Map;
 import java.util.Properties;
 
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -71,6 +72,8 @@ import org.apache.maven.model.building.ModelProblem.Severity;
 import org.apache.maven.model.building.ModelProblem.Version;
 import org.apache.maven.model.building.ModelProblemCollector;
 import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.path.PathTranslator;
+import org.apache.maven.model.path.UrlNormalizer;
 import org.codehaus.plexus.interpolation.InterpolationException;
 import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
 import org.codehaus.plexus.interpolation.RecursionInterceptor;
@@ -88,6 +91,11 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
 public class StringVisitorModelInterpolator
     extends AbstractStringBasedModelInterpolator
 {
+    @Inject
+    public StringVisitorModelInterpolator( PathTranslator pathTranslator, UrlNormalizer urlNormalizer )
+    {
+        super( pathTranslator, urlNormalizer );
+    }
 
     interface InnerInterpolator
     {
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java b/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
index 1d8b264..eeafabe 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
@@ -52,10 +52,10 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 public class DefaultModelReader
     implements ModelReader
 {
-    @Inject
-    private ModelSourceTransformer transformer;
+    private final ModelSourceTransformer transformer;
 
-    public void setTransformer( ModelSourceTransformer transformer )
+    @Inject
+    public DefaultModelReader( ModelSourceTransformer transformer )
     {
         this.transformer = transformer;
     }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java b/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java
index 26fe10c..801499f 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java
@@ -44,13 +44,12 @@ public class DefaultModelPathTranslator
     implements ModelPathTranslator
 {
 
-    @Inject
-    private PathTranslator pathTranslator;
+    private final PathTranslator pathTranslator;
 
-    public DefaultModelPathTranslator setPathTranslator( PathTranslator pathTranslator )
+    @Inject
+    public DefaultModelPathTranslator( PathTranslator pathTranslator )
     {
         this.pathTranslator = pathTranslator;
-        return this;
     }
 
     @Override
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java b/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java
index 22ace6f..92d7bbd 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java
@@ -41,13 +41,12 @@ public class DefaultModelUrlNormalizer
     implements ModelUrlNormalizer
 {
 
-    @Inject
-    private UrlNormalizer urlNormalizer;
+    private final UrlNormalizer urlNormalizer;
 
-    public DefaultModelUrlNormalizer setUrlNormalizer( UrlNormalizer urlNormalizer )
+    @Inject
+    public DefaultModelUrlNormalizer( UrlNormalizer urlNormalizer )
     {
         this.urlNormalizer = urlNormalizer;
-        return this;
     }
 
     @Override
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/path/ProfileActivationFilePathInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/path/ProfileActivationFilePathInterpolator.java
index c2f815b..41257ac 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/path/ProfileActivationFilePathInterpolator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/path/ProfileActivationFilePathInterpolator.java
@@ -41,13 +41,12 @@ import java.io.File;
 public class ProfileActivationFilePathInterpolator
 {
 
-    @Inject
-    private PathTranslator pathTranslator;
+    private final PathTranslator pathTranslator;
 
-    public ProfileActivationFilePathInterpolator setPathTranslator( PathTranslator pathTranslator )
+    @Inject
+    public ProfileActivationFilePathInterpolator( PathTranslator pathTranslator )
     {
         this.pathTranslator = pathTranslator;
-        return this;
     }
 
     /**
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java
index 178789f..75dc10f 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java
@@ -47,8 +47,13 @@ public class DefaultProfileSelector
     implements ProfileSelector
 {
 
+    private final List<ProfileActivator> activators;
+
     @Inject
-    private List<ProfileActivator> activators = new ArrayList<>();
+    public DefaultProfileSelector( List<ProfileActivator> activators )
+    {
+        this.activators = activators;
+    }
 
     public DefaultProfileSelector addProfileActivator( ProfileActivator profileActivator )
     {
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java b/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
index 923ffd2..999e070 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java
@@ -55,14 +55,12 @@ public class FileProfileActivator
     implements ProfileActivator
 {
 
-    @Inject
-    private ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator;
+    private final ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator;
 
-    public FileProfileActivator setProfileActivationFilePathInterpolator(
-            ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator )
+    @Inject
+    public FileProfileActivator( ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator )
     {
         this.profileActivationFilePathInterpolator = profileActivationFilePathInterpolator;
-        return this;
     }
 
     @Override
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java b/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java
index 9d71623..31df92f 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java
@@ -43,18 +43,17 @@ public class DefaultSuperPomProvider
     implements SuperPomProvider
 {
 
+    private final ModelProcessor modelProcessor;
+
     /**
      * The cached super POM, lazily created.
      */
     private Model superModel;
 
     @Inject
-    private ModelProcessor modelProcessor;
-
-    public DefaultSuperPomProvider setModelProcessor( ModelProcessor modelProcessor )
+    public DefaultSuperPomProvider( ModelProcessor modelProcessor )
     {
         this.modelProcessor = modelProcessor;
-        return this;
     }
 
     @Override
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
index b499fc0..52400d8 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
@@ -61,8 +61,7 @@ public class DefaultInheritanceAssemblerTest
     public void setUp()
         throws Exception
     {
-        reader = new DefaultModelReader();
-        reader.setTransformer( new AbstractModelSourceTransformer()
+        reader = new DefaultModelReader( new AbstractModelSourceTransformer()
         {
             @Override
             protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context,
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolatorTest.java
index 7c90b07..e4b11cc 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolatorTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolatorTest.java
@@ -23,6 +23,6 @@ public class StringVisitorModelInterpolatorTest extends AbstractModelInterpolato
 {
     protected ModelInterpolator createInterpolator()
     {
-        return new StringVisitorModelInterpolator();
+        return new StringVisitorModelInterpolator( null, null );
     }
 }
\ No newline at end of file
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java
index c665125..cbdb850 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java
@@ -39,25 +39,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 public abstract class AbstractProfileActivatorTest<T extends ProfileActivator>
 {
 
-    private Class<T> activatorClass;
-
     protected T activator;
 
-    public AbstractProfileActivatorTest( Class<T> activatorClass )
-    {
-        this.activatorClass = Objects.requireNonNull( activatorClass, "activatorClass cannot be null" );;
-    }
-
     @BeforeEach
-    public void setUp()
-        throws Exception
-    {
-        activator = activatorClass.getConstructor().newInstance();
-    }
+    abstract void setUp() throws Exception;
 
     @AfterEach
-    public void tearDown()
-        throws Exception
+    void tearDown() throws Exception
     {
         activator = null;
     }
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/FileProfileActivatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/FileProfileActivatorTest.java
index acca982..300fc13 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/FileProfileActivatorTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/FileProfileActivatorTest.java
@@ -48,17 +48,11 @@ public class FileProfileActivatorTest extends AbstractProfileActivatorTest<FileP
 
     private final DefaultProfileActivationContext context = new DefaultProfileActivationContext();
 
-    public FileProfileActivatorTest()
-    {
-        super( FileProfileActivator.class );
-    }
-
     @BeforeEach
-    public void setUp() throws Exception
+    @Override
+    void setUp() throws Exception
     {
-        super.setUp();
-        activator.setProfileActivationFilePathInterpolator(
-                new ProfileActivationFilePathInterpolator().setPathTranslator( new DefaultPathTranslator() ) );
+        activator = new FileProfileActivator( new ProfileActivationFilePathInterpolator( new DefaultPathTranslator() ) );
 
         context.setProjectDirectory( new File( tempDir.toString() ) );
 
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java
index 51bd93f..ce57bf0 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java
@@ -23,6 +23,7 @@ import java.util.Properties;
 
 import org.apache.maven.model.Activation;
 import org.apache.maven.model.Profile;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -34,12 +35,14 @@ public class JdkVersionProfileActivatorTest
     extends AbstractProfileActivatorTest<JdkVersionProfileActivator>
 {
 
-    public JdkVersionProfileActivatorTest()
+    @Override
+    @BeforeEach
+    void setUp() throws Exception
     {
-        super( JdkVersionProfileActivator.class );
+        activator = new JdkVersionProfileActivator();
     }
 
-    private Profile newProfile( String jdkVersion )
+    private Profile newProfile(String jdkVersion )
     {
         Activation a = new Activation();
         a.setJdk( jdkVersion );
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java
index 251ea7d..72a6775 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java
@@ -24,6 +24,7 @@ import java.util.Properties;
 import org.apache.maven.model.Activation;
 import org.apache.maven.model.ActivationProperty;
 import org.apache.maven.model.Profile;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -35,12 +36,14 @@ public class PropertyProfileActivatorTest
     extends AbstractProfileActivatorTest<PropertyProfileActivator>
 {
 
-    public PropertyProfileActivatorTest()
+    @BeforeEach
+    @Override
+    void setUp() throws Exception
     {
-        super( PropertyProfileActivator.class );
+        activator = new PropertyProfileActivator();
     }
 
-    private Profile newProfile( String key, String value )
+    private Profile newProfile(String key, String value )
     {
         ActivationProperty ap = new ActivationProperty();
         ap.setName( key );
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
index 24c8570..147f8b8 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
@@ -73,80 +73,35 @@ import org.slf4j.LoggerFactory;
  */
 @Named
 @Singleton
-public class DefaultArtifactDescriptorReader
-    implements ArtifactDescriptorReader
+public class DefaultArtifactDescriptorReader implements ArtifactDescriptorReader
 {
     private static final Logger LOGGER = LoggerFactory.getLogger( DefaultArtifactDescriptorReader.class );
 
-    private RemoteRepositoryManager remoteRepositoryManager;
-
-    private VersionResolver versionResolver;
-
-    private VersionRangeResolver versionRangeResolver;
-
-    private ArtifactResolver artifactResolver;
-
-    private RepositoryEventDispatcher repositoryEventDispatcher;
-
-    private ModelBuilder modelBuilder;
-
-    public DefaultArtifactDescriptorReader()
-    {
-        // enable no-arg constructor
-    }
+    private final RemoteRepositoryManager remoteRepositoryManager;
+    private final VersionResolver versionResolver;
+    private final VersionRangeResolver versionRangeResolver;
+    private final ArtifactResolver artifactResolver;
+    private final RepositoryEventDispatcher repositoryEventDispatcher;
+    private final ModelBuilder modelBuilder;
 
     @Inject
-    DefaultArtifactDescriptorReader( RemoteRepositoryManager remoteRepositoryManager, VersionResolver versionResolver,
-                                     VersionRangeResolver versionRangeResolver, ArtifactResolver artifactResolver,
-                                     ModelBuilder modelBuilder, RepositoryEventDispatcher repositoryEventDispatcher )
-    {
-        setRemoteRepositoryManager( remoteRepositoryManager );
-        setVersionResolver( versionResolver );
-        setVersionRangeResolver( versionRangeResolver );
-        setArtifactResolver( artifactResolver );
-        setModelBuilder( modelBuilder );
-        setRepositoryEventDispatcher( repositoryEventDispatcher );
-    }
-
-    public DefaultArtifactDescriptorReader setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager )
+    public DefaultArtifactDescriptorReader(
+            RemoteRepositoryManager remoteRepositoryManager,
+            VersionResolver versionResolver,
+            VersionRangeResolver versionRangeResolver,
+            ArtifactResolver artifactResolver,
+            ModelBuilder modelBuilder,
+            RepositoryEventDispatcher repositoryEventDispatcher )
     {
         this.remoteRepositoryManager = Objects.requireNonNull( remoteRepositoryManager,
-            "remoteRepositoryManager cannot be null" );
-        return this;
-    }
-
-    public DefaultArtifactDescriptorReader setVersionResolver( VersionResolver versionResolver )
-    {
+                "remoteRepositoryManager cannot be null" );
         this.versionResolver = Objects.requireNonNull( versionResolver, "versionResolver cannot be null" );
-        return this;
-    }
-
-    /** @since 3.2.2 */
-    public DefaultArtifactDescriptorReader setVersionRangeResolver( VersionRangeResolver versionRangeResolver )
-    {
         this.versionRangeResolver =
-            Objects.requireNonNull( versionRangeResolver, "versionRangeResolver cannot be null" );
-        return this;
-    }
-
-    public DefaultArtifactDescriptorReader setArtifactResolver( ArtifactResolver artifactResolver )
-    {
+                Objects.requireNonNull( versionRangeResolver, "versionRangeResolver cannot be null" );
         this.artifactResolver = Objects.requireNonNull( artifactResolver, "artifactResolver cannot be null" );
-        return this;
-    }
-
-    public DefaultArtifactDescriptorReader setRepositoryEventDispatcher(
-        RepositoryEventDispatcher repositoryEventDispatcher )
-    {
-        this.repositoryEventDispatcher = Objects.requireNonNull( repositoryEventDispatcher,
-            "repositoryEventDispatcher cannot be null" );
-        return this;
-    }
-
-    public DefaultArtifactDescriptorReader setModelBuilder( ModelBuilder modelBuilder )
-    {
         this.modelBuilder = Objects.requireNonNull( modelBuilder, "modelBuilder cannot be null" );
-        return this;
+        this.repositoryEventDispatcher = Objects.requireNonNull( repositoryEventDispatcher,
+                "repositoryEventDispatcher cannot be null" );
     }
 
     public ArtifactDescriptorResult readArtifactDescriptor( RepositorySystemSession session,
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
index f2b736e..379d05c 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
@@ -70,46 +70,19 @@ public class DefaultVersionRangeResolver
 
     private static final String MAVEN_METADATA_XML = "maven-metadata.xml";
 
-    private MetadataResolver metadataResolver;
-
-    private SyncContextFactory syncContextFactory;
-
-    private RepositoryEventDispatcher repositoryEventDispatcher;
-
-    public DefaultVersionRangeResolver()
-    {
-        // enable default constructor
-    }
+    private final MetadataResolver metadataResolver;
+    private final SyncContextFactory syncContextFactory;
+    private final RepositoryEventDispatcher repositoryEventDispatcher;
 
     @Inject
-    DefaultVersionRangeResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory,
-                                 RepositoryEventDispatcher repositoryEventDispatcher )
-    {
-        setMetadataResolver( metadataResolver );
-        setSyncContextFactory( syncContextFactory );
-        setRepositoryEventDispatcher( repositoryEventDispatcher );
-    }
-
-    public DefaultVersionRangeResolver setMetadataResolver( MetadataResolver metadataResolver )
+    public DefaultVersionRangeResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory,
+                                        RepositoryEventDispatcher repositoryEventDispatcher )
     {
         this.metadataResolver = Objects.requireNonNull( metadataResolver, "metadataResolver cannot be null" );
-        return this;
-    }
-
-    public DefaultVersionRangeResolver setSyncContextFactory( SyncContextFactory syncContextFactory )
-    {
         this.syncContextFactory = Objects.requireNonNull( syncContextFactory, "syncContextFactory cannot be null" );
-        return this;
-    }
-
-    public DefaultVersionRangeResolver setRepositoryEventDispatcher(
-        RepositoryEventDispatcher repositoryEventDispatcher )
-    {
         this.repositoryEventDispatcher = Objects.requireNonNull( repositoryEventDispatcher,
-            "repositoryEventDispatcher cannot be null" );
-        return this;
+                "repositoryEventDispatcher cannot be null" );
     }
-
     public VersionRangeResult resolveVersionRange( RepositorySystemSession session, VersionRangeRequest request )
         throws VersionRangeResolutionException
     {
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
index fefd60a..e70a8b9 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
@@ -81,43 +81,18 @@ public class DefaultVersionResolver
 
     private static final String SNAPSHOT = "SNAPSHOT";
 
-    private MetadataResolver metadataResolver;
-
-    private SyncContextFactory syncContextFactory;
-
-    private RepositoryEventDispatcher repositoryEventDispatcher;
-
-    public DefaultVersionResolver()
-    {
-        // enable no-arg constructor
-    }
+    private final MetadataResolver metadataResolver;
+    private final SyncContextFactory syncContextFactory;
+    private final RepositoryEventDispatcher repositoryEventDispatcher;
 
     @Inject
-    DefaultVersionResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory,
+    public DefaultVersionResolver( MetadataResolver metadataResolver, SyncContextFactory syncContextFactory,
                             RepositoryEventDispatcher repositoryEventDispatcher )
     {
-        setMetadataResolver( metadataResolver );
-        setSyncContextFactory( syncContextFactory );
-        setRepositoryEventDispatcher( repositoryEventDispatcher );
-    }
-
-    public DefaultVersionResolver setMetadataResolver( MetadataResolver metadataResolver )
-    {
         this.metadataResolver = Objects.requireNonNull( metadataResolver, "metadataResolver cannot be null" );
-        return this;
-    }
-
-    public DefaultVersionResolver setSyncContextFactory( SyncContextFactory syncContextFactory )
-    {
         this.syncContextFactory = Objects.requireNonNull( syncContextFactory, "syncContextFactory cannot be null" );
-        return this;
-    }
-
-    public DefaultVersionResolver setRepositoryEventDispatcher( RepositoryEventDispatcher repositoryEventDispatcher )
-    {
         this.repositoryEventDispatcher = Objects.requireNonNull( repositoryEventDispatcher,
-            "repositoryEventDispatcher cannot be null" );
-        return this;
+                "repositoryEventDispatcher cannot be null" );
     }
 
     @SuppressWarnings( "checkstyle:methodlength" )
diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
index a68a42f..733fa59 100644
--- a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
+++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
@@ -19,6 +19,8 @@ package org.apache.maven.repository.internal;
  * under the License.
  */
 
+import java.lang.reflect.Field;
+
 import org.eclipse.aether.RepositoryEvent;
 import org.eclipse.aether.RepositoryEvent.EventType;
 import org.eclipse.aether.artifact.DefaultArtifact;
@@ -48,7 +50,9 @@ public class DefaultArtifactDescriptorReaderTest
 
         ArgumentCaptor<RepositoryEvent> event = ArgumentCaptor.forClass( RepositoryEvent.class );
 
-        reader.setRepositoryEventDispatcher( eventDispatcher );
+        Field field = DefaultArtifactDescriptorReader.class.getDeclaredField( "repositoryEventDispatcher" );
+        field.setAccessible( true );
+        field.set( reader, eventDispatcher );
 
         ArtifactDescriptorRequest request = new ArtifactDescriptorRequest();