You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/05/20 10:21:39 UTC

[maven-scm] branch scm-979-deplexus created (now 1310aabf7)

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

cstamas pushed a change to branch scm-979-deplexus
in repository https://gitbox.apache.org/repos/asf/maven-scm.git


      at 1310aabf7 [SCM-979] De-Plexus, Java8

This branch includes the following new commits:

     new 1310aabf7 [SCM-979] De-Plexus, Java8

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.



[maven-scm] 01/01: [SCM-979] De-Plexus, Java8

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

cstamas pushed a commit to branch scm-979-deplexus
in repository https://gitbox.apache.org/repos/asf/maven-scm.git

commit 1310aabf7578aaf1c275e827f8ab225d4234cd37
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Fri May 20 12:20:58 2022 +0200

    [SCM-979] De-Plexus, Java8
    
    Changes:
    * make project Java8
    * update dependencies accordingly
    * remove any uses of deprecated Plexus APIs
    * replace plexus-container-default with plexus-shim
---
 maven-scm-api/pom.xml                              |   4 +
 .../org/apache/maven/scm/log/ScmLogDispatcher.java |  20 +-
 .../org/apache/maven/scm/log/Slf4jScmLogger.java   | 195 ++++++++++++++++
 .../maven/scm/manager/AbstractScmManager.java      | 250 +++++++++++----------
 .../apache/maven/scm/manager/BasicScmManager.java  |   9 -
 .../scm/manager/NoSuchScmProviderException.java    |   7 +-
 .../org/apache/maven/scm/manager/ScmManager.java   |   2 -
 .../maven/scm/provider/AbstractScmProvider.java    |  84 ++++++-
 .../org/apache/maven/scm/provider/ScmProvider.java |   3 -
 .../apache/maven/scm/util/AbstractConsumer.java    |  11 +-
 maven-scm-client/pom.xml                           |  38 ++--
 .../apache/maven/scm/client/cli/MavenScmCli.java   |  43 +++-
 .../main/resources/META-INF/plexus/components.xml  |  56 -----
 .../maven-scm-manager-plexus/pom.xml               |  42 ++--
 .../scm/manager/plexus/DefaultScmManager.java      |  86 ++-----
 .../maven/scm/manager/plexus/PlexusLogger.java     | 135 -----------
 maven-scm-plugin/pom.xml                           |  21 +-
 maven-scm-providers/maven-scm-provider-hg/pom.xml  |  24 +-
 .../maven/scm/provider/hg/HgScmProvider.java       |  10 +-
 .../maven-scm-provider-local/pom.xml               |  20 +-
 .../maven/scm/provider/local/LocalScmProvider.java |  18 +-
 .../maven/scm/provider/git/TestGitScmProvider.java |   5 +
 .../test/resources/META-INF/plexus/components.xml  |  28 ---
 .../maven-scm-provider-gitexe/pom.xml              |  21 +-
 .../scm/provider/git/gitexe/GitExeScmProvider.java |   7 +-
 .../maven-scm-provider-jgit/pom.xml                |  42 ++--
 .../scm/provider/git/jgit/JGitScmProvider.java     |  25 ++-
 .../maven-scm-provider-svn-commons/pom.xml         |   7 +
 .../maven/scm/provider/svn/TestSvnScmProvider.java |   5 +
 .../test/resources/META-INF/plexus/components.xml  |  28 ---
 .../maven-scm-provider-svnexe/pom.xml              |  38 ++--
 .../scm/provider/svn/svnexe/SvnExeScmProvider.java |  24 +-
 .../changelog/SvnChangeLogConsumerTest.java        |   7 +-
 maven-scm-test/pom.xml                             |  25 ++-
 .../java/org/apache/maven/scm/ScmTestCase.java     |  12 +-
 .../maven/scm/manager/ScmManagerStubTest.java      |   2 +-
 pom.xml                                            |  82 ++++---
 src/site/apt/guide/new_provider.apt                |  22 +-
 38 files changed, 795 insertions(+), 663 deletions(-)

diff --git a/maven-scm-api/pom.xml b/maven-scm-api/pom.xml
index a3d92db0a..ff0b9a3e8 100644
--- a/maven-scm-api/pom.xml
+++ b/maven-scm-api/pom.xml
@@ -34,6 +34,10 @@
   <description>The SCM API provides mechanisms to manage all SCM tools.</description>
 
   <dependencies>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/log/ScmLogDispatcher.java b/maven-scm-api/src/main/java/org/apache/maven/scm/log/ScmLogDispatcher.java
index 6ef200ef5..fba4fa46e 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/log/ScmLogDispatcher.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/log/ScmLogDispatcher.java
@@ -19,8 +19,8 @@ package org.apache.maven.scm.log;
  * under the License.
  */
 
