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

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


The following commit(s) were added to refs/heads/master by this push:
     new b899ace1 [MRELEASE-1078] Support version policy to read and use SCM 
tags and commits
b899ace1 is described below

commit b899ace1b448a29aa7645aecc91b519673079e39
Author: Niels Basjes <ni...@basjes.nl>
AuthorDate: Sat Feb 12 16:38:40 2022 +0100

    [MRELEASE-1078] Support version policy to read and use SCM tags and commits
    
    This closes #104
---
 maven-release-api/pom.xml                          |   4 +
 .../shared/release/config/ReleaseDescriptor.java   |   7 +
 .../policy/version/VersionPolicyRequest.java       |  98 +++++++++++-
 .../release/versions/VersionParseException.java    |  10 ++
 maven-release-manager/pom.xml                      |   1 -
 .../config/PropertiesReleaseDescriptorStore.java   |   4 +
 .../release/config/ReleaseDescriptorBuilder.java   |  12 ++
 .../maven/shared/release/config/ReleaseUtils.java  |   4 +
 .../release/phase/AbstractMapVersionsPhase.java    |  68 +++++++-
 .../release/phase/MapBranchVersionsPhase.java      |   6 +-
 .../release/phase/MapDevelopmentVersionsPhase.java |   6 +-
 .../release/phase/MapReleaseVersionsPhase.java     |   6 +-
 .../src/main/mdo/release-descriptor.mdo            |   9 ++
 .../PropertiesReleaseDescriptorStoreTest.java      |   3 +
 .../shared/release/phase/MapVersionsPhaseTest.java | 174 +++++++++++----------
 .../src/it/projects/prepare/version-policy/pom.xml |  56 +++++++
 .../projects/prepare/version-policy/verify.groovy  |  58 +++++++
 .../maven/scm/provider/dummy/DummyScmProvider.java |  19 +++
 .../scm/provider/dummy/DummyTagsScmProvider.java   | 115 ++++++++++++++
 .../maven-version-policy-dummy/invoker.properties  |  18 +++
 .../it/setup/maven-version-policy-dummy/pom.xml    |  92 +++++++++++
 .../its/release/version/DummyVersionPolicy.java    |  82 ++++++++++
 .../maven/plugins/release/BranchReleaseMojo.java   |  13 ++
 .../maven/plugins/release/PrepareReleaseMojo.java  |  13 ++
 .../maven/plugins/release/UpdateVersionsMojo.java  |  14 +-
 maven-release-plugin/src/site/apt/usage.apt.vm     |   1 +
 26 files changed, 792 insertions(+), 101 deletions(-)

diff --git a/maven-release-api/pom.xml b/maven-release-api/pom.xml
index 76f24821..543900c3 100644
--- a/maven-release-api/pom.xml
+++ b/maven-release-api/pom.xml
@@ -52,6 +52,10 @@
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-settings</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-api</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.eclipse.aether</groupId>
       <artifactId>aether-api</artifactId>
diff --git 
a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
 
b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
index 6ca7c0f0..26a078d8 100644
--- 
a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
+++ 
b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
@@ -426,6 +426,13 @@ public interface ReleaseDescriptor
      */
     String getProjectVersionPolicyId();
 
+    /**
+     * Get the (optional) config for the VersionPolicy implementation used to 
calculate the project versions.
+     *
+     * @return The parsed XML of the provided config (an instance of 
XmlPlexusConfiguration) or null.
+     */
+    Object getProjectVersionPolicyConfig();
+
     /**
      * Get the role-hint for the release Strategy implementation.
      *
diff --git 
a/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicyRequest.java
 
b/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicyRequest.java
index 4001b871..9c771089 100644
--- 
a/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicyRequest.java
+++ 
b/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicyRequest.java
@@ -20,6 +20,8 @@ package org.apache.maven.shared.release.policy.version;
  */
 
 import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
 
 /**
  * <p>VersionPolicyRequest class.</p>
@@ -33,6 +35,12 @@ public class VersionPolicyRequest
     
     private Metadata metaData;
 
+    private ScmRepository scmRepository;
+    private ScmProvider scmProvider;
+    private String workingDirectory;
+
+    private String config;
+
     /**
      * <p>Getter for the field <code>version</code>.</p>
      *
@@ -76,5 +84,93 @@ public class VersionPolicyRequest
         this.metaData = metaData;
         return this;
     }
-    
+
+    /**
+     * <p>Getter for the field <code>scmRepository</code>.</p>
+     *
+     * @return a {@link ScmRepository} object
+     */
+    public ScmRepository getScmRepository()
+    {
+        return scmRepository;
+    }
+
+    /**
+     * <p>Setter for the field <code>scmRepository</code>.</p>
+     *
+     * @param scmRepository The {@link ScmRepository} where the history can be 
retrieved.
+     * @return a {@link 
org.apache.maven.shared.release.policy.version.VersionPolicyRequest} object
+     */
+    public VersionPolicyRequest setScmRepository( ScmRepository scmRepository )
+    {
+        this.scmRepository = scmRepository;
+        return this;
+    }
+
+    /**
+     * <p>Getter for the field <code>scmProvider</code>.</p>
+     *
+     * @return a {@link ScmProvider} object
+     */
+    public ScmProvider getScmProvider()
+    {
+        return scmProvider;
+    }
+
+    /**
+     * <p>Setter for the field <code>scmProvider</code>.</p>
+     *
+     * @param scmProvider The {@link ScmProvider} where the history can be 
retrieved.
+     * @return a {@link 
org.apache.maven.shared.release.policy.version.VersionPolicyRequest} object
+     */
+    public VersionPolicyRequest setScmProvider( ScmProvider scmProvider )
+    {
+        this.scmProvider = scmProvider;
+        return this;
+    }
+
+    /**
+     * <p>Getter for the field <code>workingDirectory</code>.</p>
+     *
+     * @return the {@link String} that contains the workingDirectory (can be 
null or empty).
+     */
+    public String getWorkingDirectory()
+    {
+        return workingDirectory;
+    }
+
+    /**
+     * <p>Setter for the field <code>workingDirectory</code>.</p>
+     *
+     * @param workingDirectory The {@link String} that contains the 
workingDirectory (can be null or empty).
+     * @return a {@link 
org.apache.maven.shared.release.policy.version.VersionPolicyRequest} object
+     */
+    public VersionPolicyRequest setWorkingDirectory( String workingDirectory )
+    {
+        this.workingDirectory = workingDirectory;
+        return this;
+    }
+
+    /**
+     * <p>Getter for the field <code>config</code>.</p>
+     *
+     * @return the {@link String} that contains the config (can be null or 
empty).
+     */
+    public String getConfig()
+    {
+        return config;
+    }
+
+    /**
+     * <p>Setter for the field <code>config</code>.</p>
+     *
+     * @param config The {@link String} that contains the config (can be null 
or empty).
+     * @return a {@link 
org.apache.maven.shared.release.policy.version.VersionPolicyRequest} object
+     */
+    public VersionPolicyRequest setConfig( String config )
+    {
+        this.config = config;
+        return this;
+    }
+
 }
