You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2020/04/02 20:08:51 UTC

[maven] branch master updated (2628d71 -> 9567da2)

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

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


    from 2628d71  [MNG-6882] - Change the URL's in tests etc. from http to https
     add b962ff3  [MNG-5577] Simplify tests to reduce use of wiring.
     add d420774  [MNG-5577] Don't use LegacyRepositoryLayout in tests.
     new 9567da2  [MNG-5577] Convert maven-core to JSR 330

The 1 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:
 .../factory/DefaultArtifactFactoryTest.java        | 10 +++
 .../transform/TransformationManagerTest.java       | 10 +++
 .../project/AbstractMavenProjectTestCase.java      |  2 +-
 .../apache/maven/project/ProjectClasspathTest.java | 13 +++-
 .../apache/maven/project/TestProjectBuilder.java   | 28 -------
 .../maven/repository/LegacyRepositoryLayout.java   | 89 ----------------------
 .../repository/legacy/DefaultWagonManagerTest.java | 10 +++
 .../resolver/DefaultArtifactCollectorTest.java     | 10 +++
 .../conflict/AbstractConflictResolverTest.java     | 10 +++
 .../DefaultGraphConflictResolutionPolicyTest.java  |  7 +-
 maven-core/pom.xml                                 |  4 -
 .../main/java/org/apache/maven/DefaultMaven.java   | 28 ++++---
 .../maven/DefaultProjectDependenciesResolver.java  | 13 ++--
 .../artifact/factory/DefaultArtifactFactory.java   | 11 ++-
 .../artifact/handler/DefaultArtifactHandler.java   |  6 +-
 .../manager/DefaultArtifactHandlerManager.java     | 11 ++-
 .../repository/layout/DefaultRepositoryLayout.java |  7 +-
 .../metadata/io/DefaultMetadataReader.java         |  7 +-
 .../resolver/DefaultResolutionErrorHandler.java    |  6 +-
 .../apache/maven/bridge/MavenRepositorySystem.java | 23 ++++--
 .../internal/DefaultBeanConfigurator.java          |  7 +-
 .../eventspy/internal/EventSpyDispatcher.java      | 13 ++--
 .../maven/exception/DefaultExceptionHandler.java   |  7 +-
 .../DefaultMavenExecutionRequestPopulator.java     |  2 +
 .../apache/maven/graph/DefaultGraphBuilder.java    | 13 ++--
 .../maven/lifecycle/DefaultLifecycleExecutor.java  | 33 ++++----
 .../apache/maven/lifecycle/DefaultLifecycles.java  | 13 ++--
 .../lifecycle/internal/BuildListCalculator.java    | 15 ++--
 .../internal/DefaultExecutionEventCatapult.java    |  7 +-
 .../DefaultLifecycleExecutionPlanCalculator.java   | 26 ++++---
 .../internal/DefaultLifecycleMappingDelegate.java  | 18 +++--
 .../internal/DefaultLifecyclePluginAnalyzer.java   | 16 ++--
 .../DefaultLifecycleTaskSegmentCalculator.java     | 21 ++---
 .../internal/DefaultMojoExecutionConfigurator.java |  7 +-
 .../lifecycle/internal/LifecycleDebugLogger.java   | 23 +++---
 .../lifecycle/internal/LifecycleModuleBuilder.java | 23 +++---
 .../internal/LifecyclePluginResolver.java          | 17 ++---
 .../maven/lifecycle/internal/LifecycleStarter.java | 25 +++---
 .../lifecycle/internal/MojoDescriptorCreator.java  | 27 ++++---
 .../maven/lifecycle/internal/MojoExecutor.java     | 35 +++++----
 .../lifecycle/internal/builder/BuilderCommon.java  | 21 ++---
 .../multithreaded/MultiThreadedBuilder.java        | 13 ++--
 .../singlethreaded/SingleThreadedBuilder.java      | 18 +++--
 .../plugin/DefaultLifecycleBindingsInjector.java   | 11 ++-
 .../maven/plugin/DefaultBuildPluginManager.java    | 21 +++--
 .../maven/plugin/DefaultExtensionRealmCache.java   |  7 +-
 .../maven/plugin/DefaultPluginArtifactsCache.java  |  7 +-
 .../maven/plugin/DefaultPluginDescriptorCache.java |  7 +-
 .../maven/plugin/DefaultPluginRealmCache.java      |  7 +-
 .../plugin/internal/DefaultLegacySupport.java      |  8 +-
 .../plugin/internal/DefaultMavenPluginManager.java | 31 ++++----
 .../DefaultPluginDependenciesResolver.java         | 13 ++--
 .../plugin/internal/DefaultPluginManager.java      | 23 +++---
 .../internal/DefaultPluginPrefixResolver.java      | 19 +++--
 .../internal/DefaultPluginVersionResolver.java     | 19 +++--
 .../maven/project/DefaultMavenProjectHelper.java   | 18 +++--
 .../maven/project/DefaultProjectBuilder.java       | 25 +++---
 .../project/DefaultProjectBuildingHelper.java      | 21 ++---
 .../DefaultProjectDependenciesResolver.java        | 15 ++--
 .../maven/project/DefaultProjectRealmCache.java    |  7 +-
 .../artifact/DefaultMavenMetadataCache.java        |  7 +-
 .../project/artifact/DefaultMetadataSource.java    |  7 +-
 .../artifact/DefaultProjectArtifactsCache.java     |  7 +-
 .../project/artifact/MavenMetadataSource.java      | 23 +++---
 .../rtinfo/internal/DefaultRuntimeInformation.java | 11 ++-
 .../settings/DefaultMavenSettingsBuilder.java      | 11 ++-
 .../maven/toolchain/DefaultToolchainManager.java   | 13 ++--
 .../toolchain/DefaultToolchainManagerPrivate.java  |  7 +-
 .../maven/toolchain/DefaultToolchainsBuilder.java  | 11 ++-
 .../maven/toolchain/java/JavaToolchainFactory.java | 11 ++-
 .../configuration/DefaultBeanConfiguratorTest.java |  8 +-
 .../maven/lifecycle/DefaultLifecyclesTest.java     | 10 +++
 .../apache/maven/project/TestMetadataSource.java   | 10 ++-
 .../artifact/DefaultMavenMetadataCacheTest.java    |  2 +-
 .../artifact/DefaultProjectArtifactsCacheTest.java |  7 +-
 .../maven/repository/LegacyRepositoryLayout.java   | 89 ----------------------
 .../repository/TestRepositoryConnectorFactory.java |  7 +-
 .../maven/repository/TestRepositorySystem.java     | 22 ++++--
 .../internal/DefaultRuntimeInformationTest.java    | 11 +++
 .../java/org/apache/maven/cli/MavenCliTest.java    | 19 ++++-
 80 files changed, 669 insertions(+), 588 deletions(-)
 delete mode 100644 maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java
 delete mode 100644 maven-core/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java


[maven] 01/01: [MNG-5577] Convert maven-core to JSR 330

Posted by sl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9567da2bc889a94f5c3b692b4afb310ddbacd6e5
Author: Joseph Walton <jo...@kafsemo.org>
AuthorDate: Sun Jun 23 22:48:51 2019 +1000

    [MNG-5577] Convert maven-core to JSR 330
    
    Convert (almost) all Plexus components in maven-core to JSR 330 annotations
    
    Closes #332
