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:31 UTC

[maven] branch master updated (edbf133 -> 35e5a4d)

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

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


    from edbf133  [MNG-7277] - Remove useless Test - testNonNumericVersionRepresentationReturnsANumberFormatException
     new e30c1bf  Add a unit test for MavenRepositorySystemUtils#newSession
     new 1ab49b3  Remove deprecated usage of ServiceLocator/Service
     new 35e5a4d  [MNG-5577] Use JSR 330 constructor injection

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../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  |  98 ++----
 .../internal/DefaultVersionRangeResolver.java      |  50 +--
 .../internal/DefaultVersionResolver.java           |  46 +--
 .../internal/MavenRepositorySystemUtils.java       |  24 --
 .../DefaultArtifactDescriptorReaderTest.java       |   6 +-
 .../internal/MavenRepositorySystemUtilsTest.java   |  19 +-
 73 files changed, 1104 insertions(+), 823 deletions(-)

[maven] 02/03: Remove deprecated usage of ServiceLocator/Service

Posted by gn...@apache.org.
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 1ab49b349f40867350e3e09f27074628d5b34af9
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Sep 21 16:22:34 2021 +0200

    Remove deprecated usage of ServiceLocator/Service
---
 .../internal/DefaultArtifactDescriptorReader.java  | 19 +----------------
 .../internal/DefaultVersionRangeResolver.java      | 11 +---------
 .../internal/DefaultVersionResolver.java           | 11 +---------
 .../internal/MavenRepositorySystemUtils.java       | 24 ----------------------
 .../internal/MavenRepositorySystemUtilsTest.java   | 19 -----------------
 5 files changed, 3 insertions(+), 81 deletions(-)

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 af88442..24c8570 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
@@ -33,7 +33,6 @@ import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Relocation;
 import org.apache.maven.model.building.ArtifactModelSource;
-import org.apache.maven.model.building.DefaultModelBuilderFactory;
 import org.apache.maven.model.building.DefaultModelBuildingRequest;
 import org.apache.maven.model.building.ModelBuilder;
 import org.apache.maven.model.building.ModelBuildingException;
@@ -65,8 +64,6 @@ import org.eclipse.aether.resolution.ArtifactResult;
 import org.eclipse.aether.resolution.VersionRequest;
 import org.eclipse.aether.resolution.VersionResolutionException;
 import org.eclipse.aether.resolution.VersionResult;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
 import org.eclipse.aether.transfer.ArtifactNotFoundException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -77,7 +74,7 @@ import org.slf4j.LoggerFactory;
 @Named
 @Singleton
 public class DefaultArtifactDescriptorReader
-    implements ArtifactDescriptorReader, Service
+    implements ArtifactDescriptorReader
 {
     private static final Logger LOGGER = LoggerFactory.getLogger( DefaultArtifactDescriptorReader.class );
 
@@ -111,20 +108,6 @@ public class DefaultArtifactDescriptorReader
         setRepositoryEventDispatcher( repositoryEventDispatcher );
     }
 