diff --git 
a/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/VersionParseException.java
 
b/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/VersionParseException.java
index 8d24cb11..ec8ed5d4 100644
--- 
a/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/VersionParseException.java
+++ 
b/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/VersionParseException.java
@@ -34,4 +34,14 @@ public class VersionParseException
     {
         super( message );
     }
+
+    /**
+     * <p>Constructor for VersionParseException.</p>
+     *
+     * @param message a {@link java.lang.String} object
+     */
+    public VersionParseException( String message, Throwable e )
+    {
+        super( message, e );
+    }
 }
diff --git a/maven-release-manager/pom.xml b/maven-release-manager/pom.xml
index 98345bc1..7488a60d 100644
--- a/maven-release-manager/pom.xml
+++ b/maven-release-manager/pom.xml
@@ -191,7 +191,6 @@
     <dependency>
       <groupId>org.eclipse.sisu</groupId>
       <artifactId>org.eclipse.sisu.plexus</artifactId>
-      <scope>test</scope>
     </dependency>
 
     <dependency>
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
index fdacb6d2..9d3246c0 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStore.java
@@ -269,6 +269,10 @@ public class PropertiesReleaseDescriptorStore
         {
             properties.setProperty( "projectVersionPolicyId", 
config.getProjectVersionPolicyId() );
         }
+        if ( config.getProjectVersionPolicyConfig() != null )
+        {
+            properties.setProperty( "projectVersionPolicyConfig", 
config.getProjectVersionPolicyConfig().toString() );
+        }
         if ( config.getProjectNamingPolicyId() != null )
         {
             properties.setProperty( "projectNamingPolicyId", 
config.getProjectNamingPolicyId() );
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
index 6940d31d..5b81f703 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java
@@ -401,6 +401,18 @@ public class ReleaseDescriptorBuilder
         return this;
     }
 
+    /**
+     * <p>setProjectVersionPolicyConfig.</p>
+     *
+     * @param setProjectVersionPolicyConfig a {@link java.lang.String} object
+     * @return a {@link 
org.apache.maven.shared.release.config.ReleaseDescriptorBuilder} object
+     */
+    public ReleaseDescriptorBuilder setProjectVersionPolicyConfig( String 
setProjectVersionPolicyConfig )
+    {
+        releaseDescriptor.setProjectVersionPolicyConfig( 
setProjectVersionPolicyConfig );
+        return this;
+    }
+
     /**
      * <p>setPushChanges.</p>
      *
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
index 3847b52d..2d24e35c 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseUtils.java
@@ -156,6 +156,10 @@ public class ReleaseUtils
         {
             builder.setProjectVersionPolicyId( properties.getProperty( 
"projectVersionPolicyId" ) );
         }
+        if ( properties.containsKey( "projectVersionPolicyConfig" ) )
+        {
+            builder.setProjectVersionPolicyConfig( properties.getProperty( 
"projectVersionPolicyConfig" ) );
+        }
         if ( properties.containsKey( "projectNamingPolicyId" ) )
         {
             builder.setProjectNamingPolicyId( properties.getProperty( 
"projectNamingPolicyId" ) );
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractMapVersionsPhase.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractMapVersionsPhase.java
index 97617f35..53e20efa 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractMapVersionsPhase.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractMapVersionsPhase.java
@@ -24,6 +24,10 @@ import java.util.Map;
 
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseResult;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
@@ -31,11 +35,13 @@ import 
org.apache.maven.shared.release.env.ReleaseEnvironment;
 import org.apache.maven.shared.release.policy.PolicyException;
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
+import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
 import org.apache.maven.shared.release.util.ReleaseUtil;
 import org.apache.maven.shared.release.versions.VersionParseException;
 import org.codehaus.plexus.components.interactivity.Prompter;
 import org.codehaus.plexus.components.interactivity.PrompterException;
 import org.codehaus.plexus.util.StringUtils;
+import org.slf4j.Logger;
 
 import static java.util.Objects.requireNonNull;
 import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
@@ -70,6 +76,11 @@ import static 
org.apache.maven.shared.utils.logging.MessageUtils.buffer;
 public abstract class AbstractMapVersionsPhase
         extends AbstractReleasePhase
 {
+    /**
+     * Tool that gets a configured SCM repository from release configuration.
+     */
+    private final ScmRepositoryConfigurator scmRepositoryConfigurator;
+
     /**
      * Component used to prompt for input.
      */
@@ -90,9 +101,11 @@ public abstract class AbstractMapVersionsPhase
      */
     private final boolean convertToBranch;
 