-import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -30,7 +30,7 @@ import java.util.List;
 public class ScmLogDispatcher
     implements ScmLogger
 {
-    private List<ScmLogger> listeners = new ArrayList<ScmLogger>();
+    private final List<ScmLogger> listeners = new CopyOnWriteArrayList<>();
 
     public void addListener( ScmLogger logger )
     {
@@ -38,6 +38,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void debug( String content, Throwable error )
     {
         for ( ScmLogger logger : listeners )
@@ -47,6 +48,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void debug( String content )
     {
         for ( ScmLogger logger : listeners )
@@ -56,6 +58,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void debug( Throwable error )
     {
         for ( ScmLogger logger : listeners )
@@ -65,6 +68,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void error( String content, Throwable error )
     {
         for ( ScmLogger logger : listeners )
@@ -74,6 +78,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void error( String content )
     {
         for ( ScmLogger logger : listeners )
@@ -83,6 +88,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void error( Throwable error )
     {
         for ( ScmLogger logger : listeners )
@@ -92,6 +98,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void info( String content, Throwable error )
     {
         for ( ScmLogger logger : listeners )
@@ -104,6 +111,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void info( String content )
     {
         for ( ScmLogger logger : listeners )
@@ -116,6 +124,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void info( Throwable error )
     {
         for ( ScmLogger logger : listeners )
@@ -128,6 +137,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public boolean isDebugEnabled()
     {
         for ( ScmLogger logger : listeners )
@@ -142,6 +152,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public boolean isErrorEnabled()
     {
         for ( ScmLogger logger : listeners )
@@ -156,6 +167,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public boolean isInfoEnabled()
     {
         for ( ScmLogger logger : listeners )
@@ -170,6 +182,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public boolean isWarnEnabled()
     {
         for ( ScmLogger logger : listeners )
@@ -184,6 +197,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void warn( String content, Throwable error )
     {
         for ( ScmLogger logger : listeners )
@@ -193,6 +207,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void warn( String content )
     {
         for ( ScmLogger logger : listeners )
@@ -202,6 +217,7 @@ public class ScmLogDispatcher
     }
 
     /** {@inheritDoc} */
+    @Override
     public void warn( Throwable error )
     {
         for ( ScmLogger logger : listeners )
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/log/Slf4jScmLogger.java b/maven-scm-api/src/main/java/org/apache/maven/scm/log/Slf4jScmLogger.java
new file mode 100644
index 000000000..7212a6d4e
--- /dev/null
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/log/Slf4jScmLogger.java
@@ -0,0 +1,195 @@
+package org.apache.maven.scm.log;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static java.util.Objects.requireNonNull;
+
+/**
+ * {@link ScmLogger} backed by Slf4j.
+ *
+ * @since TBD
+ */
+public class Slf4jScmLogger
+    implements ScmLogger
+{
+    private final Logger logger;
+
+    public Slf4jScmLogger()
+    {
+        this( Slf4jScmLogger.class );
+    }
+
+    public Slf4jScmLogger( final Class<?> owner )
+    {
+        this( LoggerFactory.getLogger( owner ) );
+    }
+
+    public Slf4jScmLogger( final Logger logger )
+    {
+        this.logger = requireNonNull( logger );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isDebugEnabled()
+    {
+        return this.logger.isDebugEnabled();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void debug( String content )
+    {
+        this.logger.debug( content );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void debug( String content, Throwable error )
+    {
+        this.logger.debug( content, error );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void debug( Throwable error )
+    {
+        this.logger.debug( "", error );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isInfoEnabled()
+    {
+        return this.logger.isInfoEnabled();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void info( String content )
+    {
+        this.logger.info( content );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void info( String content, Throwable error )
+    {
+        this.logger.info( content, error );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void info( Throwable error )
+    {
+        this.logger.info( "", error );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isWarnEnabled()
+    {
+        return this.logger.isWarnEnabled();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void warn( String content )
+    {
+        this.logger.warn( content );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void warn( String content, Throwable error )
+    {
+        this.logger.warn( content, error );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void warn( Throwable error )
+    {
+        this.logger.warn( "", error );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isErrorEnabled()
+    {
+        return this.logger.isErrorEnabled();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void error( String content )
+    {
+        this.logger.error( content );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void error( String content, Throwable error )
+    {
+        this.logger.error( content, error );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void error( Throwable error )
+    {
+        this.logger.error( "", error );
+    }
+}
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java b/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java
index 7e06bcdbc..67783ff1e 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java
@@ -19,6 +19,13 @@ package org.apache.maven.scm.manager;
  * under the License.
  */
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 import org.apache.maven.scm.ScmBranch;
 import org.apache.maven.scm.ScmBranchParameters;
 import org.apache.maven.scm.ScmException;
@@ -44,47 +51,44 @@ import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.command.unedit.UnEditScmResult;
 import org.apache.maven.scm.command.update.UpdateScmResult;
 import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.log.Slf4jScmLogger;
 import org.apache.maven.scm.provider.ScmProvider;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.ScmUrlUtils;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.apache.maven.scm.repository.UnknownRepositoryStructure;
+import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
+import static java.util.Objects.requireNonNull;
 
 /**
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- *
  */
 public abstract class AbstractScmManager
-    implements ScmManager
+        implements ScmManager
 {
-    private Map<String, ScmProvider> scmProviders = new HashMap<String, ScmProvider>();
+    private final ScmLogger logger = new Slf4jScmLogger( LoggerFactory.getLogger( getClass() ) );
 
-    private ScmLogger logger;
+    private final Map<String, ScmProvider> scmProviders = new ConcurrentHashMap<>();
 
-    private Map<String, String> userProviderTypes = new HashMap<String, String>();
+    private final Map<String, String> userProviderTypes = new ConcurrentHashMap<>();
 
     protected void setScmProviders( Map<String, ScmProvider> providers )
     {
-        this.scmProviders = providers;
+        requireNonNull( providers );
+        this.scmProviders.clear();
+        providers.forEach( this::setScmProvider );
     }
 
     /**
-     * @deprecated use {@link #setScmProvider(String, ScmProvider)} instead
-
      * @param providerType the type of SCM, eg. <code>svn</code>, <code>git</code>
      * @param provider     the provider that will be used for that SCM type
+     * @deprecated use {@link #setScmProvider(String, ScmProvider)} instead
      */
+    @Deprecated
     protected void addScmProvider( String providerType, ScmProvider provider )
     {
         setScmProvider( providerType, provider );
@@ -97,12 +101,19 @@ public abstract class AbstractScmManager
      * @param providerType the type of SCM, eg. <code>svn</code>, <code>git</code>
      * @param provider     the provider that will be used for that SCM type
      */
+    @Override
     public void setScmProvider( String providerType, ScmProvider provider )
     {
+        requireNonNull( providerType );
+        requireNonNull( provider );
+        provider.addListener( logger );
         scmProviders.put( providerType, provider );
     }
 
-    protected abstract ScmLogger getScmLogger();
+    protected ScmLogger getScmLogger()
+    {
+        return logger;
+    }
 
     // ----------------------------------------------------------------------
     // ScmManager Implementation
@@ -111,13 +122,11 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ScmProvider getProviderByUrl( String scmUrl )
-        throws ScmRepositoryException, NoSuchScmProviderException
+            throws ScmRepositoryException, NoSuchScmProviderException
     {
-        if ( scmUrl == null )
-        {
-            throw new NullPointerException( "The scm url cannot be null." );
-        }
+        requireNonNull( scmUrl, "The scm url cannot be null." );
 
         String providerType = ScmUrlUtils.getProvider( scmUrl );
 
@@ -127,41 +136,26 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public void setScmProviderImplementation( String providerType, String providerImplementation )
     {
+        requireNonNull( providerType );
+        requireNonNull( providerImplementation );
         userProviderTypes.put( providerType, providerImplementation );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public ScmProvider getProviderByType( String providerType )
-        throws NoSuchScmProviderException
+            throws NoSuchScmProviderException
     {
-        if ( logger == null )
-        {
-            logger = getScmLogger();
-
-            for ( Entry<String, ScmProvider> entry : scmProviders.entrySet() )
-            {
-                ScmProvider p = entry.getValue();
-
-                p.addListener( logger );
-            }
-        }
-
         String usedProviderType = System.getProperty( "maven.scm.provider." + providerType + ".implementation" );
 
         if ( usedProviderType == null )
         {
-            if ( userProviderTypes.containsKey( providerType ) )
-            {
-                usedProviderType = userProviderTypes.get( providerType );
-            }
-            else
-            {
-                usedProviderType = providerType;
-            }
+            usedProviderType = userProviderTypes.getOrDefault( providerType, providerType );
         }
 
         ScmProvider scmProvider = scmProviders.get( usedProviderType );
@@ -177,8 +171,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ScmProvider getProviderByRepository( ScmRepository repository )
-        throws NoSuchScmProviderException
+            throws NoSuchScmProviderException
     {
         return getProviderByType( repository.getProvider() );
     }
@@ -190,13 +185,11 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ScmRepository makeScmRepository( String scmUrl )
-        throws ScmRepositoryException, NoSuchScmProviderException
+            throws ScmRepositoryException, NoSuchScmProviderException
     {
-        if ( scmUrl == null )
-        {
-            throw new NullPointerException( "The scm url cannot be null." );
-        }
+        requireNonNull( scmUrl, "The scm url cannot be null." );
 
         char delimiter = ScmUrlUtils.getDelimiter( scmUrl ).charAt( 0 );
 
@@ -219,10 +212,7 @@ public abstract class AbstractScmManager
      */
     protected String cleanScmUrl( String scmUrl )
     {
-        if ( scmUrl == null )
-        {
-            throw new NullPointerException( "The scm url cannot be null." );
-        }
+        requireNonNull( scmUrl, "The scm url cannot be null." );
 
         String pathSeparator = "";
 
@@ -271,13 +261,11 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ScmRepository makeProviderScmRepository( String providerType, File path )
-        throws ScmRepositoryException, UnknownRepositoryStructure, NoSuchScmProviderException
+            throws ScmRepositoryException, UnknownRepositoryStructure, NoSuchScmProviderException
     {
-        if ( providerType == null )
-        {
-            throw new NullPointerException( "The provider type cannot be null." );
-        }
+        requireNonNull( providerType, "The provider type cannot be null." );
 
         ScmProvider provider = getProviderByType( providerType );
 
@@ -289,11 +277,10 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public List<String> validateScmRepository( String scmUrl )
     {
-        List<String> messages = new ArrayList<String>();
-
-        messages.addAll( ScmUrlUtils.validate( scmUrl ) );
+        List<String> messages = new ArrayList<>( ScmUrlUtils.validate( scmUrl ) );
 
         String providerType = ScmUrlUtils.getProvider( scmUrl );
 
@@ -313,12 +300,9 @@ public abstract class AbstractScmManager
         String scmSpecificUrl = cleanScmUrl( scmUrl.substring( providerType.length() + 5 ) );
 
         List<String> providerMessages =
-            provider.validateScmUrl( scmSpecificUrl, ScmUrlUtils.getDelimiter( scmUrl ).charAt( 0 ) );
+                provider.validateScmUrl( scmSpecificUrl, ScmUrlUtils.getDelimiter( scmUrl ).charAt( 0 ) );
 
-        if ( providerMessages == null )
-        {
-            throw new RuntimeException( "The SCM provider cannot return null from validateScmUrl()." );
-        }
+        requireNonNull( providerMessages, "The SCM provider cannot return null from validateScmUrl()." );
 
         messages.addAll( providerMessages );
 
@@ -328,8 +312,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public AddScmResult add( ScmRepository repository, ScmFileSet fileSet )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).add( repository, fileSet );
     }
@@ -337,8 +322,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public AddScmResult add( ScmRepository repository, ScmFileSet fileSet, String message )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).add( repository, fileSet, message );
     }
@@ -346,52 +332,57 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName )
-        throws ScmException
+            throws ScmException
     {
         ScmBranchParameters scmBranchParameters = new ScmBranchParameters( "" );
         return this.getProviderByRepository( repository ).branch( repository, fileSet, branchName,
-                                                                  scmBranchParameters );
+                scmBranchParameters );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, String message )
-        throws ScmException
+            throws ScmException
     {
         ScmBranchParameters scmBranchParameters = new ScmBranchParameters( message );
         return this.getProviderByRepository( repository ).branch( repository, fileSet, branchName,
-                                                                  scmBranchParameters );
+                scmBranchParameters );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                          int numDays, ScmBranch branch )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).changeLog( repository, fileSet, startDate, endDate, numDays,
-                                                                     branch );
+                branch );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                          int numDays, ScmBranch branch, String datePattern )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).changeLog( repository, fileSet, startDate, endDate, numDays,
-                                                                     branch, datePattern );
+                branch, datePattern );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ChangeLogScmRequest scmRequest )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( scmRequest.getScmRepository() ).changeLog( scmRequest );
     }
@@ -399,9 +390,10 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                          ScmVersion endVersion )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).changeLog( repository, fileSet, startVersion, endVersion );
     }
@@ -409,19 +401,21 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startRevision,
                                          ScmVersion endRevision, String datePattern )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).changeLog( repository, fileSet, startRevision, endRevision,
-                                                                     datePattern );
+                datePattern );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String message )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).checkIn( repository, fileSet, message );
     }
@@ -429,8 +423,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, ScmVersion revision, String message )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).checkIn( repository, fileSet, revision, message );
     }
@@ -438,8 +433,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).checkOut( repository, fileSet );
     }
@@ -447,8 +443,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).checkOut( repository, fileSet, version );
     }
@@ -456,8 +453,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, boolean recursive )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).checkOut( repository, fileSet, recursive );
     }
@@ -465,9 +463,10 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion version,
                                        boolean recursive )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).checkOut( repository, fileSet, version, recursive );
     }
@@ -475,9 +474,10 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                ScmVersion endVersion )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).diff( repository, fileSet, startVersion, endVersion );
     }
@@ -485,8 +485,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public EditScmResult edit( ScmRepository repository, ScmFileSet fileSet )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).edit( repository, fileSet );
     }
@@ -494,8 +495,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).export( repository, fileSet );
     }