-    public void initService( ServiceLocator locator )
-    {
-        setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) );
-        setVersionResolver( locator.getService( VersionResolver.class ) );
-        setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) );
-        setArtifactResolver( locator.getService( ArtifactResolver.class ) );
-        modelBuilder = locator.getService( ModelBuilder.class );
-        if ( modelBuilder == null )
-        {
-            setModelBuilder( new DefaultModelBuilderFactory().newInstance() );
-        }
-        setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
-    }
-
     public DefaultArtifactDescriptorReader setRemoteRepositoryManager( RemoteRepositoryManager remoteRepositoryManager )
     {
         this.remoteRepositoryManager = Objects.requireNonNull( remoteRepositoryManager,
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 e217842..f2b736e 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
@@ -39,8 +39,6 @@ import org.eclipse.aether.resolution.MetadataResult;
 import org.eclipse.aether.resolution.VersionRangeRequest;
 import org.eclipse.aether.resolution.VersionRangeResolutionException;
 import org.eclipse.aether.resolution.VersionRangeResult;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
 import org.eclipse.aether.spi.synccontext.SyncContextFactory;
 import org.eclipse.aether.util.version.GenericVersionScheme;
 import org.eclipse.aether.version.InvalidVersionSpecificationException;
@@ -67,7 +65,7 @@ import java.util.Objects;
 @Named
 @Singleton
 public class DefaultVersionRangeResolver
-    implements VersionRangeResolver, Service
+    implements VersionRangeResolver
 {
 
     private static final String MAVEN_METADATA_XML = "maven-metadata.xml";
@@ -92,13 +90,6 @@ public class DefaultVersionRangeResolver
         setRepositoryEventDispatcher( repositoryEventDispatcher );
     }
 
-    public void initService( ServiceLocator locator )
-    {
-        setMetadataResolver( locator.getService( MetadataResolver.class ) );
-        setSyncContextFactory( locator.getService( SyncContextFactory.class ) );
-        setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
-    }
-
     public DefaultVersionRangeResolver setMetadataResolver( MetadataResolver metadataResolver )
     {
         this.metadataResolver = Objects.requireNonNull( metadataResolver, "metadataResolver cannot be null" );
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 48c9a06..fefd60a 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
@@ -46,8 +46,6 @@ import org.eclipse.aether.resolution.MetadataResult;
 import org.eclipse.aether.resolution.VersionRequest;
 import org.eclipse.aether.resolution.VersionResolutionException;
 import org.eclipse.aether.resolution.VersionResult;
-import org.eclipse.aether.spi.locator.Service;
-import org.eclipse.aether.spi.locator.ServiceLocator;
 import org.eclipse.aether.spi.synccontext.SyncContextFactory;
 import org.eclipse.aether.util.ConfigUtils;
 
@@ -72,7 +70,7 @@ import java.util.Objects;
 @Named
 @Singleton
 public class DefaultVersionResolver
-    implements VersionResolver, Service
+    implements VersionResolver
 {
 
     private static final String MAVEN_METADATA_XML = "maven-metadata.xml";
@@ -103,13 +101,6 @@ public class DefaultVersionResolver
         setRepositoryEventDispatcher( repositoryEventDispatcher );
     }
 
-    public void initService( ServiceLocator locator )
-    {
-        setMetadataResolver( locator.getService( MetadataResolver.class ) );
-        setSyncContextFactory( locator.getService( SyncContextFactory.class ) );
-        setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
-    }
-
     public DefaultVersionResolver setMetadataResolver( MetadataResolver metadataResolver )
     {
         this.metadataResolver = Objects.requireNonNull( metadataResolver, "metadataResolver cannot be null" );
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
index b073e2d..fd420de 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
@@ -27,11 +27,6 @@ import org.eclipse.aether.collection.DependencyGraphTransformer;
 import org.eclipse.aether.collection.DependencyManager;
 import org.eclipse.aether.collection.DependencySelector;
 import org.eclipse.aether.collection.DependencyTraverser;
-import org.eclipse.aether.impl.ArtifactDescriptorReader;
-import org.eclipse.aether.impl.DefaultServiceLocator;
-import org.eclipse.aether.impl.MetadataGeneratorFactory;
-import org.eclipse.aether.impl.VersionRangeResolver;
-import org.eclipse.aether.impl.VersionResolver;
 import org.eclipse.aether.util.artifact.DefaultArtifactTypeRegistry;
 import org.eclipse.aether.util.graph.manager.ClassicDependencyManager;
 import org.eclipse.aether.util.graph.selector.AndDependencySelector;
@@ -64,25 +59,6 @@ public final class MavenRepositorySystemUtils
     }
 
     /**
-     * Creates a new service locator that already knows about all service implementations included in this library. To
-     * acquire a complete repository system, clients need to add some repository connectors for remote transfers.
-     *
-     * @return The new service locator, never {@code null}.
-     * @deprecated This method is deprecated along with {@link DefaultServiceLocator} (since Maven Resolver 1.7.0).
-     */
-    @Deprecated
-    public static DefaultServiceLocator newServiceLocator()
-    {
-        DefaultServiceLocator locator = new DefaultServiceLocator();
-        locator.addService( ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class );
-        locator.addService( VersionResolver.class, DefaultVersionResolver.class );
-        locator.addService( VersionRangeResolver.class, DefaultVersionRangeResolver.class );
-        locator.addService( MetadataGeneratorFactory.class, SnapshotMetadataGeneratorFactory.class );
-        locator.addService( MetadataGeneratorFactory.class, VersionsMetadataGeneratorFactory.class );
-        return locator;
-    }
-
-    /**
      * Creates a new Maven-like repository system session by initializing the session with values typical for
      * Maven-based resolution. In more detail, this method configures settings relevant for the processing of dependency
      * graphs, most other settings remain at their generic default value. Use the various setters to further configure
diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
index c2eee32..d06269f 100644
--- a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
+++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
@@ -19,13 +19,9 @@ package org.apache.maven.repository.internal;
  * under the License.
  */
 
-import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.impl.MetadataGeneratorFactory;
-import org.eclipse.aether.spi.locator.ServiceLocator;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class MavenRepositorySystemUtilsTest
@@ -38,19 +34,4 @@ public class MavenRepositorySystemUtilsTest
         assertNotNull( session );
     }
 
-    @Test
-    public void testGetRepositorySystem()
-    {
-        ServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
-        RepositorySystem repoSys = locator.getService( RepositorySystem.class );
-        assertNotNull( repoSys );
-    }
-
-    @Test
-    public void testGetMetadataGeneratorFactories()
-    {
-        ServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
-        assertEquals( 2, locator.getServices( MetadataGeneratorFactory.class ).size() );
-    }
-
 }

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

Posted by gn...@apache.org.
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();
 

[maven] 01/03: Add a unit test for MavenRepositorySystemUtils#newSession

Posted by gn...@apache.org.
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 e30c1bf9fc52f98c3d4d524eea767ad8e5febaf4
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Sep 21 16:22:01 2021 +0200

    Add a unit test for MavenRepositorySystemUtils#newSession
---
 .../maven/repository/internal/MavenRepositorySystemUtilsTest.java | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
index e54ceb1..c2eee32 100644
--- a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
+++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
@@ -20,6 +20,7 @@ package org.apache.maven.repository.internal;
  */
 
 import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.impl.MetadataGeneratorFactory;
 import org.eclipse.aether.spi.locator.ServiceLocator;
 import org.junit.jupiter.api.Test;
@@ -31,6 +32,13 @@ public class MavenRepositorySystemUtilsTest
 {
 
     @Test
+    public void testNewSession()
+    {
+        RepositorySystemSession session = MavenRepositorySystemUtils.newSession();
+        assertNotNull( session );
+    }
+
+    @Test
     public void testGetRepositorySystem()
     {
         ServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();