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

[maven-scm] 01/08: [SCM-979] Replace Plexus Container Default with Sisu Plexus Shim

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

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

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

    [SCM-979] Replace Plexus Container Default with Sisu Plexus Shim
    
    Changes:
    
    * Update and clean up dependencies accordingly
    * Remove any uses of deprecated Plexus APIs
    * Replace plexus-container-default with plexus-shim
    
    This closes #141
---
 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                                            |  76 ++++---
 src/site/apt/guide/new_provider.apt                |  22 +-
 38 files changed, 792 insertions(+), 660 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 0f1b33c23..17b5f7f7b 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 f7ffdae84..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>
@@ -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,6 +310,10 @@
       </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>
@@ -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>.