@@ -503,8 +505,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).export( repository, fileSet, version );
     }
@@ -512,19 +515,21 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String outputDirectory )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).export( repository, fileSet, (ScmVersion) null,
-                                                                  outputDirectory );
+                outputDirectory );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion version,
                                    String outputDirectory )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).export( repository, fileSet, version, outputDirectory );
     }
@@ -532,8 +537,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).list( repository, fileSet, recursive, version );
     }
@@ -541,8 +547,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public MkdirScmResult mkdir( ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).mkdir( repository, fileSet, message, createInLocal );
     }
@@ -550,8 +557,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).remove( repository, fileSet, message );
     }
@@ -559,8 +567,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public StatusScmResult status( ScmRepository repository, ScmFileSet fileSet )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).status( repository, fileSet );
     }
@@ -568,8 +577,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName )
-        throws ScmException
+            throws ScmException
     {
         return this.tag( repository, fileSet, tagName, "" );
     }
@@ -577,8 +587,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message )
-        throws ScmException
+            throws ScmException
     {
         ScmTagParameters scmTagParameters = new ScmTagParameters( message );
         return this.getProviderByRepository( repository ).tag( repository, fileSet, tagName, scmTagParameters );
@@ -587,8 +598,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UnEditScmResult unedit( ScmRepository repository, ScmFileSet fileSet )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).unedit( repository, fileSet );
     }
@@ -596,8 +608,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet );
     }
@@ -605,8 +618,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, version );
     }
@@ -614,8 +628,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, boolean runChangelog )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, runChangelog );
     }
@@ -623,9 +638,10 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version,
                                    boolean runChangelog )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, version, runChangelog );
     }
@@ -633,8 +649,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String datePattern )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, (ScmVersion) null, datePattern );
     }
@@ -642,9 +659,10 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version,
                                    String datePattern )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, version, datePattern );
     }
@@ -652,8 +670,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, Date lastUpdate )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, (ScmVersion) null, lastUpdate );
     }
@@ -661,8 +680,9 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, version, lastUpdate );
     }
@@ -670,35 +690,39 @@ public abstract class AbstractScmManager
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, Date lastUpdate, String datePattern )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, (ScmVersion) null, lastUpdate,
-                                                                  datePattern );
+                datePattern );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate,
                                    String datePattern )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).update( repository, fileSet, version, lastUpdate,
-                                                                  datePattern );
+                datePattern );
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     public BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( repository ).blame( repository, fileSet, filename );
     }
 
+    @Override
     public BlameScmResult blame( BlameScmRequest blameScmRequest )
-        throws ScmException
+            throws ScmException
     {
         return this.getProviderByRepository( blameScmRequest.getScmRepository() ).blame( blameScmRequest );
     }
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/manager/BasicScmManager.java b/maven-scm-api/src/main/java/org/apache/maven/scm/manager/BasicScmManager.java
index 2af520462..31eef8ecf 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/manager/BasicScmManager.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/manager/BasicScmManager.java
@@ -19,9 +19,6 @@ package org.apache.maven.scm.manager;
  * under the License.
  */
 
-import org.apache.maven.scm.log.DefaultLog;
-import org.apache.maven.scm.log.ScmLogger;
-
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  *
@@ -29,10 +26,4 @@ import org.apache.maven.scm.log.ScmLogger;
 public class BasicScmManager
     extends AbstractScmManager
 {
-    /** {@inheritDoc} */
-    @Deprecated
-    protected ScmLogger getScmLogger()
-    {
-        return new DefaultLog();
-    }
 }
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/manager/NoSuchScmProviderException.java b/maven-scm-api/src/main/java/org/apache/maven/scm/manager/NoSuchScmProviderException.java
index c2ed2be5a..9b1ad888f 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/manager/NoSuchScmProviderException.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/manager/NoSuchScmProviderException.java
@@ -21,6 +21,8 @@ package org.apache.maven.scm.manager;
 
 import org.apache.maven.scm.ScmException;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -31,13 +33,12 @@ public class NoSuchScmProviderException
 {
     static final long serialVersionUID = 4770645185214496323L;
 
-    private String providerName;
+    private final String providerName;
 
     public NoSuchScmProviderException( String providerName )
     {
         super( "No such provider: '" + providerName + "'." );
-
-        this.providerName = providerName;
+        this.providerName = requireNonNull( providerName );
     }
 
     public String getProviderName()
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java b/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
index f125b9a74..518e44235 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
@@ -59,8 +59,6 @@ import java.util.List;
  */
 public interface ScmManager
 {
-    String ROLE = ScmManager.class.getName();
-
     // ----------------------------------------------------------------------
     // Repository
     // ----------------------------------------------------------------------
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
index de30c6f4a..fffcad4ee 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
@@ -72,7 +72,7 @@ import java.util.List;
 public abstract class AbstractScmProvider
     implements ScmProvider
 {
-    private ScmLogDispatcher logDispatcher = new ScmLogDispatcher();
+    private final ScmLogDispatcher logDispatcher = new ScmLogDispatcher();
 
     // ----------------------------------------------------------------------
     //
@@ -81,6 +81,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public String getScmSpecificFilename()
     {
         return null;
@@ -89,6 +90,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public String sanitizeTagName( String tag )
     {
         /* by default, we assume all tags are valid. */
@@ -98,6 +100,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public boolean validateTagName( String tag )
     {
         /* by default, we assume all tags are valid. */
@@ -107,6 +110,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public List<String> validateScmUrl( String scmSpecificUrl, char delimiter )
     {
         List<String> messages = new ArrayList<String>();
@@ -126,6 +130,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public boolean requiresEditMode()
     {
         return false;
@@ -138,6 +143,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public AddScmResult add( ScmRepository repository, ScmFileSet fileSet )
         throws ScmException
     {
@@ -147,6 +153,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public AddScmResult add( ScmRepository repository, ScmFileSet fileSet, String message )
         throws ScmException
     {
@@ -163,6 +170,7 @@ public abstract class AbstractScmProvider
         return add( repository.getProviderRepository(), fileSet, parameters );
     }
 
+    @Override
     public AddScmResult add( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
@@ -178,6 +186,9 @@ public abstract class AbstractScmProvider
         return add( repository.getProviderRepository(), fileSet, parameters );
     }
 
+    /**
+     * TODO: why public? This should be protected, no?
+     */
     public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
@@ -187,6 +198,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName )
         throws ScmException
     {
@@ -196,6 +208,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, String message )
         throws ScmException
     {
@@ -209,6 +222,7 @@ public abstract class AbstractScmProvider
         return branch( repository, fileSet, branchName, scmBranchParameters );
     }
 
+    @Override
     public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName,
                                    ScmBranchParameters scmBranchParameters )
         throws ScmException
@@ -236,6 +250,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                          int numDays, String branch )
         throws ScmException
@@ -248,6 +264,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                          int numDays, String branch, String datePattern )
         throws ScmException
@@ -265,6 +283,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                          int numDays, ScmBranch branch )
         throws ScmException
@@ -275,6 +294,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                          int numDays, ScmBranch branch, String datePattern )
         throws ScmException
@@ -290,6 +310,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ChangeLogScmRequest request )
         throws ScmException
     {
@@ -305,6 +326,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag )
         throws ScmException
     {
@@ -316,6 +339,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag,
                                          String datePattern )
         throws ScmException
@@ -339,6 +364,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                          ScmVersion endVersion )
         throws ScmException
@@ -349,6 +375,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                          ScmVersion endVersion, String datePattern )
         throws ScmException
@@ -379,6 +406,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String tag, String message )
         throws ScmException
     {
@@ -395,6 +424,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String message )
         throws ScmException
     {
@@ -404,6 +434,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
                                      String message )
         throws ScmException