-    public AbstractMapVersionsPhase( Prompter prompter, Map<String, 
VersionPolicy> versionPolicies,
+    public AbstractMapVersionsPhase( ScmRepositoryConfigurator 
scmRepositoryConfigurator,
+                                     Prompter prompter, Map<String, 
VersionPolicy> versionPolicies,
                                      boolean convertToSnapshot, boolean 
convertToBranch )
     {
+        this.scmRepositoryConfigurator = requireNonNull( 
scmRepositoryConfigurator );
         this.prompter = requireNonNull( prompter );
         this.versionPolicies = requireNonNull( versionPolicies );
         this.convertToSnapshot = convertToSnapshot;
@@ -116,7 +129,7 @@ public abstract class AbstractMapVersionsPhase
 
             String projectId = ArtifactUtils.versionlessKey( 
project.getGroupId(), project.getArtifactId() );
 
-            String nextVersion = resolveNextVersion( project, projectId, 
releaseDescriptor );
+            String nextVersion = resolveNextVersion( project, projectId, 
releaseDescriptor, releaseEnvironment );
 
             if ( !convertToSnapshot )
             {
@@ -182,7 +195,7 @@ public abstract class AbstractMapVersionsPhase
             {
                 String projectId = ArtifactUtils.versionlessKey( 
project.getGroupId(), project.getArtifactId() );
 
-                String nextVersion = resolveNextVersion( project, projectId, 
releaseDescriptor );
+                String nextVersion = resolveNextVersion( project, projectId, 
releaseDescriptor, releaseEnvironment );
 
                 if ( !convertToSnapshot )
                 {
@@ -206,7 +219,8 @@ public abstract class AbstractMapVersionsPhase
 
     private String resolveNextVersion( MavenProject project,
                                        String projectId,
-                                       ReleaseDescriptor releaseDescriptor )
+                                       ReleaseDescriptor releaseDescriptor,
+                                       ReleaseEnvironment releaseEnvironment )
             throws ReleaseExecutionException
     {
         String defaultVersion;
@@ -275,14 +289,15 @@ public abstract class AbstractMapVersionsPhase
                         {
                             suggestedVersion =
                                     resolveSuggestedVersion( baseVersion,
-                                            
releaseDescriptor.getProjectVersionPolicyId() );
+                                            releaseDescriptor,
+                                            releaseEnvironment );
                         }
                         catch ( VersionParseException e )
                         {
                             if ( releaseDescriptor.isInteractive() )
                             {
                                 suggestedVersion =
-                                        resolveSuggestedVersion( "1.0", 
releaseDescriptor.getProjectVersionPolicyId() );
+                                        resolveSuggestedVersion( "1.0", 
releaseDescriptor, releaseEnvironment );
                             }
                             else
                             {
@@ -347,9 +362,12 @@ public abstract class AbstractMapVersionsPhase
         return "new development";
     }
 
-    private String resolveSuggestedVersion( String baseVersion, String 
policyId )
+    private String resolveSuggestedVersion( String baseVersion,
+                                            ReleaseDescriptor 
releaseDescriptor,
+                                            ReleaseEnvironment 
releaseEnvironment )
             throws PolicyException, VersionParseException
     {
+        String policyId = releaseDescriptor.getProjectVersionPolicyId();
         VersionPolicy policy = versionPolicies.get( policyId );
         if ( policy == null )
         {
@@ -357,6 +375,42 @@ public abstract class AbstractMapVersionsPhase
         }
 
         VersionPolicyRequest request = new VersionPolicyRequest().setVersion( 
baseVersion );
+
+        if ( releaseDescriptor.getProjectVersionPolicyConfig() != null )
+        {
+            request.setConfig( 
releaseDescriptor.getProjectVersionPolicyConfig().toString() );
+        }
+        request.setWorkingDirectory( releaseDescriptor.getWorkingDirectory() );
+
+        if ( scmRepositoryConfigurator != null && 
releaseDescriptor.getScmSourceUrl() != null )
+        {
+            try
+            {
+                ScmRepository repository = scmRepositoryConfigurator
+                        .getConfiguredRepository( releaseDescriptor, 
releaseEnvironment.getSettings() );
+
+                ScmProvider provider = scmRepositoryConfigurator
+                        .getRepositoryProvider( repository );
+
+                request.setScmRepository( repository );
+                request.setScmProvider( provider );
+            }
+            catch ( ScmRepositoryException | NoSuchScmProviderException e )
+            {
+                Logger logger = getLogger();
+                if ( logger.isWarnEnabled() )
+                {
+                    logger.warn( "Next Version will NOT be based on the 
version control: {}", e.getMessage() );
+                }
+                else
+                {
+                    if ( logger.isDebugEnabled() )
+                    {
+                        logger.warn( "Next Version will NOT be based on the 
version control", e );
+                    }
+                }
+            }
+        }
         return convertToSnapshot ? policy.getDevelopmentVersion( request 
).getVersion()
                 : policy.getReleaseVersion( request ).getVersion();
     }
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapBranchVersionsPhase.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapBranchVersionsPhase.java
index ae81496f..c3a3cb92 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapBranchVersionsPhase.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapBranchVersionsPhase.java
@@ -26,6 +26,7 @@ import javax.inject.Singleton;
 import java.util.Map;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
+import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
 import org.codehaus.plexus.components.interactivity.Prompter;
 
 /**
@@ -61,8 +62,9 @@ public class MapBranchVersionsPhase
         extends AbstractMapVersionsPhase
 {
     @Inject
-    public MapBranchVersionsPhase( Prompter prompter, Map<String, 
VersionPolicy> versionPolicies )
+    public MapBranchVersionsPhase( ScmRepositoryConfigurator 
scmRepositoryConfigurator,
+                                   Prompter prompter, Map<String, 
VersionPolicy> versionPolicies )
     {
-        super( prompter, versionPolicies, true, true );
+        super( scmRepositoryConfigurator, prompter, versionPolicies, true, 
true );
     }
 }
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionsPhase.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionsPhase.java
index d0ab04af..76c2efc1 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionsPhase.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionsPhase.java
@@ -26,6 +26,7 @@ import javax.inject.Singleton;
 import java.util.Map;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
+import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
 import org.codehaus.plexus.components.interactivity.Prompter;
 
 /**
@@ -61,8 +62,9 @@ public class MapDevelopmentVersionsPhase
         extends AbstractMapVersionsPhase
 {
     @Inject
-    public MapDevelopmentVersionsPhase( Prompter prompter, Map<String, 
VersionPolicy> versionPolicies )
+    public MapDevelopmentVersionsPhase( ScmRepositoryConfigurator 
scmRepositoryConfigurator,
+                                        Prompter prompter, Map<String, 
VersionPolicy> versionPolicies )
     {
-        super( prompter, versionPolicies, true, false );
+        super( scmRepositoryConfigurator, prompter, versionPolicies, true, 
false );
     }
 }
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapReleaseVersionsPhase.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapReleaseVersionsPhase.java
index c785f8ab..9627c3a0 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapReleaseVersionsPhase.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapReleaseVersionsPhase.java
@@ -26,6 +26,7 @@ import javax.inject.Singleton;
 import java.util.Map;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
+import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
 import org.codehaus.plexus.components.interactivity.Prompter;
 
 /**
@@ -61,8 +62,9 @@ public class MapReleaseVersionsPhase
         extends AbstractMapVersionsPhase
 {
     @Inject
-    public MapReleaseVersionsPhase( Prompter prompter, Map<String, 
VersionPolicy> versionPolicies )
+    public MapReleaseVersionsPhase( ScmRepositoryConfigurator 
scmRepositoryConfigurator,
+                                    Prompter prompter, Map<String, 
VersionPolicy> versionPolicies )
     {
-        super( prompter, versionPolicies, false, false );
+        super( scmRepositoryConfigurator, prompter, versionPolicies, false, 
false );
     }
 }
diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo 
b/maven-release-manager/src/main/mdo/release-descriptor.mdo
index 0a1d8cd5..a752ff69 100644
--- a/maven-release-manager/src/main/mdo/release-descriptor.mdo
+++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo
@@ -488,6 +488,15 @@
             The role-hint for the VersionPolicy implementation used to 
calculate the project versions.
           </description>
         </field>
+        <field>
+          <name>projectVersionPolicyConfig</name>
+          <version>3.0.0+</version>
+          <type>DOM</type>
+          <description>
+            The optional config string for the VersionPolicy implementation 
used to calculate the project versions.
+            The format of this depends on the specific VersionPolicy that is 
used.
+          </description>
+        </field>
         <field>
           <name>projectNamingPolicyId</name>
           <version>3.0.0+</version>
diff --git 
a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
 
b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
index 27e03d98..a45861c7 100644
--- 
a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
+++ 
b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/PropertiesReleaseDescriptorStoreTest.java
@@ -367,6 +367,9 @@ public class PropertiesReleaseDescriptorStoreTest
         builder.addReleaseVersion( "groupId:artifactId", "1.0" );
         builder.addDevelopmentVersion( "groupId:artifactId", "1.1-SNAPSHOT" );
 
+        // The actual kind of string you will get when setting the 
projectVersionPolicyConfig
+        
builder.setProjectVersionPolicyConfig("<projectVersionPolicyConfig><foo>bar</foo></projectVersionPolicyConfig>");
+
         IdentifiedScm scm = new IdentifiedScm();
         scm.setId( "id-write" );
         scm.setConnection( "connection-write" );
diff --git 
a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java
 
b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java
index 8c8196ec..804a7629 100644
--- 
a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java
+++ 
b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java
@@ -47,6 +47,7 @@ import org.apache.maven.shared.release.config.ReleaseUtils;
 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
 import org.apache.maven.shared.release.policy.PolicyException;
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
+import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
 import org.apache.maven.shared.release.versions.VersionParseException;
 import org.codehaus.plexus.components.interactivity.Prompter;
 import org.codehaus.plexus.components.interactivity.PrompterException;
@@ -63,6 +64,9 @@ import org.mockito.MockitoAnnotations;
 public class MapVersionsPhaseTest
     extends PlexusJUnit4TestCase
 {
+    @Mock
+    private ScmRepositoryConfigurator scmRepositoryConfigurator;
+
     @Mock
     private Prompter mockPrompter;
 
@@ -93,7 +97,7 @@ public class MapVersionsPhaseTest
         MavenProject project = createProject( "artifactId", "1.0-SNAPSHOT" );
         when( mockPrompter.prompt( startsWith( "What is the release version 
for \"" + project.getName() + "\"?" ),
                 eq( "1.0" ) ) ).thenReturn( "2.0" );
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
project );
 
@@ -118,7 +122,7 @@ public class MapVersionsPhaseTest
         MavenProject project = createProject( "artifactId", "1.0-SNAPSHOT" );
         when( mockPrompter.prompt( startsWith( "What is the release version 
for \"" + project.getName() + "\"?" ),
                 eq( "1.0" ) ) ).thenReturn( "2.0" );
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
project );
 
@@ -143,7 +147,7 @@ public class MapVersionsPhaseTest
         MavenProject project = createProject( "artifactId", "1.0-SNAPSHOT" );
         when( mockPrompter.prompt( startsWith( "What is the release version 
for \"" + project.getName() + "\"?" ),
                 eq( "1.0" ) ) ).thenReturn( "1.0.0" );
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
project );
 
@@ -181,7 +185,7 @@ public class MapVersionsPhaseTest
         MavenProject project = createProject( "artifactId", "SNAPSHOT" );
         when( mockPrompter.prompt( startsWith( "What is the release version 
for \"" + project.getName() + "\"?" ),
                 eq( "1.0" ) ) ).thenReturn( "2.0" );
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
project );
 
@@ -219,7 +223,7 @@ public class MapVersionsPhaseTest
         // prepare
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "SNAPSHOT" ) );
 
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
         builder.addReleaseVersion( "groupId:artifactId", "2.0" );
@@ -259,7 +263,7 @@ public class MapVersionsPhaseTest
 
         List<MavenProject> reactorProjects = Arrays.asList( rootProject, 
moduleProject );
 
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder()
             .setInteractive(false) // batch mode
@@ -301,7 +305,7 @@ public class MapVersionsPhaseTest
 
         List<MavenProject> reactorProjects = Arrays.asList( rootProject, 
moduleProject );
 
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder()
             .setInteractive( false ) // batch mode
@@ -333,7 +337,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.0-SNAPSHOT" ) );
 
@@ -353,7 +357,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.0-SNAPSHOT" ) );
 
@@ -376,7 +380,7 @@ public class MapVersionsPhaseTest
         MavenProject project = createProject( "artifactId", "1.0" );
         when( mockPrompter.prompt( startsWith( "What is the new development 
version for \"" + project.getName()
                 + "\"?" ), eq( "1.1-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" 
);
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
project );
 
@@ -411,7 +415,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
         MavenProject project = createProject( "artifactId", "1.0" );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
project );
@@ -443,7 +447,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.0" ) );
 
@@ -477,7 +481,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.0" ) );
 
         ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
@@ -511,7 +515,7 @@ public class MapVersionsPhaseTest
         // prepare
         when( mockPrompter.prompt( isA( String.class ),
                 isA( String.class ) ) ).thenThrow( new PrompterException( 
"..." ) );
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.0" ) );
 
@@ -557,7 +561,7 @@ public class MapVersionsPhaseTest
 
         when( mockPrompter.prompt( startsWith( "What is the new development 
version for \"" + project.getName()
                 + "\"?" ), eq( "1.1-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" 
);
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
project );
 
@@ -587,7 +591,7 @@ public class MapVersionsPhaseTest
     @Test
     public void testAdjustVersionNonInteractive()
     {
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "foo" ) );
 
@@ -625,7 +629,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -647,7 +651,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -669,7 +673,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -692,7 +696,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -715,7 +719,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -737,7 +741,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -759,7 +763,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -780,7 +784,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -801,7 +805,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -823,7 +827,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -845,7 +849,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -866,7 +870,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -887,7 +891,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -909,7 +913,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -931,7 +935,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -953,7 +957,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -975,7 +979,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -998,7 +1002,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1021,7 +1025,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1044,7 +1048,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1067,7 +1071,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1090,7 +1094,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1113,7 +1117,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1136,7 +1140,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1159,7 +1163,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1183,7 +1187,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1207,7 +1211,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1236,7 +1240,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1265,7 +1269,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1292,7 +1296,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1319,7 +1323,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1344,7 +1348,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1369,7 +1373,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1393,7 +1397,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1422,7 +1426,7 @@ public class MapVersionsPhaseTest
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
         when( mockPrompter.prompt( startsWith( "What is the branch version 
for" ),
                 eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1449,7 +1453,7 @@ public class MapVersionsPhaseTest
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
         when( mockPrompter.prompt( startsWith( "What is the branch version 
for" ),
                 eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1476,7 +1480,7 @@ public class MapVersionsPhaseTest
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
         when( mockPrompter.prompt( startsWith( "What is the branch version 
for" ),
                 eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.1-SNAPSHOT" );
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1508,7 +1512,7 @@ public class MapVersionsPhaseTest
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
         when( mockPrompter.prompt( startsWith( "What is the branch version 
for" ),
                 eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.1-SNAPSHOT" );
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1540,7 +1544,7 @@ public class MapVersionsPhaseTest
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
         when( mockPrompter.prompt( startsWith( "What is the branch version 
for" ),
                 eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1568,7 +1572,7 @@ public class MapVersionsPhaseTest
         // org.apache.maven.release:maven-release-manager:[2.4,) > 1.3-SNAPSHOT
         when( mockPrompter.prompt( startsWith( "What is the branch version 
for" ),
                 eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1591,7 +1595,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1618,7 +1622,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1645,7 +1649,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1667,7 +1671,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1689,7 +1693,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1711,7 +1715,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1735,7 +1739,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1757,7 +1761,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1779,7 +1783,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1801,7 +1805,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1823,7 +1827,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1849,7 +1853,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2" ) );
 
@@ -1877,7 +1881,7 @@ public class MapVersionsPhaseTest
         // prepare
         when( mockPrompter.prompt( startsWith( "What is the new working copy 
version for" ),
                 eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1899,7 +1903,7 @@ public class MapVersionsPhaseTest
         // prepare
         when( mockPrompter.prompt( startsWith( "What is the new working copy 
version for" ),
                 eq( "1.3-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.2-SNAPSHOT" ) );
 
@@ -1919,7 +1923,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = new ArrayList<>();
         Collections.addAll( reactorProjects, createProject( "artifactId", 
"1.2-SNAPSHOT" ),
@@ -1944,7 +1948,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = new ArrayList<>();
         Collections.addAll( reactorProjects, createProject( "artifactId", 
"1.2-SNAPSHOT" ),
@@ -1969,7 +1973,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects =
             Collections.singletonList( createProject( "artifactId", 
"1.2.1-SNAPSHOT" ) );
@@ -1993,7 +1997,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects =
             Collections.singletonList( createProject( "artifactId", 
"1.2.1-SNAPSHOT" ) );
@@ -2017,7 +2021,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects =
             Collections.singletonList( createProject( "artifactId", 
"1.2.1-SNAPSHOT" ) );
@@ -2041,7 +2045,7 @@ public class MapVersionsPhaseTest
         throws Exception
     {
         // verify
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects =
             Collections.singletonList( createProject( "artifactId", 
"1.2.1-SNAPSHOT" ) );
@@ -2065,8 +2069,8 @@ public class MapVersionsPhaseTest
     public void testUnusualVersions1()
         throws Exception
     {
-        MapReleaseVersionsPhase mapReleasephase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
-        MapDevelopmentVersionsPhase mapDevelopmentphase = new 
MapDevelopmentVersionsPhase( mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase mapReleasephase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase mapDevelopmentphase = new 
MapDevelopmentVersionsPhase( scmRepositoryConfigurator, mockPrompter, 
versionPolicies );
 
         List<MavenProject> reactorProjects =
             Collections.singletonList( createProject( "artifactId", 
"MYB_200909-SNAPSHOT" ) );
@@ -2096,7 +2100,7 @@ public class MapVersionsPhaseTest
         when( mockPrompter.prompt( startsWith( "What is the new development 
version for " ),
                 eq( "1.12-SNAPSHOT" ) ) ).thenReturn( "2.0" ) // wrong, 
expected SNAPSHOT
                 .thenReturn( "2.0-SNAPSHOT" );
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "bar", "1.11-SNAPSHOT" ) );
 
@@ -2118,7 +2122,7 @@ public class MapVersionsPhaseTest
         // prepare
         when( mockPrompter.prompt( startsWith( "What is the new development 
version for " ),
                 eq( "1.12-SNAPSHOT" ) ) ).thenReturn( "2.0-SNAPSHOT" );
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "bar", "1.11-SNAPSHOT" ) );
 
@@ -2140,7 +2144,7 @@ public class MapVersionsPhaseTest
         // prepare
         when( mockPrompter.prompt( startsWith( "What is the release version 
for " ),
                 eq( "1.11" ) ) ).thenReturn( "2.0" );
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "bar", "1.11-SNAPSHOT" ) );
 
@@ -2161,7 +2165,7 @@ public class MapVersionsPhaseTest
     public void testNonExistentVersionPolicy()
     {
         // prepare
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "artifactId", "1.0-SNAPSHOT" ) );
 
@@ -2178,7 +2182,7 @@ public class MapVersionsPhaseTest
     public void testUpdateBranchInvalidDefaultReleaseVersion_NonInteractive()
     {
         // prepare
-        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
mockPrompter, versionPolicies );
+        MapBranchVersionsPhase phase = new MapBranchVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "bar", "1.11-SNAPSHOT" ) );
 
@@ -2202,7 +2206,7 @@ public class MapVersionsPhaseTest
     public void testUpdateReleaseInvalidDefaultReleaseVersion_NonInteractive()
     {
         // prepare
-        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
mockPrompter, versionPolicies );
+        MapReleaseVersionsPhase phase = new MapReleaseVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "bar", "1.11-SNAPSHOT" ) );
 
@@ -2225,7 +2229,7 @@ public class MapVersionsPhaseTest
     public void 
testUpdateDevelopmentInvalidDefaultDevelopmentVersion_NonInteractive()
     {
         // prepare
-        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
mockPrompter, versionPolicies );
+        MapDevelopmentVersionsPhase phase = new MapDevelopmentVersionsPhase( 
scmRepositoryConfigurator, mockPrompter, versionPolicies );
 
         List<MavenProject> reactorProjects = Collections.singletonList( 
createProject( "bar", "1.11-SNAPSHOT" ) );
 
diff --git 
a/maven-release-plugin/src/it/projects/prepare/version-policy/pom.xml 
b/maven-release-plugin/src/it/projects/prepare/version-policy/pom.xml
new file mode 100644
index 00000000..c896d0f2
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/prepare/version-policy/pom.xml
@@ -0,0 +1,56 @@
+<?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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugin.release.it</groupId>
+  <artifactId>version-policy</artifactId>
+  <version>0.1.2-SNAPSHOT</version>
+  <scm>
+    <connection>scm:dummytags|nul</connection>
+    <developerConnection>scm:dummytags|nul</developerConnection>
+  </scm>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-release-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <projectVersionPolicyId>DummyVersionPolicy</projectVersionPolicyId>
+          
<projectVersionPolicyConfig><DummyConfig>One</DummyConfig></projectVersionPolicyConfig>
+        </configuration>
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.maven.its.release</groupId>
+            <artifactId>maven-scm-provider-dummy</artifactId>
+            <version>1.0</version>
+          </dependency>
+
+          <dependency>
+            <groupId>org.apache.maven.its.release</groupId>
+            <artifactId>maven-version-policy-dummy</artifactId>
+            <version>1.0</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git 
a/maven-release-plugin/src/it/projects/prepare/version-policy/verify.groovy 
b/maven-release-plugin/src/it/projects/prepare/version-policy/verify.groovy
new file mode 100644
index 00000000..9426c2a6
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/prepare/version-policy/verify.groovy
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ */
+
+File buildLog = new File( basedir, 'build.log' )
+assert buildLog.exists()
+
+assert 1 == buildLog.getText().count("[INPUT:Version] #0.1.2-SNAPSHOT#")
+
+assert 1 == buildLog.getText().count("[INPUT:Config] 
#<projectVersionPolicyConfig><DummyConfig>One</DummyConfig>")
+
+// Only check the last part to avoid path separator issues on Windows and such
+assert 1 == buildLog.getText().count("version-policy# 
[INPUT:WorkingDirectory]")
+
+// Do we get comments and tags?
+assert 1 == buildLog.getText().count("[INPUT:Changeset[0].comment] #Commit 
19#")
+assert 1 == buildLog.getText().count("[INPUT:Changeset[0].tag] ##")
+
+assert 1 == buildLog.getText().count("[INPUT:Changeset[4].comment] #Commit 
15#")
+assert 1 == buildLog.getText().count("[INPUT:Changeset[4].tag] #tag 1,tag 2#")
+assert 1 == buildLog.getText().count("[INPUT:Changeset[5].comment] #feat(it): 
This is a new feature.#")
+assert 1 == buildLog.getText().count("[INPUT:Changeset[5].tag] ##")
+
+assert 1 == buildLog.getText().count("[INPUT:Changeset[13].comment] #Commit  
6#")
+assert 1 == buildLog.getText().count("[INPUT:Changeset[13].tag] #tag 4#")
+
+assert 1 == buildLog.getText().count("[INPUT:Changeset[17].comment] #Commit  
2#")
+assert 1 == buildLog.getText().count("[INPUT:Changeset[17].tag] #v1.2.3#")
+
+// The pom based version is NOT related to what the actual version will be.
+File pomXml = new File( basedir, 'pom.xml' )
+assert pomXml.exists()
+assert new XmlSlurper().parse( pomXml ).version.text() == "0.1.2-SNAPSHOT"
+
+// The actual version is hard coded
+File pomXmlTag = new File( basedir, 'pom.xml.tag' )
+assert pomXmlTag.exists()
+assert new XmlSlurper().parse( pomXmlTag ).version.text() == "1.2.3"
+
+// The next development version is hard coded
+File pomXmlNext = new File( basedir, 'pom.xml.next' )
+assert pomXmlNext.exists()
+assert new XmlSlurper().parse( pomXmlNext ).version.text() == "4.5.6-SNAPSHOT"
diff --git 
a/maven-release-plugin/src/it/setup/maven-scm-provider-dummy/src/main/java/org/apache/maven/scm/provider/dummy/DummyScmProvider.java
 
b/maven-release-plugin/src/it/setup/maven-scm-provider-dummy/src/main/java/org/apache/maven/scm/provider/dummy/DummyScmProvider.java
index d71b2c5e..877c1358 100644
--- 
a/maven-release-plugin/src/it/setup/maven-scm-provider-dummy/src/main/java/org/apache/maven/scm/provider/dummy/DummyScmProvider.java
+++ 
b/maven-release-plugin/src/it/setup/maven-scm-provider-dummy/src/main/java/org/apache/maven/scm/provider/dummy/DummyScmProvider.java
@@ -1,5 +1,24 @@
 package org.apache.maven.scm.provider.dummy;
 
+/*
+ * 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 javax.inject.Named;
 import javax.inject.Singleton;
 
diff --git 
a/maven-release-plugin/src/it/setup/maven-scm-provider-dummy/src/main/java/org/apache/maven/scm/provider/dummy/DummyTagsScmProvider.java
 
b/maven-release-plugin/src/it/setup/maven-scm-provider-dummy/src/main/java/org/apache/maven/scm/provider/dummy/DummyTagsScmProvider.java
new file mode 100644
index 00000000..b46215a5
--- /dev/null
+++ 
b/maven-release-plugin/src/it/setup/maven-scm-provider-dummy/src/main/java/org/apache/maven/scm/provider/dummy/DummyTagsScmProvider.java
@@ -0,0 +1,115 @@
+package org.apache.maven.scm.provider.dummy;
+
+/*
+ * 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 javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogSet;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.provider.AbstractScmProvider;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+
+import java.util.Arrays;
+import java.util.Date;
+
+/**
+ * A dummy SCM provider used to provide commit messages and tags for testing 
Version Policies that need this.
+ *
+ * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" 
role-hint="dummytags"
+ * @author Niels Basjes
+ */
+@Singleton
+@Named( "dummytags" )
+public class DummyTagsScmProvider
+    extends AbstractScmProvider
+{
+
+    public String getScmType()
+    {
+        return "dummytags";
+    }
+
+    public ScmProviderRepository makeProviderScmRepository( String 
scmSpecificUrl, char delimiter )
+    {
+        return new DummyScmProviderRepository();
+    }
+
+    @Override
+    protected StatusScmResult status( ScmProviderRepository repository, 
ScmFileSet fileSet, CommandParameters parameters )
+    {
+        return new StatusScmResult( "", "", "", true );
+    }
+
+    private ChangeSet changeSet(String comment, String... tags)
+    {
+        ChangeSet changeSet = new ChangeSet();
+        changeSet.setComment( comment );
+        changeSet.setAuthor( "Someone <some...@example.nl>" );
+        changeSet.setTags( Arrays.asList( tags ) );
+        return changeSet;
+    }
+
+    @Override
+    public ChangeLogScmResult changeLog(ChangeLogScmRequest request)
+    {
+        Date from = new Date(   39817800000L );
+        Date to   = new Date( 1644768534785L );
+        ChangeLogSet changeLogSet = new ChangeLogSet(
+            Arrays.asList(
+                changeSet( "Commit 19" ),
+                changeSet( "Commit 18" ),
+                changeSet( "Commit 17" ),
+                changeSet( "Commit 16" ),
+                changeSet( "Commit 15", "tag 1", "tag 2" ),
+                changeSet( "feat(it): This is a new feature." ), // For 
Conventional Commits.
+                changeSet( "Commit 13" ),
+                changeSet( "Commit 12", "tag 3" ),
+                changeSet( "Commit 11" ),
+                changeSet( "Commit 10" ),
+                changeSet( "Commit  9" ),
+                changeSet( "Commit  8" ),
+                changeSet( "Commit  7" ),
+                changeSet( "Commit  6", "tag 4" ),
+                changeSet( "Commit  5" ),
+                changeSet( "Commit  4" ),
+                changeSet( "Commit  3" ),
+                changeSet( "Commit  2", "v1.2.3" ), // For Conventional 
Commits.
+                changeSet( "Commit  1" ),
+                changeSet( "Commit  0" )
+            ), from, to
+        );
+
+        ScmResult scmResult = new ScmResult(
+            "No command",
+            "Special for testing Scm based version policies",
+            "No command output",
+            true
+        );
+        return new ChangeLogScmResult( changeLogSet, scmResult );
+    }
+
+}
diff --git 
a/maven-release-plugin/src/it/setup/maven-version-policy-dummy/invoker.properties
 
b/maven-release-plugin/src/it/setup/maven-version-policy-dummy/invoker.properties
new file mode 100644
index 00000000..d5d6ca5d
--- /dev/null
+++ 
b/maven-release-plugin/src/it/setup/maven-version-policy-dummy/invoker.properties
@@ -0,0 +1,18 @@
+# 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.
+
+invoker.goals = install
diff --git 
a/maven-release-plugin/src/it/setup/maven-version-policy-dummy/pom.xml 
b/maven-release-plugin/src/it/setup/maven-version-policy-dummy/pom.xml
new file mode 100644
index 00000000..0c48446d
--- /dev/null
+++ b/maven-release-plugin/src/it/setup/maven-version-policy-dummy/pom.xml
@@ -0,0 +1,92 @@
+<?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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.release</groupId>
+  <artifactId>maven-version-policy-dummy</artifactId>
+  <version>1.0</version>
+
+  <name>Maven Version Policy Dummy</name>
+  <description>
+    Provides a dummy version policy. It will ALWAYS output version 1.2.3 and 
log the provided settings.
+  </description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven.release</groupId>
+      <artifactId>maven-release-api</artifactId>
+      <version>@project.version@</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-api</artifactId>
+      <version>@scmVersion@</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.eclipse.sisu</groupId>
+      <artifactId>org.eclipse.sisu.inject</artifactId>
+      <version>@sisuVersion@</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+      <version>1</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <version>@slf4jVersion@</version>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>@mavenCompilerPluginVersion@</version>
+        <configuration>
+          <encoding>UTF-8</encoding>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+        <version>@sisuVersion@</version>
+        <executions>
+          <execution>
+            <id>index-project</id>
+            <goals>
+              <goal>main-index</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git 
a/maven-release-plugin/src/it/setup/maven-version-policy-dummy/src/main/java/org/apache/maven/its/release/version/DummyVersionPolicy.java
 
b/maven-release-plugin/src/it/setup/maven-version-policy-dummy/src/main/java/org/apache/maven/its/release/version/DummyVersionPolicy.java
new file mode 100644
index 00000000..221d1bee
--- /dev/null
+++ 
b/maven-release-plugin/src/it/setup/maven-version-policy-dummy/src/main/java/org/apache/maven/its/release/version/DummyVersionPolicy.java
@@ -0,0 +1,82 @@
+/*
+ * 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.
+ */
+
+package org.apache.maven.its.release.version;
+
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.shared.release.policy.version.VersionPolicy;
+import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
+import org.apache.maven.shared.release.policy.version.VersionPolicyResult;
+import org.apache.maven.shared.release.versions.VersionParseException;
+import org.eclipse.sisu.Description;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.io.File;
+
+@Singleton
+@Named( "DummyVersionPolicy" )
+@Description( "A dummy VersionPolicy that always gives version 1.2.3. and only 
logs the provided input." )
+public class DummyVersionPolicy implements VersionPolicy
+{
+    private static final Logger LOG = LoggerFactory.getLogger( 
DummyVersionPolicy.class );
+
+    public VersionPolicyResult getReleaseVersion( VersionPolicyRequest request 
)
+    {
+        LOG.info("[INPUT:Config] #{}# [INPUT:Config]", request.getConfig());
+        LOG.info("[INPUT:Version] #{}# [INPUT:Version]", request.getVersion());
+        LOG.info("[INPUT:WorkingDirectory] #{}# [INPUT:WorkingDirectory]", 
request.getWorkingDirectory());
+
+        ChangeLogScmRequest changeLogRequest = new ChangeLogScmRequest(
+                request.getScmRepository(),
+                new ScmFileSet(new File(request.getWorkingDirectory()))
+        );
+
+        ChangeLogScmResult changeLog;
+        try {
+            changeLog = request.getScmProvider().changeLog(changeLogRequest);
+        } catch (ScmException e) {
+            throw new RuntimeException(e);
+        }
+
+        int index=0 ;
+        for (ChangeSet changeSet : changeLog.getChangeLog().getChangeSets()) {
+            LOG.info("[INPUT:Changeset[{}].comment] #{}#", index, 
changeSet.getComment());
+            LOG.info("[INPUT:Changeset[{}].tag] #{}#", index, String.join(",", 
changeSet.getTags()));
+            index++;
+        }
+
+        VersionPolicyResult result = new VersionPolicyResult();
+        result.setVersion("1.2.3");
+        return result;
+    }
+
+    public VersionPolicyResult getDevelopmentVersion(VersionPolicyRequest 
request)
+        throws VersionParseException {
+        VersionPolicyResult result = new VersionPolicyResult();
+        result.setVersion("4.5.6-SNAPSHOT");
+        return result;
+    }
+}
diff --git 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
index 2c18d588..05b51f1b 100644
--- 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
+++ 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
@@ -30,6 +30,7 @@ import org.apache.maven.shared.release.ReleaseBranchRequest;
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 
 /**
  * Branch a project in SCM, using the same steps as the 
<code>release:prepare</code> goal, creating a branch instead of
@@ -200,6 +201,14 @@ public class BranchReleaseMojo
     @Parameter( defaultValue = "default", property = "projectVersionPolicyId" )
     private String projectVersionPolicyId;
 
+    /**
+     * Optional config for the VersionPolicy implementation used to calculate 
the project versions.
+     *
+     * @since 3.0.0-M8
+     */
+    @Parameter( property = "projectVersionPolicyConfig" )
+    private XmlPlexusConfiguration projectVersionPolicyConfig;
+
     /**
      * The role-hint for the {@link 
org.apache.maven.shared.release.policy.naming.NamingPolicy}
      * implementation used to calculate the project names.
@@ -260,6 +269,10 @@ public class BranchReleaseMojo
         config.setDefaultDevelopmentVersion( developmentVersion );
         config.setSuppressCommitBeforeTagOrBranch( suppressCommitBeforeBranch 
);
         config.setProjectVersionPolicyId( projectVersionPolicyId );
+        if ( projectVersionPolicyConfig != null )
+        {
+            config.setProjectVersionPolicyConfig( 
projectVersionPolicyConfig.toString() );
+        }
         config.setProjectNamingPolicyId( projectBranchNamingPolicyId );
         config.setScmBranchCommitComment( scmBranchCommitComment );
         config.setPinExternals( pinExternals );
diff --git 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
index 16b5d24a..f02f050e 100644
--- 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
+++ 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
@@ -34,6 +34,7 @@ import 
org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.ReleasePrepareRequest;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 
 /**
  * Prepare for a release in SCM. Steps through several phases to ensure the 
POM is ready to be released and then
@@ -240,6 +241,14 @@ public class PrepareReleaseMojo
     @Parameter( defaultValue = "default", property = "projectVersionPolicyId" )
     private String projectVersionPolicyId;
 
+    /**
+     * Optional config for the VersionPolicy implementation used to calculate 
the project versions.
+     *
+     * @since 3.0.0-M8
+     */
+    @Parameter( property = "projectVersionPolicyConfig" )
+    private XmlPlexusConfiguration projectVersionPolicyConfig;
+
     /**
      * The role-hint for the {@link 
org.apache.maven.shared.release.policy.naming.NamingPolicy}
      * implementation used to calculate the project branch and tag names.
@@ -382,6 +391,10 @@ public class PrepareReleaseMojo
         config.setSuppressCommitBeforeTagOrBranch( suppressCommitBeforeTag );
         config.setWaitBeforeTagging( waitBeforeTagging );
         config.setProjectVersionPolicyId( projectVersionPolicyId );
+        if ( projectVersionPolicyConfig != null )
+        {
+            config.setProjectVersionPolicyConfig( 
projectVersionPolicyConfig.toString() );
+        }
         config.setProjectNamingPolicyId( projectTagNamingPolicyId );
         config.setScmDevelopmentCommitComment( scmDevelopmentCommitComment );
         config.setScmReleaseCommitComment( scmReleaseCommitComment );
diff --git 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
index 33c93d11..801db127 100644
--- 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
+++ 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
@@ -29,6 +29,7 @@ import 
org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.ReleaseUpdateVersionsRequest;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 
 /**
  * Update the POM versions for a project. This performs the normal version 
updates of the <code>release:prepare</code>
@@ -93,6 +94,14 @@ public class UpdateVersionsMojo
     @Parameter( defaultValue = "default", property = "projectVersionPolicyId" )
     private String projectVersionPolicyId;
 
+    /**
+     * Optional config for the VersionPolicy implementation used to calculate 
the project versions.
+     *
+     * @since 3.0.0-M8
+     */
+    @Parameter( property = "projectVersionPolicyConfig" )
+    private XmlPlexusConfiguration projectVersionPolicyConfig;
+
     @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
@@ -104,7 +113,10 @@ public class UpdateVersionsMojo
         config.setScmUseEditMode( useEditMode );
         config.setUpdateDependencies( updateDependencies );
         config.setProjectVersionPolicyId( projectVersionPolicyId );
-
+        if ( projectVersionPolicyConfig != null )
+        {
+            config.setProjectVersionPolicyConfig( 
projectVersionPolicyConfig.toString() );
+        }
         config.addOriginalScmInfo( ArtifactUtils.versionlessKey( 
project.getGroupId(), project.getArtifactId() ),
                                    project.getScm() );
 
diff --git a/maven-release-plugin/src/site/apt/usage.apt.vm 
b/maven-release-plugin/src/site/apt/usage.apt.vm
index d0aa9996..e8f13fce 100644
--- a/maven-release-plugin/src/site/apt/usage.apt.vm
+++ b/maven-release-plugin/src/site/apt/usage.apt.vm
@@ -5,6 +5,7 @@
   Brett Porter <br...@apache.org>
   John Tolentino <jtolent...@apache.org>
   Robert Scholte <rfscho...@apache.org>
+  Niels Basjes <nielsbas...@apache.org>
   ------
   2011-11-10
   ------


Reply via email to