---
 maven-core/pom.xml                                 |  4 ---
 .../main/java/org/apache/maven/DefaultMaven.java   | 28 +++++++++--------
 .../maven/DefaultProjectDependenciesResolver.java  | 13 ++++----
 .../artifact/factory/DefaultArtifactFactory.java   | 11 ++++---
 .../artifact/handler/DefaultArtifactHandler.java   |  6 ++--
 .../manager/DefaultArtifactHandlerManager.java     | 11 ++++---
 .../repository/layout/DefaultRepositoryLayout.java |  7 +++--
 .../metadata/io/DefaultMetadataReader.java         |  7 +++--
 .../resolver/DefaultResolutionErrorHandler.java    |  6 ++--
 .../apache/maven/bridge/MavenRepositorySystem.java | 23 +++++++++-----
 .../internal/DefaultBeanConfigurator.java          |  7 +++--
 .../eventspy/internal/EventSpyDispatcher.java      | 13 ++++----
 .../maven/exception/DefaultExceptionHandler.java   |  7 +++--
 .../apache/maven/graph/DefaultGraphBuilder.java    | 13 ++++----
 .../maven/lifecycle/DefaultLifecycleExecutor.java  | 33 ++++++++++----------
 .../apache/maven/lifecycle/DefaultLifecycles.java  | 13 ++++----
 .../lifecycle/internal/BuildListCalculator.java    | 15 ++++++----
 .../internal/DefaultExecutionEventCatapult.java    |  7 +++--
 .../DefaultLifecycleExecutionPlanCalculator.java   | 26 +++++++++-------
 .../internal/DefaultLifecycleMappingDelegate.java  | 18 +++++++----
 .../internal/DefaultLifecyclePluginAnalyzer.java   | 16 +++++-----
 .../DefaultLifecycleTaskSegmentCalculator.java     | 21 +++++++------
 .../internal/DefaultMojoExecutionConfigurator.java |  7 +++--
 .../lifecycle/internal/LifecycleDebugLogger.java   | 23 +++++++-------
 .../lifecycle/internal/LifecycleModuleBuilder.java | 23 +++++++-------
 .../internal/LifecyclePluginResolver.java          | 17 +++++------
 .../maven/lifecycle/internal/LifecycleStarter.java | 25 +++++++++-------
 .../lifecycle/internal/MojoDescriptorCreator.java  | 27 +++++++++--------
 .../maven/lifecycle/internal/MojoExecutor.java     | 35 ++++++++++++----------
 .../lifecycle/internal/builder/BuilderCommon.java  | 21 +++++++------
 .../multithreaded/MultiThreadedBuilder.java        | 13 ++++----
 .../singlethreaded/SingleThreadedBuilder.java      | 18 +++++++----
 .../plugin/DefaultLifecycleBindingsInjector.java   | 11 ++++---
 .../maven/plugin/DefaultBuildPluginManager.java    | 21 +++++++------
 .../maven/plugin/DefaultExtensionRealmCache.java   |  7 +++--
 .../maven/plugin/DefaultPluginArtifactsCache.java  |  7 +++--
 .../maven/plugin/DefaultPluginDescriptorCache.java |  7 +++--
 .../maven/plugin/DefaultPluginRealmCache.java      |  7 +++--
 .../plugin/internal/DefaultLegacySupport.java      |  8 +++--
 .../plugin/internal/DefaultMavenPluginManager.java | 31 ++++++++++---------
 .../DefaultPluginDependenciesResolver.java         | 13 ++++----
 .../plugin/internal/DefaultPluginManager.java      | 23 +++++++-------
 .../internal/DefaultPluginPrefixResolver.java      | 19 +++++++-----
 .../internal/DefaultPluginVersionResolver.java     | 19 +++++++-----
 .../maven/project/DefaultMavenProjectHelper.java   | 18 +++++++----
 .../maven/project/DefaultProjectBuilder.java       | 25 +++++++++-------
 .../project/DefaultProjectBuildingHelper.java      | 21 +++++++------
 .../DefaultProjectDependenciesResolver.java        | 15 ++++++----
 .../maven/project/DefaultProjectRealmCache.java    |  7 +++--
 .../artifact/DefaultMavenMetadataCache.java        |  7 +++--
 .../project/artifact/DefaultMetadataSource.java    |  7 +++--
 .../artifact/DefaultProjectArtifactsCache.java     |  7 +++--
 .../project/artifact/MavenMetadataSource.java      | 23 +++++++-------
 .../rtinfo/internal/DefaultRuntimeInformation.java | 11 ++++---
 .../settings/DefaultMavenSettingsBuilder.java      | 11 ++++---
 .../maven/toolchain/DefaultToolchainManager.java   | 13 ++++----
 .../toolchain/DefaultToolchainManagerPrivate.java  |  7 +++--
 .../maven/toolchain/DefaultToolchainsBuilder.java  | 11 ++++---
 .../maven/toolchain/java/JavaToolchainFactory.java | 11 ++++---
 59 files changed, 528 insertions(+), 353 deletions(-)

diff --git a/maven-core/pom.xml b/maven-core/pom.xml
index 7a723a2..cd363f5 100644
--- a/maven-core/pom.xml
+++ b/maven-core/pom.xml
@@ -119,10 +119,6 @@ under the License.
       <artifactId>plexus-classworlds</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-component-annotations</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
     </dependency>
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 7f052c1..fc26290 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -31,6 +31,10 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.execution.DefaultMavenExecutionResult;
 import org.apache.maven.execution.ExecutionEvent;
@@ -51,8 +55,6 @@ import org.apache.maven.project.ProjectBuilder;
 import org.apache.maven.repository.LocalRepositoryNotAccessibleException;
 import org.apache.maven.session.scope.internal.SessionScope;
 import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.DefaultRepositorySystemSession;
@@ -63,36 +65,38 @@ import org.eclipse.aether.util.repository.ChainedWorkspaceReader;
 /**
  * @author Jason van Zyl
  */
-@Component( role = Maven.class )
+@Named
+@Singleton
 public class DefaultMaven
     implements Maven
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     protected ProjectBuilder projectBuilder;
 
-    @Requirement
+    @Inject
     private LifecycleStarter lifecycleStarter;
 
-    @Requirement
+    @Inject
     protected PlexusContainer container;
 
-    @Requirement
+    @Inject
     private ExecutionEventCatapult eventCatapult;
 
-    @Requirement
+    @Inject
     private LegacySupport legacySupport;
 
-    @Requirement
+    @Inject
     private SessionScope sessionScope;
 
-    @Requirement
+    @Inject
     private DefaultRepositorySystemSessionFactory repositorySessionFactory;
 
-    @Requirement( hint = GraphBuilder.HINT )
+    @Inject
+    @Named( GraphBuilder.HINT )
     private GraphBuilder graphBuilder;
 
     @Override
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 dca8014..2b7945e 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java
@@ -26,6 +26,10 @@ import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
@@ -39,8 +43,6 @@ import org.apache.maven.execution.MavenSession;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.ProjectArtifact;
 import org.apache.maven.repository.RepositorySystem;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
  * @deprecated As of 3.2.2, and there is no direct replacement. This is an internal class which was not marked as such,
@@ -48,15 +50,16 @@ import org.codehaus.plexus.component.annotations.Requirement;
  *
  */
 @Deprecated