@@ -432,6 +463,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, String tag )
         throws ScmException
     {
@@ -443,6 +476,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, String tag, boolean recursive )
         throws ScmException
     {
@@ -459,6 +494,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet )
         throws ScmException
     {
@@ -468,6 +504,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
         throws ScmException
     {
@@ -477,6 +514,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, boolean recursive )
         throws ScmException
     {
@@ -486,6 +524,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
                                        boolean recursive )
         throws ScmException
@@ -527,6 +566,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, String startRevision, String endRevision )
         throws ScmException
     {
@@ -549,6 +590,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                ScmVersion endVersion )
         throws ScmException
@@ -573,6 +615,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public EditScmResult edit( ScmRepository repository, ScmFileSet fileSet )
         throws ScmException
     {
@@ -599,6 +642,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag )
         throws ScmException
     {
@@ -610,6 +655,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag, String outputDirectory )
         throws ScmException
     {
@@ -626,6 +673,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet )
         throws ScmException
     {
@@ -635,6 +683,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
         throws ScmException
     {
@@ -644,6 +693,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
                                    String outputDirectory )
         throws ScmException
@@ -669,6 +719,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, String tag )
         throws ScmException
     {
@@ -685,6 +736,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion scmVersion )
         throws ScmException
     {
@@ -721,6 +773,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public MkdirScmResult mkdir( ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal )
         throws ScmException
     {
@@ -779,6 +832,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
         throws ScmException
     {
@@ -801,6 +855,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public StatusScmResult status( ScmRepository repository, ScmFileSet fileSet )
         throws ScmException
     {
@@ -821,6 +876,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName )
         throws ScmException
     {
@@ -830,6 +886,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message )
         throws ScmException
     {
@@ -854,6 +911,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName,
                              ScmTagParameters scmTagParameters )
         throws ScmException
@@ -878,6 +936,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UnEditScmResult unedit( ScmRepository repository, ScmFileSet fileSet )
         throws ScmException
     {
@@ -903,6 +962,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UntagScmResult untag( ScmRepository repository, ScmFileSet fileSet,
         CommandParameters parameters )
         throws ScmException
@@ -916,6 +976,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag )
         throws ScmException
     {
@@ -927,6 +989,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, boolean runChangelog )
         throws ScmException
     {
@@ -936,6 +1000,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet )
         throws ScmException
     {
@@ -945,6 +1010,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
         throws ScmException
     {
@@ -954,6 +1020,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, boolean runChangelog )
         throws ScmException
     {
@@ -963,6 +1030,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
                                    boolean runChangelog )
         throws ScmException
@@ -975,6 +1043,7 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, String datePattern )
         throws ScmException
     {
@@ -984,6 +1053,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
                                    String datePattern )
         throws ScmException
@@ -1030,6 +1100,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate )
         throws ScmException
     {
@@ -1039,6 +1111,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
                                    Date lastUpdate )
         throws ScmException
@@ -1051,6 +1124,8 @@ public abstract class AbstractScmProvider
      *
      * @deprecated
      */
+    @Deprecated
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate,
                                    String datePattern )
         throws ScmException
@@ -1068,6 +1143,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion, Date lastUpdate,
                                    String datePattern )
         throws ScmException
@@ -1100,6 +1176,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
         throws ScmException
     {
@@ -1118,6 +1195,7 @@ public abstract class AbstractScmProvider
         throw new NoSuchCommandScmException( "blame" );
     }
 
+    @Override
     public BlameScmResult blame( BlameScmRequest blameScmRequest )
         throws ScmException
     {
@@ -1125,12 +1203,14 @@ public abstract class AbstractScmProvider
                       blameScmRequest.getCommandParameters() );
     }
 
+    @Override
     public InfoScmResult info( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
         return null;
     }
 
+    @Override
     public RemoteInfoScmResult remoteInfo( ScmProviderRepository repository, ScmFileSet fileSet,
                                            CommandParameters parameters )
         throws ScmException