-@Component( role = ProjectDependenciesResolver.class )
+@Named
+@Singleton
 public class DefaultProjectDependenciesResolver
     implements ProjectDependenciesResolver
 {
 
-    @Requirement
+    @Inject
     private RepositorySystem repositorySystem;
 
-    @Requirement
+    @Inject
     private ResolutionErrorHandler resolutionErrorHandler;
 
     public Set<Artifact> resolve( MavenProject project, Collection<String> scopesToResolve, 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 3ee65de..9fc0506 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
@@ -19,24 +19,27 @@ package org.apache.maven.artifact.factory;
  * under the License.
  */
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.versioning.VersionRange;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
  * DefaultArtifactFactory
  *
  */
-@Component( role = ArtifactFactory.class )
+@Named
+@Singleton
 @SuppressWarnings( "checkstyle:parameternumber" )
 public class DefaultArtifactFactory
     implements ArtifactFactory
 {
-    @Requirement
+    @Inject
     private 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/DefaultArtifactHandler.java b/maven-core/src/main/java/org/apache/maven/artifact/handler/DefaultArtifactHandler.java
index 628f38b..e4ab338 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/handler/DefaultArtifactHandler.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/handler/DefaultArtifactHandler.java
@@ -19,13 +19,15 @@ package org.apache.maven.artifact.handler;
  * under the License.
  */
 
-import org.codehaus.plexus.component.annotations.Component;
+import javax.inject.Named;
+import javax.inject.Singleton;
 
 /**
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @author Jason van Zyl
  */
-@Component( role = ArtifactHandler.class )
+@Named
+@Singleton
 public class DefaultArtifactHandler
     implements ArtifactHandler
 {
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 a4b2f44..a3013d4 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
@@ -23,20 +23,23 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
  * @author Jason van Zyl
  */
-@Component( role = ArtifactHandlerManager.class )
+@Named
+@Singleton
 public class DefaultArtifactHandlerManager
     implements ArtifactHandlerManager
 {
 
-    @Requirement( role = ArtifactHandler.class )
+    @Inject
     private Map<String, ArtifactHandler> artifactHandlers;
 
     private Map<String, ArtifactHandler> allHandlers = new ConcurrentHashMap<>();
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java b/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
index 70c0b14..0590e53 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
@@ -19,16 +19,19 @@ package org.apache.maven.artifact.repository.layout;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.codehaus.plexus.component.annotations.Component;
 
 /**
  * @author jdcasey
  */
-@Component( role = ArtifactRepositoryLayout.class, hint = "default" )
+@Named( "default" )
+@Singleton
 public class DefaultRepositoryLayout
     implements ArtifactRepositoryLayout
 {
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java b/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java
index 0139ab3..1d7241c 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java
@@ -26,9 +26,11 @@ import java.io.Reader;
 import java.util.Map;
 import java.util.Objects;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
-import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
@@ -37,7 +39,8 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
  *
  * @author Benjamin Bentmann
  */
-@Component( role = MetadataReader.class )
+@Named
+@Singleton
 public class DefaultMetadataReader
     implements MetadataReader
 {
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java b/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java
index 178335a..d1603f3 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java
@@ -23,12 +23,14 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.codehaus.plexus.component.annotations.Component;
+import javax.inject.Named;
+import javax.inject.Singleton;
 
 /**
  * @author Benjamin Bentmann
  */
-@Component( role = ResolutionErrorHandler.class )
+@Named
+@Singleton
 public class DefaultResolutionErrorHandler
     implements ResolutionErrorHandler
 {
diff --git a/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java b/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java
index d3cb2e4..752e659 100644
--- a/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java
+++ b/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java
@@ -31,6 +31,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
@@ -53,8 +57,6 @@ import org.apache.maven.model.Plugin;
 import org.apache.maven.repository.Proxy;
 import org.apache.maven.repository.RepositorySystem;
 import org.apache.maven.settings.Mirror;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.util.StringUtils;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.AuthenticationContext;
@@ -65,14 +67,21 @@ import org.eclipse.aether.repository.RemoteRepository;
 /**
  * @author Jason van Zyl
  */
-@Component( role = MavenRepositorySystem.class, hint = "default" )
+@Named( "default" )
+@Singleton
 public class MavenRepositorySystem
 {
-    @Requirement
-    private ArtifactHandlerManager artifactHandlerManager;
+    private final ArtifactHandlerManager artifactHandlerManager;
+
+    private final Map<String, ArtifactRepositoryLayout> layouts;
 
-    @Requirement( role = ArtifactRepositoryLayout.class )
-    private Map<String, ArtifactRepositoryLayout> layouts;
+    @Inject
+    public MavenRepositorySystem( ArtifactHandlerManager artifactHandlerManager,
+            Map<String, ArtifactRepositoryLayout> layouts )
+    {
+        this.artifactHandlerManager = artifactHandlerManager;
+        this.layouts = layouts;
+    }
 
     // DefaultProjectBuilder
     public Artifact createArtifact( String groupId, String artifactId, String version, String scope, String type )
diff --git a/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java b/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java
index 00c79b7..ed01875 100644
--- a/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java
+++ b/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java
@@ -22,12 +22,14 @@ package org.apache.maven.configuration.internal;
 import java.io.File;
 import java.util.Objects;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.configuration.BeanConfigurationException;
 import org.apache.maven.configuration.BeanConfigurationPathTranslator;
 import org.apache.maven.configuration.BeanConfigurationRequest;
 import org.apache.maven.configuration.BeanConfigurationValuePreprocessor;
 import org.apache.maven.configuration.BeanConfigurator;
-import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
 import org.codehaus.plexus.component.configurator.converters.composite.ObjectWithFieldsConverter;
 import org.codehaus.plexus.component.configurator.converters.lookup.ConverterLookup;
@@ -44,7 +46,8 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
  *
  * @author Benjamin Bentmann
  */
-@Component( role = BeanConfigurator.class )
+@Named
+@Singleton
 public class DefaultBeanConfigurator
     implements BeanConfigurator
 {
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 e779009..980bc15 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
@@ -22,10 +22,12 @@ package org.apache.maven.eventspy.internal;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.eventspy.EventSpy;
 import org.apache.maven.execution.ExecutionListener;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.RepositoryListener;
 
@@ -33,16 +35,17 @@ import org.eclipse.aether.RepositoryListener;
  * Dispatches callbacks to all registered eventspies.
  * @since 3.0.2
  */
-@Component( role = EventSpyDispatcher.class )
+@Named
+@Singleton
 public class EventSpyDispatcher
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement( role = EventSpy.class )
     private List<EventSpy> eventSpies;
 
+    @Inject
     public void setEventSpies( List<EventSpy> eventSpies )
     {
         // make copy to get rid of needless overhead for dynamic lookups
diff --git a/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java b/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
index 2193e61..ef3a452 100644
--- a/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
+++ b/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java
@@ -25,6 +25,9 @@ import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.model.building.ModelProblem;
 import org.apache.maven.model.building.ModelProblemUtils;
@@ -35,7 +38,6 @@ import org.apache.maven.plugin.PluginContainerException;
 import org.apache.maven.plugin.PluginExecutionException;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.ProjectBuildingResult;
-import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.util.StringUtils;
 
 /*
@@ -86,7 +88,8 @@ Plugins:
 /**
  * Transform an exception into useful end-user message.
  */
-@Component( role = ExceptionHandler.class )
+@Named
+@Singleton
 public class DefaultExceptionHandler
     implements ExceptionHandler
 {
diff --git a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
index fb7a9f4..6d15230 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
@@ -30,6 +30,10 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.DefaultMaven;
 import org.apache.maven.MavenExecutionException;
 import org.apache.maven.ProjectCycleException;
@@ -50,8 +54,6 @@ import org.apache.maven.project.ProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingResult;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.dag.CycleDetectedException;
@@ -59,15 +61,16 @@ import org.codehaus.plexus.util.dag.CycleDetectedException;
 /**
  * Builds the {@link ProjectDependencyGraph inter-dependencies graph} between projects in the reactor.
  */
-@Component( role = GraphBuilder.class, hint = GraphBuilder.HINT )
+@Named( GraphBuilder.HINT )
+@Singleton
 public class DefaultGraphBuilder
     implements GraphBuilder
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     protected ProjectBuilder projectBuilder;
 
     @Override
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 dae1894..63b7654 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
@@ -19,6 +19,15 @@ package org.apache.maven.lifecycle;
  * under the License.
  */
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
 import org.apache.maven.lifecycle.internal.LifecycleStarter;
@@ -39,13 +48,6 @@ import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 /**
  * A facade that provides lifecycle services to components outside maven core.
@@ -56,27 +58,28 @@ import java.util.Set;
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold
  */
-@Component( role = LifecycleExecutor.class )
+@Named
+@Singleton
 public class DefaultLifecycleExecutor
     implements LifecycleExecutor
 {
 
-    @Requirement
+    @Inject
     private LifeCyclePluginAnalyzer lifeCyclePluginAnalyzer;
 
-    @Requirement
+    @Inject
     private DefaultLifecycles defaultLifeCycles;
 
-    @Requirement
+    @Inject
     private LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
 
-    @Requirement
+    @Inject
     private LifecycleExecutionPlanCalculator lifecycleExecutionPlanCalculator;
 
-    @Requirement
+    @Inject
     private MojoExecutor mojoExecutor;
 
-    @Requirement
+    @Inject
     private LifecycleStarter lifecycleStarter;
 
 
@@ -85,7 +88,7 @@ public class DefaultLifecycleExecutor
         lifecycleStarter.execute( session );
     }
 
-    @Requirement
+    @Inject
     private MojoDescriptorCreator mojoDescriptorCreator;
 
     // These methods deal with construction intact Plugin object that look like they come from a standard
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
index a7d9fac..601523f 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
@@ -19,8 +19,6 @@ package org.apache.maven.lifecycle;
  * under the License.
  */
 
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -33,6 +31,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
  * @since 3.0
  * @author Jason van Zyl
@@ -40,17 +42,18 @@ import java.util.Set;
  */
 // TODO The configuration for the lifecycle needs to be externalized so that I can use the annotations properly for the
 // wiring and reference and external source for the lifecycle configuration.
-@Component( role = DefaultLifecycles.class )
+@Named
+@Singleton
 public class DefaultLifecycles
 {
     public static final String[] STANDARD_LIFECYCLES = { "default", "clean", "site" };
 
     // @Configuration(source="org/apache/maven/lifecycle/lifecycles.xml")
 
-    @Requirement( role = Lifecycle.class )
+    @Inject
     private Map<String, Lifecycle> lifecycles;
 
-    @Requirement
+    @Inject
     private Logger logger;
 
     public DefaultLifecycles()
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
index 76454f8..d8ad993 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
@@ -19,22 +19,25 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
-import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
+import org.apache.maven.project.MavenProject;
+
 /**
  * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  * 
  * @since 3.0
  * @author Kristian Rosenvold
  */
-@Component( role = BuildListCalculator.class )
+@Named
+@Singleton
 public class BuildListCalculator
 {
     public ProjectBuildList calculateProjectBuilds( MavenSession session, List<TaskSegment> taskSegments )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java
index bfb98d4..94948bc 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java
@@ -19,11 +19,13 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.ExecutionEvent;
 import org.apache.maven.execution.ExecutionListener;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.MojoExecution;
-import org.codehaus.plexus.component.annotations.Component;
 
 /**
  * Assists in firing execution events. <strong>Warning:</strong> This is an internal utility class that is only public
@@ -32,7 +34,8 @@ import org.codehaus.plexus.component.annotations.Component;
  *
  * @author Benjamin Bentmann
  */
-@Component( role = ExecutionEventCatapult.class )
+@Named
+@Singleton
 public class DefaultExecutionEventCatapult
     implements ExecutionEventCatapult
 {
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 833705c..279b2af 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
@@ -28,6 +28,10 @@ import java.util.HashSet;
 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.lifecycle.DefaultLifecycles;
 import org.apache.maven.lifecycle.Lifecycle;
@@ -53,8 +57,6 @@ 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.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -67,32 +69,34 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold (Extract class)
  */
-@Component( role = LifecycleExecutionPlanCalculator.class )
+@Named
+@Singleton
 public class DefaultLifecycleExecutionPlanCalculator
     implements LifecycleExecutionPlanCalculator
 {
-    @Requirement
+    @Inject
     private PluginVersionResolver pluginVersionResolver;
 
-    @Requirement
+    @Inject
     private BuildPluginManager pluginManager;
 
-    @Requirement
+    @Inject
     private DefaultLifecycles defaultLifeCycles;
 
-    @Requirement
+    @Inject
     private MojoDescriptorCreator mojoDescriptorCreator;
 
-    @Requirement
+    @Inject
     private LifecyclePluginResolver lifecyclePluginResolver;
 
-    @Requirement( hint = DefaultLifecycleMappingDelegate.HINT )
+    @Inject
+    @Named( DefaultLifecycleMappingDelegate.HINT )
     private LifecycleMappingDelegate standardDelegate;
 
-    @Requirement
+    @Inject
     private Map<String, LifecycleMappingDelegate> delegates;
 
-    @Requirement
+    @Inject
     private Map<String, MojoExecutionConfigurator> mojoExecutionConfigurators;
 
     @SuppressWarnings( { "UnusedDeclaration" } )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java
index 892e4f1..68890c2 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java
@@ -25,6 +25,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.Lifecycle;
 import org.apache.maven.lifecycle.LifecycleMappingDelegate;
@@ -39,22 +43,26 @@ import org.apache.maven.plugin.PluginNotFoundException;
 import org.apache.maven.plugin.PluginResolutionException;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
  * Lifecycle mapping delegate component interface. Calculates project build execution plan given {@link Lifecycle} and
  * lifecycle phase. Standard lifecycles use plugin execution {@code <phase>} or mojo default lifecycle phase to
  * calculate the execution plan, but custom lifecycles can use alternative mapping strategies.
  */
-@Component( role = LifecycleMappingDelegate.class, hint = DefaultLifecycleMappingDelegate.HINT )
+@Named( DefaultLifecycleMappingDelegate.HINT )
+@Singleton
 public class DefaultLifecycleMappingDelegate
     implements LifecycleMappingDelegate
 {
     public static final String HINT = "default";
 
-    @Requirement
-    private BuildPluginManager pluginManager;
+    private final BuildPluginManager pluginManager;
+
+    @Inject
+    public DefaultLifecycleMappingDelegate( BuildPluginManager pluginManager )
+    {
+        this.pluginManager = pluginManager;
+    }
 
     public Map<String, List<MojoExecution>> calculateLifecycleMappings( MavenSession session, MavenProject project,
                                                                         Lifecycle lifecycle, String lifecyclePhase )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
index 3762363..1201742 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
@@ -19,6 +19,14 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.apache.maven.lifecycle.DefaultLifecycles;
 import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer;
 import org.apache.maven.lifecycle.Lifecycle;
@@ -35,14 +43,6 @@ import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 /**
  * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  * 
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 cb49050..e98e0fb 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
@@ -19,6 +19,14 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.LifecycleNotFoundException;
 import org.apache.maven.lifecycle.LifecyclePhaseNotFoundException;
@@ -31,14 +39,8 @@ import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
 /**
  * <p>
  * Calculates the task segments in the build
@@ -51,14 +53,15 @@ import java.util.List;
  * @author jdcasey
  * @author Kristian Rosenvold (extracted class)
  */
-@Component( role = LifecycleTaskSegmentCalculator.class )
+@Named
+@Singleton
 public class DefaultLifecycleTaskSegmentCalculator
     implements LifecycleTaskSegmentCalculator
 {
-    @Requirement
+    @Inject
     private MojoDescriptorCreator mojoDescriptorCreator;
 
-    @Requirement
+    @Inject
     private LifecyclePluginResolver lifecyclePluginResolver;
 
     public DefaultLifecycleTaskSegmentCalculator()
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java
index 176ba32..e650813 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java
@@ -21,19 +21,22 @@ package org.apache.maven.lifecycle.internal;
 
 import java.util.Collection;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.lifecycle.MojoExecutionConfigurator;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginExecution;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
 /**
  * @since 3.3.1, MNG-5753
  */
-@Component( role = MojoExecutionConfigurator.class )
+@Named
+@Singleton
 public class DefaultMojoExecutionConfigurator
     implements MojoExecutionConfigurator
 {
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 69b7c10..9ffb3d4 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
@@ -19,22 +19,24 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.lifecycle.MavenExecutionPlan;
 import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
 /**
  * <p>
  * Logs debug output from the various lifecycle phases.
@@ -46,10 +48,11 @@ import java.util.TreeSet;
  * @author Jason van Zyl
  * @author Kristian Rosenvold (extracted class only)
  */
-@Component( role = LifecycleDebugLogger.class )
+@Named
+@Singleton
 public class LifecycleDebugLogger
 {
-    @Requirement
+    @Inject
     private Logger logger;
 
 
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 3391e0c..dc7c7bd 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
@@ -22,6 +22,10 @@ package org.apache.maven.lifecycle.internal;
 import java.util.HashSet;
 import java.util.List;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.BuildSuccess;
 import org.apache.maven.execution.ExecutionEvent;
 import org.apache.maven.execution.MavenSession;
@@ -32,8 +36,6 @@ import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.session.scope.internal.SessionScope;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
  * <p>
@@ -46,31 +48,28 @@ import org.codehaus.plexus.component.annotations.Requirement;
  * @author Jason van Zyl
  * @author Kristian Rosenvold (extracted class)
  */
-@Component( role = LifecycleModuleBuilder.class )
+@Named
+@Singleton
 public class LifecycleModuleBuilder
 {
 
-    @Requirement
+    @Inject
     private MojoExecutor mojoExecutor;
 
-    @Requirement
+    @Inject
     private BuilderCommon builderCommon;
 
-    @Requirement
+    @Inject
     private ExecutionEventCatapult eventCatapult;
 
     private ProjectExecutionListener projectExecutionListener;
 
-    // this tricks plexus-component-metadata generate required metadata
-    @Requirement
-    private List<ProjectExecutionListener> projectExecutionListeners;
-
-    @Requirement
+    @Inject
     private SessionScope sessionScope;
 
+    @Inject
     public void setProjectExecutionListeners( final List<ProjectExecutionListener> listeners )
     {
-        this.projectExecutionListeners = listeners;
         this.projectExecutionListener = new CompoundProjectExecutionListener( listeners );
     }
 
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
index b22e359..1f6fab0 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
@@ -22,6 +22,10 @@ package org.apache.maven.lifecycle.internal;
 import java.util.HashMap;
 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.model.Plugin;
 import org.apache.maven.model.PluginManagement;
@@ -30,8 +34,6 @@ import org.apache.maven.plugin.version.PluginVersionRequest;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.plugin.version.PluginVersionResolver;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
  * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
@@ -39,21 +41,18 @@ import org.codehaus.plexus.component.annotations.Requirement;
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold (Extract class)
  */
-@Component( role = LifecyclePluginResolver.class )
+@Named
+@Singleton
 public class LifecyclePluginResolver
 {
-    @Requirement
-    private PluginVersionResolver pluginVersionResolver;
+    private final PluginVersionResolver pluginVersionResolver;
 
+    @Inject
     public LifecyclePluginResolver( PluginVersionResolver pluginVersionResolver )
     {
         this.pluginVersionResolver = pluginVersionResolver;
     }
 
-    public LifecyclePluginResolver()
-    {
-    }
-
     public void resolveMissingPluginVersions( MavenProject project, MavenSession session )
         throws PluginVersionResolutionException
     {
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 cee8073..f616654 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
@@ -22,6 +22,10 @@ package org.apache.maven.lifecycle.internal;
 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.ExecutionEvent;
 import org.apache.maven.execution.MavenExecutionResult;
 import org.apache.maven.execution.MavenSession;
@@ -31,8 +35,6 @@ import org.apache.maven.lifecycle.NoGoalSpecifiedException;
 import org.apache.maven.lifecycle.internal.builder.Builder;
 import org.apache.maven.lifecycle.internal.builder.BuilderNotFoundException;
 import org.apache.maven.session.scope.internal.SessionScope;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 
 /**
@@ -42,31 +44,32 @@ import org.codehaus.plexus.logging.Logger;
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold
  */
-@Component( role = LifecycleStarter.class )
+@Named
+@Singleton
 public class LifecycleStarter
 {
-    @Requirement
+    @Inject
     private ExecutionEventCatapult eventCatapult;
 
-    @Requirement
+    @Inject
     private DefaultLifecycles defaultLifeCycles;
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private BuildListCalculator buildListCalculator;
 
-    @Requirement
+    @Inject
     private LifecycleDebugLogger lifecycleDebugLogger;
 
-    @Requirement
+    @Inject
     private LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
 
-    @Requirement
+    @Inject
     private Map<String, Builder> builders;
     
-    @Requirement
+    @Inject
     private 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 4bafa30..03eae37 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
@@ -19,6 +19,14 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.StringTokenizer;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.BuildPluginManager;
@@ -38,16 +46,10 @@ import org.apache.maven.plugin.version.PluginVersionRequest;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.plugin.version.PluginVersionResolver;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.StringTokenizer;
-
 /**
  * <p>
  * Resolves dependencies for the artifacts in context of the lifecycle build
@@ -60,23 +62,24 @@ import java.util.StringTokenizer;
  * @author jdcasey
  * @author Kristian Rosenvold (extracted class only)
  */
-@Component( role = MojoDescriptorCreator.class )
+@Named
+@Singleton
 public class MojoDescriptorCreator
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private PluginVersionResolver pluginVersionResolver;
 
-    @Requirement
+    @Inject
     private BuildPluginManager pluginManager;
 
-    @Requirement
+    @Inject
     private PluginPrefixResolver pluginPrefixResolver;
 
-    @Requirement
+    @Inject
     private LifecyclePluginResolver lifecyclePluginResolver;
 
     public MojoDescriptorCreator()
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 b78f54d..89fadfd 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
@@ -19,6 +19,19 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.CumulativeScopeArtifactFilter;
@@ -36,19 +49,8 @@ import org.apache.maven.plugin.PluginIncompatibleException;
 import org.apache.maven.plugin.PluginManagerException;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
 /**
  * <p>
  * Executes an individual mojo
@@ -60,20 +62,21 @@ import java.util.TreeSet;
  * @author Kristian Rosenvold
  * @since 3.0
  */
-@Component( role = MojoExecutor.class )
+@Named
+@Singleton
 public class MojoExecutor
 {
 
-    @Requirement
+    @Inject
     private BuildPluginManager pluginManager;
 
-    @Requirement
+    @Inject
     private MavenPluginManager mavenPluginManager;
 
-    @Requirement
+    @Inject
     private LifecycleDependencyResolver lifeCycleDependencyResolver;
 
-    @Requirement
+    @Inject
     private ExecutionEventCatapult eventCatapult;
 
     public MojoExecutor()
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 f5c8e3e..6941c37 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
@@ -19,6 +19,12 @@ package org.apache.maven.lifecycle.internal.builder;
  * under the License.
  */
 
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.execution.BuildFailure;
 import org.apache.maven.execution.ExecutionEvent;
@@ -44,12 +50,8 @@ import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 
-import java.util.Set;
-
 /**
  * Common code that is shared by the LifecycleModuleBuilder and the LifeCycleWeaveBuilder
  *
@@ -58,19 +60,20 @@ import java.util.Set;
  *         Builds one or more lifecycles for a full module
  *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
-@Component( role = BuilderCommon.class )
+@Named
+@Singleton
 public class BuilderCommon
 {
-    @Requirement
+    @Inject
     private LifecycleDebugLogger lifecycleDebugLogger;
 
-    @Requirement
+    @Inject
     private LifecycleExecutionPlanCalculator lifeCycleExecutionPlanCalculator;
 
-    @Requirement
+    @Inject
     private ExecutionEventCatapult eventCatapult;
 
-    @Requirement
+    @Inject
     private Logger logger;
 
 
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 29d1634..6f5658f 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
@@ -29,6 +29,10 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.internal.BuildThreadFactory;
 import org.apache.maven.lifecycle.internal.LifecycleModuleBuilder;
@@ -39,8 +43,6 @@ import org.apache.maven.lifecycle.internal.ReactorContext;
 import org.apache.maven.lifecycle.internal.TaskSegment;
 import org.apache.maven.lifecycle.internal.builder.Builder;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 
 /**
@@ -57,15 +59,16 @@ import org.codehaus.plexus.logging.Logger;
  *         Builds one or more lifecycles for a full module
  *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
-@Component( role = Builder.class, hint = "multithreaded" )
+@Named( "multithreaded" )
+@Singleton
 public class MultiThreadedBuilder
     implements Builder
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private LifecycleModuleBuilder lifecycleModuleBuilder;
 
     public MultiThreadedBuilder()
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java
index f205b03..fee39d5 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java
@@ -21,6 +21,10 @@ package org.apache.maven.lifecycle.internal.builder.singlethreaded;
 
 import java.util.List;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.lifecycle.internal.LifecycleModuleBuilder;
 import org.apache.maven.lifecycle.internal.ProjectBuildList;
@@ -29,20 +33,24 @@ import org.apache.maven.lifecycle.internal.ReactorBuildStatus;
 import org.apache.maven.lifecycle.internal.ReactorContext;
 import org.apache.maven.lifecycle.internal.TaskSegment;
 import org.apache.maven.lifecycle.internal.builder.Builder;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
  * <p>
  * A {@link Builder} encapsulates a strategy for building a set of Maven projects. The default strategy in Maven builds
  * the the projects serially, but a {@link Builder} can employ any type of concurrency model to build the projects.
  */
-@Component( role = Builder.class, hint = "singlethreaded" )
+@Named( "singlethreaded" )
+@Singleton
 public class SingleThreadedBuilder
     implements Builder
 {
-    @Requirement
-    private LifecycleModuleBuilder lifecycleModuleBuilder;
+    private final LifecycleModuleBuilder lifecycleModuleBuilder;
+
+    @Inject
+    public SingleThreadedBuilder( LifecycleModuleBuilder lifecycleModuleBuilder )
+    {
+        this.lifecycleModuleBuilder = lifecycleModuleBuilder;
+    }
 
     public void build( MavenSession session, ReactorContext reactorContext, ProjectBuildList projectBuilds,
                        List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
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 8607909..f1badcf 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
@@ -27,6 +27,10 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.lifecycle.LifeCyclePluginAnalyzer;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Model;
@@ -40,22 +44,21 @@ import org.apache.maven.model.building.ModelProblem.Severity;
 import org.apache.maven.model.building.ModelProblem.Version;
 import org.apache.maven.model.building.ModelProblemCollectorRequest;
 import org.apache.maven.model.merge.MavenModelMerger;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
  * Handles injection of plugin executions induced by the lifecycle bindings for a packaging.
  *
  * @author Benjamin Bentmann
  */
-@Component( role = LifecycleBindingsInjector.class )
+@Named
+@Singleton
 public class DefaultLifecycleBindingsInjector
     implements LifecycleBindingsInjector
 {
 
     private LifecycleBindingsMerger merger = new LifecycleBindingsMerger();
 
-    @Requirement
+    @Inject
     private LifeCyclePluginAnalyzer 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 1a00742..15a35ea 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
@@ -23,6 +23,10 @@ import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 import java.util.List;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.execution.MojoExecutionEvent;
 import org.apache.maven.execution.MojoExecutionListener;
@@ -32,8 +36,6 @@ import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
 
@@ -43,29 +45,26 @@ import org.eclipse.aether.repository.RemoteRepository;
 /**
  * DefaultBuildPluginManager
  */
-@Component( role = BuildPluginManager.class )
+@Named
+@Singleton
 public class DefaultBuildPluginManager
     implements BuildPluginManager
 {
 
-    @Requirement
+    @Inject
     private MavenPluginManager mavenPluginManager;
 
-    @Requirement
+    @Inject
     private LegacySupport legacySupport;
 
-    @Requirement
+    @Inject
     private MojoExecutionScope scope;
 
     private MojoExecutionListener mojoExecutionListener;
 
-    // this tricks plexus-component-metadata generate required metadata
-    @Requirement( role = MojoExecutionListener.class )
-    private List<MojoExecutionListener> mojoExecutionListeners;
-
+    @Inject
     public void setMojoExecutionListeners( final List<MojoExecutionListener> listeners )
     {
-        this.mojoExecutionListeners = listeners;
         this.mojoExecutionListener = new CompoundMojoExecutionListener( listeners );
     }
 
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java
index 6ce63eb..dd48a4f 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java
@@ -26,18 +26,21 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.project.ExtensionDescriptor;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
 import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
-import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
 
 /**
  * Default extension realm cache implementation. Assumes cached data does not change.
  */
-@Component( role = ExtensionRealmCache.class )
+@Named
+@Singleton
 public class DefaultExtensionRealmCache
     implements ExtensionRealmCache, Disposable
 {
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java
index ee11c4c..99de6d7 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java
@@ -26,11 +26,13 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.graph.DependencyFilter;
 import org.eclipse.aether.repository.LocalRepository;
@@ -41,7 +43,8 @@ import org.eclipse.aether.repository.WorkspaceRepository;
  * @author Igor Fedorenko
  * @author Benjamin Bentmann
  */
-@Component( role = PluginArtifactsCache.class )
+@Named
+@Singleton
 public class DefaultPluginArtifactsCache
     implements PluginArtifactsCache
 {
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java
index 0da9935..130cc35 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java
@@ -25,12 +25,14 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
-import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.repository.ComponentDescriptor;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.LocalRepository;
@@ -47,7 +49,8 @@ import org.eclipse.aether.repository.WorkspaceRepository;
  * @since 3.0
  * @author Benjamin Bentmann
  */
-@Component( role = PluginDescriptorCache.class )
+@Named
+@Singleton
 public class DefaultPluginDescriptorCache
     implements PluginDescriptorCache
 {
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java
index 7862b40..cd0bbb9 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java
@@ -26,13 +26,15 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
 import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
-import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.graph.DependencyFilter;
@@ -43,7 +45,8 @@ import org.eclipse.aether.repository.WorkspaceRepository;
 /**
  * Default PluginCache implementation. Assumes cached data does not change.
  */
-@Component( role = PluginRealmCache.class )
+@Named
+@Singleton
 public class DefaultPluginRealmCache
     implements PluginRealmCache, Disposable
 {
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
index bb55eb9..bc02e1f 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java
@@ -20,9 +20,12 @@ package org.apache.maven.plugin.internal;
  */
 
 import java.util.concurrent.atomic.AtomicReference;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.LegacySupport;
-import org.codehaus.plexus.component.annotations.Component;
 import org.eclipse.aether.RepositorySystemSession;
 
 /**
@@ -33,7 +36,8 @@ import org.eclipse.aether.RepositorySystemSession;
  * @since 3.0
  * @author Benjamin Bentmann
  */
-@Component( role = LegacySupport.class )
+@Named
+@Singleton
 public class DefaultLegacySupport
     implements LegacySupport
 {
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 9febd4a..500ead6 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
@@ -62,8 +62,6 @@ import org.apache.maven.session.scope.internal.SessionScopeModule;
 import org.codehaus.plexus.DefaultPlexusContainer;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.component.composition.CycleDetectedInComponentGraphException;
 import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
 import org.codehaus.plexus.component.configurator.ComponentConfigurator;
@@ -106,6 +104,10 @@ import java.util.Objects;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
  * Provides basic services to manage Maven plugins and their mojos. This component is kept general in its design such
  * that the plugins/mojos can be used in arbitrary contexts. In particular, the mojos can be used for ordinary build
@@ -114,7 +116,8 @@ import java.util.zip.ZipEntry;
  * @author Benjamin Bentmann
  * @since 3.0
  */
-@Component( role = MavenPluginManager.class )
+@Named
+@Singleton
 public class DefaultMavenPluginManager
     implements MavenPluginManager
 {
@@ -130,37 +133,37 @@ public class DefaultMavenPluginManager
      */
     public static final String KEY_EXTENSIONS_REALMS = DefaultMavenPluginManager.class.getName() + "/extensionsRealms";
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private LoggerManager loggerManager;
 
-    @Requirement
+    @Inject
     private PlexusContainer container;
 
-    @Requirement
+    @Inject
     private ClassRealmManager classRealmManager;
 
-    @Requirement
+    @Inject
     private PluginDescriptorCache pluginDescriptorCache;
 
-    @Requirement
+    @Inject
     private PluginRealmCache pluginRealmCache;
 
-    @Requirement
+    @Inject
     private PluginDependenciesResolver pluginDependenciesResolver;
 
-    @Requirement
+    @Inject
     private RuntimeInformation runtimeInformation;
 
-    @Requirement
+    @Inject
     private ExtensionRealmCache extensionRealmCache;
 
-    @Requirement
+    @Inject
     private PluginVersionResolver pluginVersionResolver;
 
-    @Requirement
+    @Inject
     private PluginArtifactsCache pluginArtifactsCache;
 
     private ExtensionDescriptorBuilder extensionDescriptorBuilder = new ExtensionDescriptorBuilder();
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 8d16c61..d1f2834 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
@@ -25,12 +25,14 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.PluginResolutionException;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 import org.eclipse.aether.DefaultRepositorySystemSession;
@@ -70,17 +72,18 @@ import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
  * @since 3.0
  * @author Benjamin Bentmann
  */
-@Component( role = PluginDependenciesResolver.class )
+@Named
+@Singleton
 public class DefaultPluginDependenciesResolver
     implements PluginDependenciesResolver
 {
 
     private static final String REPOSITORY_CONTEXT = "plugin";
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private RepositorySystem 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 a8ac9eb..547e457 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
@@ -19,6 +19,12 @@ package org.apache.maven.plugin.internal;
  * under the License.
  */
 
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
@@ -53,33 +59,30 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.settings.Settings;
 import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 
-import java.util.Map;
-
 /**
  * @author Benjamin Bentmann
  */
-@Component( role = PluginManager.class )
+@Named
+@Singleton
 public class DefaultPluginManager
     implements PluginManager
 {
 
-    @Requirement
+    @Inject
     private PlexusContainer container;
 
-    @Requirement
+    @Inject
     private MavenPluginManager pluginManager;
 
-    @Requirement
+    @Inject
     private PluginVersionResolver pluginVersionResolver;
 
-    @Requirement
+    @Inject
     private PluginPrefixResolver pluginPrefixResolver;
 
-    @Requirement
+    @Inject
     private LegacySupport legacySupport;
 
     public void executeMojo( MavenProject project, MojoExecution execution, MavenSession session )
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 25a5bc8..7b98e80 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
@@ -25,6 +25,10 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.io.MetadataReader;
 import org.apache.maven.model.Build;
@@ -35,12 +39,10 @@ import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
 import org.apache.maven.plugin.prefix.PluginPrefixRequest;
 import org.apache.maven.plugin.prefix.PluginPrefixResolver;
 import org.apache.maven.plugin.prefix.PluginPrefixResult;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
-import org.eclipse.aether.RepositoryEvent.EventType;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositoryEvent.EventType;
 import org.eclipse.aether.RepositoryListener;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
@@ -58,23 +60,24 @@ import org.eclipse.aether.resolution.MetadataResult;
  * @since 3.0
  * @author Benjamin Bentmann
  */
-@Component( role = PluginPrefixResolver.class )
+@Named
+@Singleton
 public class DefaultPluginPrefixResolver
     implements PluginPrefixResolver
 {
 
     private static final String REPOSITORY_CONTEXT = "plugin";
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private BuildPluginManager pluginManager;
 
-    @Requirement
+    @Inject
     private RepositorySystem repositorySystem;
 
-    @Requirement
+    @Inject
     private MetadataReader metadataReader;
 
     public PluginPrefixResult resolve( PluginPrefixRequest request )
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 82e32fb..17186dd 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
@@ -27,6 +27,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeSet;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.Versioning;
 import org.apache.maven.artifact.repository.metadata.io.MetadataReader;
@@ -39,12 +43,10 @@ import org.apache.maven.plugin.version.PluginVersionRequest;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.plugin.version.PluginVersionResolver;
 import org.apache.maven.plugin.version.PluginVersionResult;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
-import org.eclipse.aether.RepositoryEvent.EventType;
 import org.eclipse.aether.RepositoryEvent;
+import org.eclipse.aether.RepositoryEvent.EventType;
 import org.eclipse.aether.RepositoryListener;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
@@ -65,23 +67,24 @@ import org.eclipse.aether.version.VersionScheme;
  * @since 3.0
  * @author Benjamin Bentmann
  */
-@Component( role = PluginVersionResolver.class )
+@Named
+@Singleton
 public class DefaultPluginVersionResolver
     implements PluginVersionResolver
 {
 
     private static final String REPOSITORY_CONTEXT = "plugin";
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private RepositorySystem repositorySystem;
 
-    @Requirement
+    @Inject
     private MetadataReader metadataReader;
 
-    @Requirement
+    @Inject
     private MavenPluginManager pluginManager;
 
     public PluginVersionResult resolve( PluginVersionRequest request )
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java b/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java
index 1972242..3541bca 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java
@@ -22,26 +22,34 @@ package org.apache.maven.project;
 import java.io.File;
 import java.util.List;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.model.Resource;
 import org.apache.maven.project.artifact.AttachedArtifact;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
 /**
  * DefaultMavenProjectHelper
  */
 @SuppressWarnings( "deprecation" )
-@Component( role = MavenProjectHelper.class )
+@Named
+@Singleton
 public class DefaultMavenProjectHelper
     extends AbstractLogEnabled
     implements MavenProjectHelper
 {
-    @Requirement
-    private ArtifactHandlerManager artifactHandlerManager;
+    private final ArtifactHandlerManager artifactHandlerManager;
+
+    @Inject
+    public DefaultMavenProjectHelper( ArtifactHandlerManager artifactHandlerManager )
+    {
+        this.artifactHandlerManager = artifactHandlerManager;
+    }
 
     public void attachArtifact( MavenProject project, String artifactType, String artifactClassifier,
                                 File artifactFile )
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 c5bf26c..1ebc1fc 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
@@ -33,6 +33,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidArtifactRTException;
@@ -62,8 +66,6 @@ import org.apache.maven.model.building.ModelSource;
 import org.apache.maven.model.building.StringModelSource;
 import org.apache.maven.model.resolution.ModelResolver;
 import org.apache.maven.repository.internal.ArtifactDescriptorUtils;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.Os;
 import org.codehaus.plexus.util.StringUtils;
@@ -79,7 +81,8 @@ import org.eclipse.aether.resolution.ArtifactResult;
 /**
  * DefaultProjectBuilder
  */
-@Component( role = ProjectBuilder.class )
+@Named
+@Singleton
 public class DefaultProjectBuilder
     implements ProjectBuilder
 {
@@ -87,28 +90,28 @@ public class DefaultProjectBuilder
     public static final String DISABLE_GLOBAL_MODEL_CACHE_SYSTEM_PROPERTY =
             "maven.defaultProjectBuilder.disableGlobalModelCache";
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private ModelBuilder modelBuilder;
 
-    @Requirement
+    @Inject
     private ModelProcessor modelProcessor;
 
-    @Requirement
+    @Inject
     private ProjectBuildingHelper projectBuildingHelper;
 
-    @Requirement
+    @Inject
     private MavenRepositorySystem repositorySystem;
 
-    @Requirement
+    @Inject
     private org.eclipse.aether.RepositorySystem repoSystem;
 
-    @Requirement
+    @Inject
     private RemoteRepositoryManager repositoryManager;
 
-    @Requirement
+    @Inject
     private ProjectDependenciesResolver dependencyResolver;
 
     private final ReactorModelCache modelCache = new ReactorModelCache();
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 3159fac..33256fb 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
@@ -29,6 +29,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
@@ -47,8 +51,6 @@ import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.repository.RepositorySystem;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.graph.DependencyFilter;
 import org.eclipse.aether.util.filter.ExclusionsDependencyFilter;
@@ -60,27 +62,28 @@ import org.eclipse.aether.util.filter.ExclusionsDependencyFilter;
  *
  * @author Benjamin Bentmann
  */
-@Component( role = ProjectBuildingHelper.class )
+@Named
+@Singleton
 public class DefaultProjectBuildingHelper
     implements ProjectBuildingHelper
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private PlexusContainer container;
 
-    @Requirement
+    @Inject
     private ClassRealmManager classRealmManager;
 
-    @Requirement
+    @Inject
     private ProjectRealmCache projectRealmCache;
 
-    @Requirement
+    @Inject
     private RepositorySystem repositorySystem;
 
-    @Requirement
+    @Inject
     private MavenPluginManager pluginManager;
 
     public List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
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 7500e43..d6cc080 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
@@ -25,13 +25,15 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Exclusion;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 import org.eclipse.aether.DefaultRepositorySystemSession;
@@ -54,18 +56,19 @@ import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
 /**
  * @author Benjamin Bentmann
  */
-@Component( role = ProjectDependenciesResolver.class )
+@Named
+@Singleton
 public class DefaultProjectDependenciesResolver
     implements ProjectDependenciesResolver
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private RepositorySystem repoSystem;
 
-    @Requirement
+    @Inject
     private List<RepositorySessionDecorator> decorators;
 
     public DependencyResolutionResult resolve( DependencyResolutionRequest request )
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java
index a7f0615..6651b62 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java
@@ -25,16 +25,19 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
 import org.codehaus.plexus.classworlds.realm.NoSuchRealmException;
-import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
 import org.eclipse.aether.graph.DependencyFilter;
 
 /**
  * Default project realm cache implementation. Assumes cached data does not change.
  */
-@Component( role = ProjectRealmCache.class )
+@Named
+@Singleton
 public class DefaultProjectRealmCache
     implements ProjectRealmCache, Disposable
 {
diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
index 3db7bb7..5768709 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
@@ -30,17 +30,20 @@ import java.util.Set;
 import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.metadata.ResolutionGroup;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
-import org.codehaus.plexus.component.annotations.Component;
 
 /**
  * DefaultMavenMetadataCache
  */
-@Component( role = MavenMetadataCache.class )
+@Named
+@Singleton
 public class DefaultMavenMetadataCache
     implements MavenMetadataCache
 {
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 91f665b..9f22f99 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,8 +19,8 @@ package org.apache.maven.project.artifact;
  * under the License.
  */
 
-import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-import org.codehaus.plexus.component.annotations.Component;
+import javax.inject.Named;
+import javax.inject.Singleton;
 
 /**
  * This realizes the metadata source via the default hint to provide backward-compat with Maven 2.x whose Plexus version
@@ -29,7 +29,8 @@ import org.codehaus.plexus.component.annotations.Component;
  *
  * @author Benjamin Bentmann
  */
-@Component( role = ArtifactMetadataSource.class )
+@Named
+@Singleton
 public class DefaultMetadataSource
     extends MavenMetadataSource
 {
diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
index ae59ada..7ec4d9a 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
@@ -30,11 +30,13 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.RemoteRepository;
@@ -45,7 +47,8 @@ import org.eclipse.aether.repository.WorkspaceRepository;
  * @author Benjamin Bentmann
  * @author Anton Tanasenko
  */
-@Component( role = ProjectArtifactsCache.class )
+@Named
+@Singleton
 public class DefaultProjectArtifactsCache
     implements ProjectArtifactsCache
 {
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 1c40af8..a8f382e 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
@@ -32,6 +32,10 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
@@ -76,8 +80,6 @@ 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.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.RepositorySystemSession;
@@ -88,30 +90,31 @@ import org.eclipse.aether.transfer.ArtifactNotFoundException;
 /**
  * @author Jason van Zyl
  */
-@Component( role = ArtifactMetadataSource.class, hint = "maven" )
+@Named( "maven" )
+@Singleton
 public class MavenMetadataSource
     implements ArtifactMetadataSource
 {
-    @Requirement
+    @Inject
     private RepositoryMetadataManager repositoryMetadataManager;
 
-    @Requirement
+    @Inject
     private ArtifactFactory repositorySystem;
 
     //TODO This prevents a cycle in the composition which shows us another problem we need to deal with.
-    //@Requirement
+    //@Inject
     private ProjectBuilder projectBuilder;
 
-    @Requirement
+    @Inject
     private PlexusContainer container;
 
-    @Requirement
+    @Inject
     private Logger logger;
 
-    @Requirement
+    @Inject
     private MavenMetadataCache cache;
 
-    @Requirement
+    @Inject
     private LegacySupport legacySupport;
 
     private void injectSession( MetadataResolutionRequest request )
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 12a6b6f..fbb817e 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
@@ -22,8 +22,6 @@ package org.apache.maven.rtinfo.internal;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.maven.rtinfo.RuntimeInformation;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.util.version.GenericVersionScheme;
 import org.eclipse.aether.version.InvalidVersionSpecificationException;
@@ -35,15 +33,20 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
  * Provides information about the current Maven runtime.
  */
-@Component( role = RuntimeInformation.class )
+@Named
+@Singleton
 public class DefaultRuntimeInformation
     implements RuntimeInformation
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
     private String mavenVersion;
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 d3ffd92..8b12796 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
@@ -22,14 +22,16 @@ package org.apache.maven.settings;
 import java.io.File;
 import java.io.IOException;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.properties.internal.SystemProperties;
 import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
 import org.apache.maven.settings.building.SettingsBuilder;
 import org.apache.maven.settings.building.SettingsBuildingException;
 import org.apache.maven.settings.building.SettingsBuildingRequest;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -37,13 +39,14 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 /**
  * @author jdcasey
  */
-@Component( role = MavenSettingsBuilder.class )
+@Named
+@Singleton
 public class DefaultMavenSettingsBuilder
     extends AbstractLogEnabled
     implements MavenSettingsBuilder
 {
 
-    @Requirement
+    @Inject
     private SettingsBuilder settingsBuilder;
 
     public Settings buildSettings()
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 4c60aa4..bba161f 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
@@ -25,25 +25,28 @@ import java.util.HashMap;
 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.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.toolchain.model.ToolchainModel;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 
 /**
  * @author mkleint
  */
-@Component( role = ToolchainManager.class )
+@Named
+@Singleton
 public class DefaultToolchainManager
     implements ToolchainManager
 {
-    @Requirement
+    @Inject
     Logger logger;
 
-    @Requirement( role = ToolchainFactory.class )
+    @Inject
     Map<String, ToolchainFactory> factories;
     
     @Override
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 1591573..ce1dd76 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,15 +23,18 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+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.component.annotations.Component;
 
 /**
  * @author mkleint
  * @author Robert Scholte
  */
-@Component( role = ToolchainManagerPrivate.class )
+@Named
+@Singleton
 public class DefaultToolchainManagerPrivate
     extends DefaultToolchainManager
     implements ToolchainManagerPrivate
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 c2b6a61..94f3114 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
@@ -21,25 +21,28 @@ package org.apache.maven.toolchain;
 
 import org.apache.maven.toolchain.model.PersistedToolchains;
 import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.ReaderFactory;
 
 import java.io.File;
 import java.io.Reader;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 /**
  * @author Benjamin Bentmann
  * @deprecated instead use {@link org.apache.maven.toolchain.building.DefaultToolchainsBuilder}
  */
 @Deprecated
-@Component( role = ToolchainsBuilder.class, hint = "default" )
+@Named( "default" )
+@Singleton
 public class DefaultToolchainsBuilder
     implements ToolchainsBuilder
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
     public PersistedToolchains build( File userToolchainsFile )
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 cd4aef0..f2e45a3 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
@@ -23,14 +23,16 @@ import java.io.File;
 import java.util.Map.Entry;
 import java.util.Properties;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.toolchain.MisconfiguredToolchainException;
 import org.apache.maven.toolchain.RequirementMatcher;
 import org.apache.maven.toolchain.RequirementMatcherFactory;
 import org.apache.maven.toolchain.ToolchainFactory;
 import org.apache.maven.toolchain.ToolchainPrivate;
 import org.apache.maven.toolchain.model.ToolchainModel;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -43,12 +45,13 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
  * @author mkleint
  * @since 2.0.9, renamed from <code>DefaultJavaToolchainFactory</code> in 3.2.4
  */
-@Component( role = ToolchainFactory.class, hint = "jdk" )
+@Named( "jdk" )
+@Singleton
 public class JavaToolchainFactory
     implements ToolchainFactory
 {
 
-    @Requirement
+    @Inject
     private Logger logger;
 
     public ToolchainPrivate createToolchain( ToolchainModel model )