@@ -1145,6 +1225,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public void addListener( ScmLogger logger )
     {
         logDispatcher.addListener( logger );
@@ -1158,6 +1239,7 @@ public abstract class AbstractScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public ScmProviderRepository makeProviderScmRepository( File path )
         throws ScmRepositoryException, UnknownRepositoryStructure
     {
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
index d7e69e979..219e2f115 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
@@ -62,8 +62,6 @@ import java.util.List;
  */
 public interface ScmProvider
 {
-    String ROLE = ScmProvider.class.getName();
-
     String getScmType();
 
     /**
@@ -71,7 +69,6 @@ public interface ScmProvider
      *
      * @param logger The logger
      */
-    @Deprecated
     void addListener( ScmLogger logger );
 
     boolean requiresEditMode();
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java b/maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java
index 8069101dc..20e30f5ca 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java
@@ -29,6 +29,8 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Locale;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  *
@@ -36,7 +38,7 @@ import java.util.Locale;
 public abstract class AbstractConsumer
     implements StreamConsumer
 {
-    private ScmLogger logger;
+    private final ScmLogger logger;
 
     /**
      * AbstractConsumer constructor.
@@ -45,7 +47,7 @@ public abstract class AbstractConsumer
      */
     public AbstractConsumer( ScmLogger logger )
     {
-        setLogger( logger );
+        this.logger = requireNonNull( logger );
     }
 
     public ScmLogger getLogger()
@@ -53,11 +55,6 @@ public abstract class AbstractConsumer
         return logger;
     }
 
-    public void setLogger( ScmLogger logger )
-    {
-        this.logger = logger;
-    }
-
     /**
      * Converts the date timestamp from the output into a date object.
      *
diff --git a/maven-scm-client/pom.xml b/maven-scm-client/pom.xml
index 553ff1d76..533bd7c98 100644
--- a/maven-scm-client/pom.xml
+++ b/maven-scm-client/pom.xml
@@ -57,28 +57,30 @@
       <artifactId>maven-scm-provider-svnexe</artifactId>
     </dependency>
     <!-- end providers declaration -->
+
+    <!-- runtime bits needed to construct Plexus -->
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-classworlds</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-component-annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.sisu</groupId>
+      <artifactId>org.eclipse.sisu.plexus</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.google.inject</groupId>
+      <artifactId>guice</artifactId>
+      <classifier>no_aop</classifier>
+      <scope>runtime</scope>
+    </dependency>
   </dependencies>
 
   <build>
     <plugins>
-      <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <executions>
-          <execution>
-            <id>merge</id>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/resources/META-INF/plexus/components.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>merge-metadata</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-assembly-plugin</artifactId>
diff --git a/maven-scm-client/src/main/java/org/apache/maven/scm/client/cli/MavenScmCli.java b/maven-scm-client/src/main/java/org/apache/maven/scm/client/cli/MavenScmCli.java
index 66a281eaa..c9964e3bf 100644
--- a/maven-scm-client/src/main/java/org/apache/maven/scm/client/cli/MavenScmCli.java
+++ b/maven-scm-client/src/main/java/org/apache/maven/scm/client/cli/MavenScmCli.java
@@ -37,7 +37,14 @@ import org.apache.maven.scm.manager.NoSuchScmProviderException;
 import org.apache.maven.scm.manager.ScmManager;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
-import org.codehaus.plexus.embed.Embedder;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.DefaultContainerConfiguration;
+import org.codehaus.plexus.DefaultPlexusContainer;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.PlexusContainerException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.DefaultContext;
 import org.codehaus.plexus.util.StringUtils;
 
 /**
@@ -47,7 +54,7 @@ import org.codehaus.plexus.util.StringUtils;
  */
 public class MavenScmCli
 {
-    private Embedder plexus;
+    private PlexusContainer plexus;
 
     private ScmManager scmManager;
 
@@ -58,18 +65,40 @@ public class MavenScmCli
     public MavenScmCli()
         throws Exception
     {
-        plexus = new Embedder();
-
-        plexus.start();
+        plexus = createPlexusContainer();
+        scmManager = plexus.lookup( ScmManager.class );
+    }
 
-        scmManager = (ScmManager) plexus.lookup( ScmManager.ROLE );
+    /**
+     * Method that creates Plexus container: we must create a Plexus container, as we must pick up any possible
+     * Plexus XML component definition (not used since Maven 3.8.1, but present in older Mavens).
+     */
+    private PlexusContainer createPlexusContainer() {
+        final Context context = new DefaultContext();
+        String path = System.getProperty( "basedir" );
+        if (path == null) {
+            path = new File( "" ).getAbsolutePath();
+        }
+        context.put( "basedir", path );
+
+        ContainerConfiguration plexusConfiguration = new DefaultContainerConfiguration();
+        plexusConfiguration.setName( "maven-scm-cli" )
+                .setContext( context.getContextData() )
+                .setClassPathScanning( PlexusConstants.SCANNING_CACHE )
+                .setAutoWiring( true );
+        try {
+            return new DefaultPlexusContainer( plexusConfiguration );
+        }
+        catch ( PlexusContainerException e ) {
+            throw new IllegalStateException( "Could not create Plexus container", e );
+        }
     }
 
     public void stop()
     {
         try
         {
-            plexus.stop();
+            plexus.dispose();
         }
         catch ( Exception ex )
         {
diff --git a/maven-scm-client/src/main/resources/META-INF/plexus/components.xml b/maven-scm-client/src/main/resources/META-INF/plexus/components.xml
deleted file mode 100644
index e9b9d94be..000000000
--- a/maven-scm-client/src/main/resources/META-INF/plexus/components.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<component-set>
-  <components>
-    <component>
-      <role>org.apache.maven.scm.manager.ScmManager</role>
-      <implementation>org.apache.maven.scm.manager.plexus.DefaultScmManager</implementation>
-      <requirements>
-        <requirement>
-          <role>org.apache.maven.scm.provider.ScmProvider</role>
-          <field-name>scmProviders</field-name>
-        </requirement>
-      </requirements>
-    </component>
-
-    <component>
-      <role>org.apache.maven.scm.provider.ScmProvider</role>
-      <role-hint>hg</role-hint>
-      <implementation>org.apache.maven.scm.provider.hg.HgScmProvider</implementation>
-      <description>Mercurial (Hg) is a decentralized revision control system.</description>
-    </component>
-    <component>
-      <role>org.apache.maven.scm.provider.ScmProvider</role>
-      <role-hint>local</role-hint>
-      <implementation>org.apache.maven.scm.provider.local.LocalScmProvider</implementation>
-    </component>
-    <component>
-      <role>org.apache.maven.scm.provider.ScmProvider</role>
-      <role-hint>git</role-hint>
-      <implementation>org.apache.maven.scm.provider.git.gitexe.GitExeScmProvider</implementation>
-    </component>
-    <component>
-      <role>org.apache.maven.scm.provider.ScmProvider</role>
-      <role-hint>svn</role-hint>
-      <implementation>org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider</implementation>
-    </component>
-  </components>
-</component-set>
diff --git a/maven-scm-managers/maven-scm-manager-plexus/pom.xml b/maven-scm-managers/maven-scm-manager-plexus/pom.xml
index 6548b95cd..58bc4af22 100644
--- a/maven-scm-managers/maven-scm-manager-plexus/pom.xml
+++ b/maven-scm-managers/maven-scm-manager-plexus/pom.xml
@@ -35,8 +35,12 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-container-default</artifactId>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.sisu</groupId>
+      <artifactId>org.eclipse.sisu.plexus</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
@@ -44,21 +48,21 @@
     </dependency>
   </dependencies>
   
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <executions>
-          <execution>
-            <id>create-component-descriptor</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>generate-metadata</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+<!--  <build>-->
+<!--    <plugins>-->
+<!--      <plugin>-->
+<!--        <groupId>org.codehaus.plexus</groupId>-->
+<!--        <artifactId>plexus-component-metadata</artifactId>-->
+<!--        <executions>-->
+<!--          <execution>-->
+<!--            <id>create-component-descriptor</id>-->
+<!--            <phase>generate-resources</phase>-->
+<!--            <goals>-->
+<!--              <goal>generate-metadata</goal>-->
+<!--            </goals>-->
+<!--          </execution>-->
+<!--        </executions>-->
+<!--      </plugin>-->
+<!--    </plugins>-->
+<!--  </build>-->
 </project>
diff --git a/maven-scm-managers/maven-scm-manager-plexus/src/main/java/org/apache/maven/scm/manager/plexus/DefaultScmManager.java b/maven-scm-managers/maven-scm-manager-plexus/src/main/java/org/apache/maven/scm/manager/plexus/DefaultScmManager.java
index 6066519bb..ff9e079ec 100644
--- a/maven-scm-managers/maven-scm-manager-plexus/src/main/java/org/apache/maven/scm/manager/plexus/DefaultScmManager.java
+++ b/maven-scm-managers/maven-scm-manager-plexus/src/main/java/org/apache/maven/scm/manager/plexus/DefaultScmManager.java
@@ -19,97 +19,37 @@ package org.apache.maven.scm.manager.plexus;
  * under the License.
  */
 
-import org.apache.maven.scm.log.ScmLogger;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.scm.manager.AbstractScmManager;
 import org.apache.maven.scm.provider.ScmProvider;
-import org.codehaus.plexus.logging.LogEnabled;
-import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 
-import java.util.HashMap;
 import java.util.Map;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  * @author Olivier Lamy
- *
- * @plexus.component role="org.apache.maven.scm.manager.ScmManager"
  */
+@Singleton
+@Named
 public class DefaultScmManager
     extends AbstractScmManager
-    implements Initializable, LogEnabled
 {
-    /**
-     * @plexus.requirement role="org.apache.maven.scm.provider.ScmProvider"
-     */
-    private Map<String, ScmProvider> scmProviders;
-
-    private Logger logger;
-
-    // ----------------------------------------------------------------------
-    // LogEnabled implementation
-    // ----------------------------------------------------------------------
-
-    public void enableLogging( Logger logger )
-    {
-        this.logger = logger;
-    }
-
-    protected Logger getLogger()
-    {
-        return logger;
-    }
-
-    protected void setupLogger( Object component )
-    {
-        setupLogger( component, logger );
-    }
-
-    protected void setupLogger( Object component, String subCategory )
-    {
-        if ( subCategory == null )
-        {
-            throw new IllegalStateException( "Logging category must be defined." );
-        }
-
-        Logger logger = this.logger.getChildLogger( subCategory );
-
-        setupLogger( component, logger );
-    }
-
-    protected void setupLogger( Object component, Logger logger )
+    @Inject
+    public DefaultScmManager( Map<String, ScmProvider> scmProviders )
     {
-        if ( component instanceof LogEnabled )
+        requireNonNull( scmProviders );
+        if ( scmProviders.isEmpty() )
         {
-            ( (LogEnabled) component ).enableLogging( logger );
-        }
-    }
-
-    // ----------------------------------------------------------------------
-    // Component Lifecycle
-    // ----------------------------------------------------------------------
-
-    /** {@inheritDoc} */
-    public void initialize()
-    {
-        if ( scmProviders == null )
-        {
-            scmProviders = new HashMap<String, ScmProvider>( 0 );
-        }
-
-        if ( getLogger().isWarnEnabled() && scmProviders.size() == 0 )
-        {
-            getLogger().warn( "No SCM providers configured." );
+            getScmLogger().warn( "No SCM providers configured." );
         }
 
         setScmProviders( scmProviders );
     }
-
-    /** {@inheritDoc} */
-    protected ScmLogger getScmLogger()
-    {
-        return new PlexusLogger( getLogger() );
-    }
 }
diff --git a/maven-scm-managers/maven-scm-manager-plexus/src/main/java/org/apache/maven/scm/manager/plexus/PlexusLogger.java b/maven-scm-managers/maven-scm-manager-plexus/src/main/java/org/apache/maven/scm/manager/plexus/PlexusLogger.java
deleted file mode 100644
index 1d257281d..000000000
--- a/maven-scm-managers/maven-scm-manager-plexus/src/main/java/org/apache/maven/scm/manager/plexus/PlexusLogger.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.apache.maven.scm.manager.plexus;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.scm.log.ScmLogger;
-import org.codehaus.plexus.logging.Logger;
-
-/**
- * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- *
- */
-@Deprecated
-public class PlexusLogger
-    implements ScmLogger
-{
-    private Logger logger;
-
-    public PlexusLogger( Logger logger )
-    {
-        this.logger = logger;
-    }
-
-    /** {@inheritDoc} */
-    public boolean isDebugEnabled()
-    {
-        return logger.isDebugEnabled();
-    }
-
-    /** {@inheritDoc} */
-    public void debug( String content )
-    {
-        logger.debug( content );
-    }
-
-    /** {@inheritDoc} */
-    public void debug( String content, Throwable error )
-    {
-        logger.debug( content, error );
-    }
-
-    /** {@inheritDoc} */
-    public void debug( Throwable error )
-    {
-        logger.debug( "", error );
-    }
-
-    /** {@inheritDoc} */
-    public boolean isInfoEnabled()
-    {
-        return logger.isInfoEnabled();
-    }
-
-    /** {@inheritDoc} */
-    public void info( String content )
-    {
-        logger.info( content );
-    }
-
-    /** {@inheritDoc} */
-    public void info( String content, Throwable error )
-    {
-        logger.info( content, error );
-    }
-
-    /** {@inheritDoc} */
-    public void info( Throwable error )
-    {
-        logger.info( "", error );
-    }
-
-    /** {@inheritDoc} */
-    public boolean isWarnEnabled()
-    {
-        return logger.isWarnEnabled();
-    }
-
-    /** {@inheritDoc} */
-    public void warn( String content )
-    {
-        logger.warn( content );
-    }
-
-    /** {@inheritDoc} */
-    public void warn( String content, Throwable error )
-    {
-        logger.warn( content, error );
-    }
-
-    /** {@inheritDoc} */
-    public void warn( Throwable error )
-    {
-        logger.warn( "", error );
-    }
-
-    /** {@inheritDoc} */
-    public boolean isErrorEnabled()
-    {
-        return logger.isErrorEnabled();
-    }
-
-    /** {@inheritDoc} */
-    public void error( String content )
-    {
-        logger.error( content );
-    }
-
-    /** {@inheritDoc} */
-    public void error( String content, Throwable error )
-    {
-        logger.error( content, error );
-    }
-
-    /** {@inheritDoc} */
-    public void error( Throwable error )
-    {
-        logger.error( "", error );
-    }
-}
diff --git a/maven-scm-plugin/pom.xml b/maven-scm-plugin/pom.xml
index e6941441b..89a0b139b 100644
--- a/maven-scm-plugin/pom.xml
+++ b/maven-scm-plugin/pom.xml
@@ -55,6 +55,12 @@
       <version>${mavenVersion}</version>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-artifact</artifactId>
+      <version>${mavenVersion}</version>
+      <scope>provided</scope>
+    </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-compat</artifactId>
@@ -98,11 +104,11 @@
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>file-management</artifactId>
-      <version>1.2.1</version>
+      <version>3.0.0</version>
     </dependency>
 
     <dependency>
-      <groupId>org.sonatype.plexus</groupId>
+      <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-sec-dispatcher</artifactId>
     </dependency>
 
@@ -140,6 +146,7 @@
   <build>
     <plugins>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-invoker-plugin</artifactId>
         <configuration>
           <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
@@ -189,18 +196,11 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-plugin-plugin</artifactId>
-          <version>${mavenPluginToolsVersion}</version>
+          <version>3.6.4</version>
           <configuration>
             <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
           </configuration>
           <executions>
-            <execution>
-              <id>mojo-descriptor</id>
-              <phase>process-classes</phase>
-              <goals>
-                <goal>descriptor</goal>
-              </goals>
-            </execution>
             <execution>
               <id>help-goal</id>
               <goals>
@@ -218,7 +218,6 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-plugin-plugin</artifactId>
-        <version>${mavenPluginToolsVersion}</version>
       </plugin>
     </plugins>
   </reporting>
diff --git a/maven-scm-providers/maven-scm-provider-hg/pom.xml b/maven-scm-providers/maven-scm-provider-hg/pom.xml
index fe860fe0f..cf4190cd9 100644
--- a/maven-scm-providers/maven-scm-provider-hg/pom.xml
+++ b/maven-scm-providers/maven-scm-provider-hg/pom.xml
@@ -48,21 +48,11 @@
     </contributor>
   </contributors>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <executions>
-          <execution>
-            <id>create-component-descriptor</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>generate-metadata</goal>
-            </goals>
-          </execution>        
-        </executions>        
-      </plugin>
-    </plugins>
-  </build>
+  <dependencies>
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+    </dependency>
+  </dependencies>
+
 </project>
diff --git a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java
index 2e233db92..5d0790475 100644
--- a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java
+++ b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java
@@ -19,6 +19,9 @@ package org.apache.maven.scm.provider.hg;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
@@ -63,10 +66,9 @@ import org.apache.maven.scm.repository.UnknownRepositoryStructure;
  * <a href="http://www.selenic.com/mercurial">http://www.selenic.com/mercurial</a>
  *
  * @author <a href="mailto:thurner.rupert@ymono.net">thurner rupert</a>
- *
- * @plexus.component role="org.apache.maven.scm.provider.ScmProvider"
- * role-hint="hg"
  */
+@Singleton
+@Named( "hg" )
 public class HgScmProvider
     extends AbstractScmProvider
 {
@@ -78,7 +80,7 @@ public class HgScmProvider
 
     private static class HgUrlParserResult
     {
-        private List<String> messages = new ArrayList<String>();
+        private final List<String> messages = new ArrayList<>();
 
         private ScmProviderRepository repository;
     }
diff --git a/maven-scm-providers/maven-scm-provider-local/pom.xml b/maven-scm-providers/maven-scm-provider-local/pom.xml
index 0fb552f9c..47146250b 100644
--- a/maven-scm-providers/maven-scm-provider-local/pom.xml
+++ b/maven-scm-providers/maven-scm-provider-local/pom.xml
@@ -33,21 +33,15 @@
   <name>Maven SCM Local Provider</name>
   <description>SCM Provider implementation for Local.</description>
 
+  <dependencies>
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+    </dependency>
+  </dependencies>
+
   <build>
     <plugins>
-      <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <executions>
-          <execution>
-            <id>create-component-descriptor</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>generate-metadata</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
       <plugin>
         <groupId>org.codehaus.modello</groupId>
         <artifactId>modello-maven-plugin</artifactId>
diff --git a/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java b/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java
index 090764fb9..4979a4d8a 100644
--- a/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java
+++ b/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java
@@ -19,6 +19,9 @@ package org.apache.maven.scm.provider.local;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
@@ -51,19 +54,21 @@ import java.io.File;
 /**
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- *
- * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="local"
  */
+@Singleton
+@Named( "local" )
 public class LocalScmProvider
     extends AbstractScmProvider
 {
     /** {@inheritDoc} */
+    @Override
     public String getScmType()
     {
         return "local";
     }
 
     /** {@inheritDoc} */
+    @Override
     public ScmProviderRepository makeProviderScmRepository( String scmSpecificUrl, char delimiter )
         throws ScmRepositoryException
     {
@@ -142,6 +147,7 @@ public class LocalScmProvider
     }
 
     /** {@inheritDoc} */
+    @Override
     public StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
@@ -153,6 +159,7 @@ public class LocalScmProvider
     }
 
     /** {@inheritDoc} */
+    @Override
     public TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
@@ -164,6 +171,7 @@ public class LocalScmProvider
     }
 
     /** {@inheritDoc} */
+    @Override
     public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
@@ -175,6 +183,7 @@ public class LocalScmProvider
     }
 
     /** {@inheritDoc} */
+    @Override
     protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet,
                                             CommandParameters parameters )
         throws ScmException
@@ -187,6 +196,7 @@ public class LocalScmProvider
     }
 
     /** {@inheritDoc} */
+    @Override
     public CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet,
                                      CommandParameters parameters )
         throws ScmException
@@ -199,6 +209,7 @@ public class LocalScmProvider
     }
 
     /** {@inheritDoc} */
+    @Override
     public CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet,
                                        CommandParameters parameters )
         throws ScmException
@@ -211,6 +222,7 @@ public class LocalScmProvider
     }
 
     /** {@inheritDoc} */
+    @Override
     protected ListScmResult list( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
@@ -222,6 +234,7 @@ public class LocalScmProvider
     }
     
     /** {@inheritDoc} */
+    @Override
     protected MkdirScmResult mkdir( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
@@ -233,6 +246,7 @@ public class LocalScmProvider
     }
 
     /** {@inheritDoc} */
+    @Override
     public UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java
index d1f231aa2..335b65f67 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java
@@ -19,10 +19,15 @@ package org.apache.maven.scm.provider.git;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.scm.provider.git.command.GitCommand;
 
 import java.io.File;
 
+@Singleton
+@Named( "git" )
 public class TestGitScmProvider
     extends AbstractGitScmProvider
 {
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/META-INF/plexus/components.xml b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/META-INF/plexus/components.xml
deleted file mode 100644
index 3e99a4fee..000000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/resources/META-INF/plexus/components.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<component-set>
-  <components>
-    <component>
-      <role>org.apache.maven.scm.provider.ScmProvider</role>
-      <role-hint>git</role-hint>
-      <implementation>org.apache.maven.scm.provider.git.TestGitScmProvider</implementation>
-    </component>
-  </components>
-</component-set>
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/pom.xml b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/pom.xml
index 3cf0b9e37..44c60590f 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/pom.xml
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/pom.xml
@@ -34,6 +34,10 @@
   <description>Executable implementation for SCM Git Provider.</description>
 
   <dependencies>
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+    </dependency>
     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
@@ -55,21 +59,4 @@
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <executions>
-          <execution>
-            <id>create-component-descriptor</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>generate-metadata</goal>
-            </goals>
-          </execution>        
-        </executions>        
-      </plugin>
-    </plugins>
-  </build>
 </project>
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
index 9cb43342b..50943c12f 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
@@ -19,6 +19,9 @@ package org.apache.maven.scm.provider.git.gitexe;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import java.io.File;
 
 import org.apache.maven.scm.ScmException;
@@ -45,9 +48,9 @@ import org.apache.maven.scm.repository.ScmRepositoryException;
 
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- *
- * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="git"
  */
+@Singleton
+@Named( "git" )
 public class GitExeScmProvider
     extends AbstractGitScmProvider
 {
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/pom.xml b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/pom.xml
index ce46192b3..de6d8af10 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/pom.xml
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/pom.xml
@@ -36,46 +36,48 @@
   </description>
 
   <dependencies>
-    <!-- Test -->
     <dependency>
-      <groupId>org.apache.maven.scm</groupId>
-      <artifactId>maven-scm-provider-git-commons</artifactId>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
-      <artifactId>maven-scm-provider-gittest</artifactId>
-      <scope>test</scope>
+      <artifactId>maven-scm-provider-git-commons</artifactId>
     </dependency>
-
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
       <version>4.5.4.201711221230-r</version>
     </dependency>
 
+    <!-- Test -->
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-provider-gittest</artifactId>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
-      <version>1.7.25</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
 
   <build>
     <plugins>
-      <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <executions>
-          <execution>
-            <id>create-component-descriptor</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>generate-metadata</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
+<!--      <plugin>-->
+<!--        <groupId>org.codehaus.plexus</groupId>-->
+<!--        <artifactId>plexus-component-metadata</artifactId>-->
+<!--        <executions>-->
+<!--          <execution>-->
+<!--            <id>create-component-descriptor</id>-->
+<!--            <phase>generate-resources</phase>-->
+<!--            <goals>-->
+<!--              <goal>generate-metadata</goal>-->
+<!--            </goals>-->
+<!--          </execution>-->
+<!--        </executions>-->
+<!--      </plugin>-->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java
index 0c6d351c9..952ebc7a7 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java
@@ -19,6 +19,9 @@ package org.apache.maven.scm.provider.git.jgit;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import java.io.File;
 
 import org.apache.maven.scm.ScmException;
@@ -26,7 +29,6 @@ import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.command.info.InfoScmResult;
 import org.apache.maven.scm.provider.git.AbstractGitScmProvider;
 import org.apache.maven.scm.provider.git.command.GitCommand;
-import org.apache.maven.scm.provider.git.command.info.GitInfoItem;
 import org.apache.maven.scm.provider.git.jgit.command.add.JGitAddCommand;
 import org.apache.maven.scm.provider.git.jgit.command.blame.JGitBlameCommand;
 import org.apache.maven.scm.provider.git.jgit.command.branch.JGitBranchCommand;
@@ -45,15 +47,17 @@ import org.apache.maven.scm.repository.ScmRepositoryException;
 /**
  * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
  * @author Dominik Bartholdi (imod)
- * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="jgit"
  * @since 1.9
  */
+@Singleton
+@Named( "jgit" )
 public class JGitScmProvider
     extends AbstractGitScmProvider
 {
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getAddCommand()
     {
         return new JGitAddCommand();
@@ -62,6 +66,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getBranchCommand()
     {
         return new JGitBranchCommand();
@@ -70,6 +75,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getChangeLogCommand()
     {
         return new JGitChangeLogCommand();
@@ -78,6 +84,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getCheckInCommand()
     {
         return new JGitCheckInCommand();
@@ -86,6 +93,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getCheckOutCommand()
     {
         return new JGitCheckOutCommand();
@@ -94,6 +102,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getDiffCommand()
     {
         return new JGitDiffCommand();
@@ -102,6 +111,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getExportCommand()
     {
         throw new UnsupportedOperationException( "getExportCommand" );
@@ -110,6 +120,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getRemoveCommand()
     {
         throw new UnsupportedOperationException( "getRemoveCommand" );
@@ -118,6 +129,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getStatusCommand()
     {
         return new JGitStatusCommand();
@@ -126,6 +138,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getTagCommand()
     {
         return new JGitTagCommand();
@@ -134,6 +147,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getUntagCommand()
     {
         return new JGitUntagCommand();
@@ -142,6 +156,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getUpdateCommand()
     {
         throw new UnsupportedOperationException( "getUpdateCommand" );
@@ -158,6 +173,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     public GitCommand getInfoCommand()
     {
         return new JGitInfoCommand();
@@ -166,6 +182,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected String getRepositoryURL( File path )
         throws ScmException
     {
@@ -181,12 +198,13 @@ public class JGitScmProvider
                     + " items returned by the info command" );
         }
 
-        return ( (GitInfoItem) result.getInfoItems().get( 0 ) ).getURL();
+        return ( result.getInfoItems().get( 0 ) ).getURL();
     }
 
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getBlameCommand()
     {
         return new JGitBlameCommand();
@@ -195,6 +213,7 @@ public class JGitScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected GitCommand getRemoteInfoCommand()
     {
         return new JGitRemoteInfoCommand();
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml
index 53730cd24..3630d31ad 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml
@@ -33,6 +33,13 @@
   <name>Maven SCM Subversion Provider - Common library</name>
   <description>Common library for SCM SVN Provider. Includes the svn-settings.xml configuration model.</description>
 
+  <dependencies>
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+    </dependency>
+  </dependencies>
+
   <build>
     <plugins>
       <plugin>
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java
index 7c7afa807..a582fbbed 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java
@@ -19,6 +19,9 @@ package org.apache.maven.scm.provider.svn;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -26,6 +29,8 @@ import org.apache.maven.scm.provider.svn.command.SvnCommand;
 
 import java.io.File;
 
+@Singleton
+@Named( "svn" )
 public class TestSvnScmProvider
     extends AbstractSvnScmProvider
 {
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/resources/META-INF/plexus/components.xml b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/resources/META-INF/plexus/components.xml
deleted file mode 100644
index 63ae5676e..000000000
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/resources/META-INF/plexus/components.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); you may not use this file except in compliance
-  ~ with the License.  You may obtain a copy of the License at
-  ~
-  ~ http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing,
-  ~ software distributed under the License is distributed on an
-  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  ~ KIND, either express or implied.  See the License for the
-  ~ specific language governing permissions and limitations
-  ~ under the License.
-  -->
-
-<component-set>
-  <components>
-    <component>
-      <role>org.apache.maven.scm.provider.ScmProvider</role>
-      <role-hint>svn</role-hint>
-      <implementation>org.apache.maven.scm.provider.svn.TestSvnScmProvider</implementation>
-    </component>
-  </components>
-</component-set>
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml
index 13cb5b488..83dcefb4e 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml
@@ -40,6 +40,10 @@
   </contributors>
 
   <dependencies>
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
       <artifactId>maven-scm-provider-svn-commons</artifactId>
@@ -62,21 +66,21 @@
 	</dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <executions>
-          <execution>
-            <id>create-component-descriptor</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>generate-metadata</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
+<!--  <build>-->
+<!--    <plugins>-->
+<!--      <plugin>-->
+<!--        <groupId>org.codehaus.plexus</groupId>-->
+<!--        <artifactId>plexus-component-metadata</artifactId>-->
+<!--        <executions>-->
+<!--          <execution>-->
+<!--            <id>create-component-descriptor</id>-->
+<!--            <phase>generate-resources</phase>-->
+<!--            <goals>-->
+<!--              <goal>generate-metadata</goal>-->
+<!--            </goals>-->
+<!--          </execution>-->
+<!--        </executions>-->
+<!--      </plugin>-->
+<!--    </plugins>-->
+<!--  </build>-->
 </project>
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
index ddf34605e..747b24cfd 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
@@ -19,6 +19,9 @@ package org.apache.maven.scm.provider.svn.svnexe;
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import java.io.File;
 
 import org.apache.maven.scm.CommandParameters;
@@ -50,15 +53,16 @@ import org.apache.maven.scm.repository.ScmRepositoryException;
 
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
- *
- * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="svn"
  */
+@Singleton
+@Named( "svn" )
 public class SvnExeScmProvider
     extends AbstractSvnScmProvider
 {
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getAddCommand()
     {
         return new SvnAddCommand();
@@ -67,6 +71,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getBranchCommand()
     {
         return new SvnBranchCommand();
@@ -75,6 +80,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getChangeLogCommand()
     {
         return new SvnChangeLogCommand();
@@ -83,6 +89,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getCheckInCommand()
     {
         return new SvnCheckInCommand();
@@ -91,6 +98,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getCheckOutCommand()
     {
         return new SvnCheckOutCommand();
@@ -99,6 +107,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getDiffCommand()
     {
         return new SvnDiffCommand();
@@ -107,6 +116,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getExportCommand()
     {
         return new SvnExeExportCommand();
@@ -115,6 +125,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getRemoveCommand()
     {
         return new SvnRemoveCommand();
@@ -123,6 +134,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getStatusCommand()
     {
         return new SvnStatusCommand();
@@ -131,6 +143,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getTagCommand()
     {
         return new SvnTagCommand();
@@ -139,6 +152,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getUntagCommand()
     {
         return new SvnUntagCommand();
@@ -147,6 +161,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getUpdateCommand()
     {
         return new SvnUpdateCommand();
@@ -155,11 +170,13 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getListCommand()
     {
         return new SvnListCommand();
     }
 
+    @Override
     public SvnCommand getInfoCommand()
     {
         return new SvnInfoCommand();
@@ -168,6 +185,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getBlameCommand()
     {
         return new SvnBlameCommand();
@@ -176,6 +194,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected SvnCommand getMkdirCommand()
     {
         return new SvnMkdirCommand();
@@ -184,6 +203,7 @@ public class SvnExeScmProvider
     /**
      * {@inheritDoc}
      */
+    @Override
     protected String getRepositoryURL( File path )
         throws ScmException
     {
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
index a6f0511d1..ea0eb46eb 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
@@ -25,8 +25,9 @@ import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.log.DefaultLog;
 import org.apache.maven.scm.util.ConsumerUtils;
 import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.logging.Logger;
 import org.junit.Assert;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
@@ -46,7 +47,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 public class SvnChangeLogConsumerTest
     extends PlexusTestCase
 {
-    Logger logger;
+    Logger logger = LoggerFactory.getLogger( getClass() );
 
     SvnChangeLogConsumer consumer;
 
@@ -55,8 +56,6 @@ public class SvnChangeLogConsumerTest
         throws Exception
     {
         super.setUp();
-
-        logger = getContainer().getLogger();
         consumer = new SvnChangeLogConsumer( new DefaultLog(), null );
     }
 
diff --git a/maven-scm-test/pom.xml b/maven-scm-test/pom.xml
index a8315a5ee..4a14ca645 100644
--- a/maven-scm-test/pom.xml
+++ b/maven-scm-test/pom.xml
@@ -43,8 +43,31 @@
       <artifactId>maven-scm-manager-plexus</artifactId>
     </dependency>
 
+    <!-- runtime bits needed to construct Plexus and others -->
     <dependency>
-      <groupId>org.sonatype.plexus</groupId>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-classworlds</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-component-annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.sisu</groupId>
+      <artifactId>org.eclipse.sisu.plexus</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.google.inject</groupId>
+      <artifactId>guice</artifactId>
+      <classifier>no_aop</classifier>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-sec-dispatcher</artifactId>
     </dependency>
 
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java b/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java
index d354de4d2..a447dc803 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java
@@ -21,6 +21,8 @@ package org.apache.maven.scm;
 
 import org.apache.maven.scm.manager.ScmManager;
 import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.ContainerConfiguration;
+import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
@@ -77,6 +79,12 @@ public abstract class ScmTestCase
         scmManager = null;
     }
 
+    @Override
+    protected void customizeContainerConfiguration( final ContainerConfiguration configuration )
+    {
+        configuration.setClassPathScanning( PlexusConstants.SCANNING_INDEX ).setAutoWiring( true );
+    }
+
     /**
      * @return default location of the test read/write repository
      */
@@ -132,7 +140,7 @@ public abstract class ScmTestCase
     {
         if ( scmManager == null )
         {
-            scmManager = (ScmManager) lookup( ScmManager.ROLE );
+            scmManager = lookup( ScmManager.class );
         }
 
         return scmManager;
@@ -150,7 +158,7 @@ public abstract class ScmTestCase
     {
         if ( secDispatcher == null )
         {
-            secDispatcher = (SecDispatcher) lookup( SecDispatcher.ROLE, "mng-4384" );
+            secDispatcher = (SecDispatcher) lookup( SecDispatcher.class, "mng-4384" );
         }
 
         return secDispatcher;
diff --git a/maven-scm-test/src/test/java/org/apache/maven/scm/manager/ScmManagerStubTest.java b/maven-scm-test/src/test/java/org/apache/maven/scm/manager/ScmManagerStubTest.java
index 4fbfcdb1f..ce4ee013a 100644
--- a/maven-scm-test/src/test/java/org/apache/maven/scm/manager/ScmManagerStubTest.java
+++ b/maven-scm-test/src/test/java/org/apache/maven/scm/manager/ScmManagerStubTest.java
@@ -52,7 +52,7 @@ public class ScmManagerStubTest
     {
         super.setUp();
 
-        messages = new ArrayList<String>( 0 );
+        messages = new ArrayList<>( 0 );
         scmProvider = new ScmProviderStub();
         scmRepository = new ScmRepositoryStub();
 
diff --git a/pom.xml b/pom.xml
index 640c24e72..fc7a0667b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,8 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven-parent</artifactId>
-    <version>34</version>
+    <version>36</version>
+    <relativePath/>
   </parent>
 
   <groupId>org.apache.maven.scm</groupId>
@@ -123,10 +124,10 @@
   </distributionManagement>
 
   <properties>
+    <javaVersion>8</javaVersion>
     <maven.site.path>scm-archives/scm-LATEST</maven.site.path>
     <checkstyle.violation.ignore>RedundantThrows,NewlineAtEndOfFile,ParameterNumber,MethodLength,FileLength,InnerAssignment,MagicNumber</checkstyle.violation.ignore>
     <checkstyle.failOnViolation>false</checkstyle.failOnViolation>
-    <javaVersion>7</javaVersion>
     <project.build.outputTimestamp>2022-01-08T20:02:10Z</project.build.outputTimestamp>
   </properties>
 
@@ -182,20 +183,52 @@
       <!-- end providers declaration -->
 
       <!-- Plexus -->
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <version>1.7.36</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-simple</artifactId>
+        <version>1.7.36</version>
+      </dependency>
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-container-default</artifactId>
-        <version>1.0-alpha-9</version>
+        <artifactId>plexus-classworlds</artifactId>
+        <version>2.6.0</version>
+      </dependency>
+      <dependency>
+        <groupId>javax.inject</groupId>
+        <artifactId>javax.inject</artifactId>
+        <version>1</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>org.eclipse.sisu.plexus</artifactId>
+        <version>${sisuVersion}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.codehaus.plexus</groupId>
+            <artifactId>plexus-component-annotations</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>com.google.inject</groupId>
+        <artifactId>guice</artifactId>
+        <classifier>no_aop</classifier>
+        <version>4.2.3</version>
       </dependency>
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-utils</artifactId>
-        <version>3.3.1</version>
+        <version>3.4.2</version>
       </dependency>
       <dependency>
-          <groupId>org.sonatype.plexus</groupId>
-          <artifactId>plexus-sec-dispatcher</artifactId>
-          <version>1.4</version>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-sec-dispatcher</artifactId>
+        <version>2.0</version>
       </dependency>
 
       <dependency>
@@ -206,7 +239,7 @@
       <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
-        <version>2.6</version>
+        <version>2.11.0</version>
       </dependency>
 
       <!-- Test -->
@@ -277,14 +310,18 @@
       </plugins>
     </pluginManagement>
     <plugins>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <version>1.9</version>
+        <version>1.21</version>
         <configuration>
           <signature>
             <groupId>org.codehaus.mojo.signature</groupId>
-            <artifactId>java17</artifactId>
+            <artifactId>java18</artifactId>
             <version>1.0</version>
           </signature>
         </configuration>
@@ -298,29 +335,6 @@
           </execution>
         </executions>
       </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <dependencies>
-          <dependency>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>extra-enforcer-rules</artifactId>
-            <version>1.3</version>
-          </dependency>
-        </dependencies>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <configuration>
-          <tags>
-            <tag>
-              <name>plexus.component</name>
-              <placement>X</placement>
-            </tag>
-          </tags>
-        </configuration>
-      </plugin>
     </plugins>
   </build>
 
diff --git a/src/site/apt/guide/new_provider.apt b/src/site/apt/guide/new_provider.apt
index 603601a01..7cd9454ef 100644
--- a/src/site/apt/guide/new_provider.apt
+++ b/src/site/apt/guide/new_provider.apt
@@ -83,13 +83,15 @@ How to write a new SCM provider?
   <build>
     <plugins>
       <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <version>1.7.1</version>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+        <version>${sisuVersion}</version>
         <executions>
           <execution>
+            <id>index-project</id>
             <goals>
-              <goal>generate-metadata</goal>
+              <goal>main-index</goal>
+              <goal>test-index</goal>
             </goals>
           </execution>
         </executions>
@@ -99,8 +101,8 @@ How to write a new SCM provider?
 </project>
 +------------------------------------------+
 
-  The plexus-component-metadata maven plugin will generate the Plexus meta-data file used by the
-  Maven SCM manager.
+  The SISU maven plugin will generate the components meta-data file used by the
+  DI to discover them inject them to SCM manager.
 
 * Create an SCM Provider Repository class
 
@@ -142,8 +144,10 @@ import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 
 /**
- * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="provider_name"
+ * My provider.
  */
+@Singleton
+@Named( "provider_name" )
 public class MyScmProvider
     extends AbstractScmProvider
 {
@@ -167,8 +171,8 @@ public class MyScmProvider
 }
 +------------------------------------------+
 
-  The <plexus.component> javadoc tag will be used by the plexus maven plugin,
-  declared in the POM, to generate plexus meta-data.
+  The JSR330 annotations will be used by the SISU maven plugin,
+  declared in the POM, to generate component meta-data.
   Generally, we use the string just after <scm:> in the scm URL as the
   <provider_name>.