[maven-release-plugin] copy for tag maven-release-2.5.2

git-svn-id: https://svn.apache.org/repos/asf/maven/release/tags/maven-release-2.5.2@1674527 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-release-api/pom.xml b/maven-release-api/pom.xml
index c631722..a59ede3 100644
--- a/maven-release-api/pom.xml
+++ b/maven-release-api/pom.xml
@@ -1,55 +1,55 @@
-<?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/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.maven.release</groupId>
-    <artifactId>maven-release</artifactId>
-    <version>2.5.2</version>
-  </parent>
-
-  <artifactId>maven-release-api</artifactId>
-
-  <name>Maven Release APIs</name>
-  
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-repository-metadata</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-artifact</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-util</artifactId>
-      <version>1.0.0.v20140518</version>
-    </dependency>
-    
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.8.1</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
+<?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/xsd/maven-4.0.0.xsd">

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>org.apache.maven.release</groupId>

+    <artifactId>maven-release</artifactId>

+    <version>2.5.2</version>

+  </parent>

+

+  <artifactId>maven-release-api</artifactId>

+

+  <name>Maven Release APIs</name>

+  

+  <dependencies>

+    <dependency>

+      <groupId>org.apache.maven</groupId>

+      <artifactId>maven-repository-metadata</artifactId>

+    </dependency>

+    <dependency>

+      <groupId>org.apache.maven</groupId>

+      <artifactId>maven-artifact</artifactId>

+    </dependency>

+    <dependency>

+      <groupId>org.eclipse.aether</groupId>

+      <artifactId>aether-util</artifactId>

+      <version>1.0.0.v20140518</version>

+    </dependency>

+    

+    <dependency>

+      <groupId>junit</groupId>

+      <artifactId>junit</artifactId>

+      <version>4.8.1</version>

+      <scope>test</scope>

+    </dependency>

+  </dependencies>

 </project>
\ No newline at end of file
diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/PolicyException.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/PolicyException.java
index d3338d4..2380602 100644
--- a/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/PolicyException.java
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/PolicyException.java
@@ -19,6 +19,9 @@
  * under the License.

  */

 

+/**

+ * 

+ */

 public class PolicyException

     extends Exception

 {

diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicy.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicy.java
index be25104..a7dbd66 100644
--- a/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicy.java
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicy.java
@@ -22,10 +22,14 @@
 import org.apache.maven.shared.release.policy.PolicyException;

 import org.apache.maven.shared.release.versions.VersionParseException;

 

+/**

+ * 

+ */

 public interface VersionPolicy

 {

+    VersionPolicyResult getReleaseVersion( VersionPolicyRequest request )

+        throws PolicyException, VersionParseException;

 

-    public VersionPolicyResult getReleaseVersion( VersionPolicyRequest request ) throws PolicyException, VersionParseException;

-    

-    public VersionPolicyResult getDevelopmentVersion( VersionPolicyRequest request ) throws PolicyException, VersionParseException;

+    VersionPolicyResult getDevelopmentVersion( VersionPolicyRequest request )

+        throws PolicyException, VersionParseException;

 }

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 6f4d27d..ab18feb 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
@@ -1,7 +1,5 @@
 package org.apache.maven.shared.release.policy.version;

 

-import org.apache.maven.artifact.repository.metadata.Metadata;

-

 /*

  * Licensed to the Apache Software Foundation (ASF) under one

  * or more contributor license agreements.  See the NOTICE file

@@ -21,6 +19,11 @@
  * under the License.

  */

 

+import org.apache.maven.artifact.repository.metadata.Metadata;

+

+/**

+ * 

+ */

 public class VersionPolicyRequest

 {

 

diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicyResult.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicyResult.java
index 7d3fd72..309ff5e 100644
--- a/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicyResult.java
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/policy/version/VersionPolicyResult.java
@@ -19,6 +19,9 @@
  * under the License.

  */

 

+/**

+ * 

+ */

 public class VersionPolicyResult

 {

     private String version;

diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/Version.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/Version.java
index 8f0a81a..b41593f 100644
--- a/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/Version.java
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/Version.java
@@ -25,9 +25,11 @@
 import java.util.regex.Pattern;

 

 import org.apache.maven.artifact.ArtifactUtils;

-import org.apache.maven.artifact.versioning.ArtifactVersion;

 import org.codehaus.plexus.util.StringUtils;

 

+/**

+ * 

+ */

 public class Version

     implements Comparable<Version>

 {

@@ -82,15 +84,8 @@
      * cmaki 02242009 FIX for non-digit release numbers, e.g. trunk-SNAPSHOT or just SNAPSHOT This alternate pattern

      * supports version numbers like: trunk-SNAPSHOT branchName-SNAPSHOT SNAPSHOT

      */

-    public static final Pattern ALTERNATE_PATTERN = Pattern.compile( "^(SNAPSHOT|[a-zA-Z]+[_-]SNAPSHOT)" // for SNAPSHOT

-                                                                                                         // releases

-                                                                                                         // only

-                                                                                                         // (possible

-                                                                                                         // versions

-                                                                                                         // include:

-                                                                                                         // trunk-SNAPSHOT

-                                                                                                         // or SNAPSHOT)

-    );

+    // for SNAPSHOT releases only (possible versions include: trunk-SNAPSHOT or SNAPSHOT)

+    public static final Pattern ALTERNATE_PATTERN = Pattern.compile( "^(SNAPSHOT|[a-zA-Z]+[_-]SNAPSHOT)" );

 

     public Version( String version )

         throws VersionParseException

@@ -253,7 +248,7 @@
 

     /**

      * @throws VersionComparisonConflictException if {@link org.eclipse.aether.version.Version} and

-     *             {@link ArtifactVersion} give different results

+     *             {@link org.apache.maven.artifact.versioning.ArtifactVersion ArtifactVersion} give different results

      */

     public int compareTo( Version other )

         throws VersionComparisonConflictException

diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/VersionComparisonConflictException.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/VersionComparisonConflictException.java
index 4c80e52..12fad4f 100644
--- a/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/VersionComparisonConflictException.java
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/versions/VersionComparisonConflictException.java
@@ -19,6 +19,9 @@
  * under the License.

  */

 

+/**

+ * 

+ */

 public class VersionComparisonConflictException

     extends RuntimeException

 {

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 4bda604..eb2a030 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
@@ -19,6 +19,9 @@
  * under the License.

  */

 

+/**

+ * 

+ */

 public class VersionParseException

     extends Exception

 {

diff --git a/maven-release-manager/pom.xml b/maven-release-manager/pom.xml
index 9d6a84a..0d44d48 100644
--- a/maven-release-manager/pom.xml
+++ b/maven-release-manager/pom.xml
@@ -101,7 +101,7 @@
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-invoker</artifactId>
-      <version>2.1</version>
+      <version>2.2</version>
     </dependency>
     <dependency>
       <groupId>commons-lang</groupId>
@@ -119,7 +119,11 @@
         </exclusion>
       </exclusions>
     </dependency>
-
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>2.2</version>
+    </dependency>
     <!-- scm dependencies -->
     <dependency>
       <groupId>org.apache.maven.scm</groupId>
@@ -213,6 +217,7 @@
           <argLine>-Xmx256m</argLine>
           <systemPropertyVariables>
             <settings.security>${project.build.testOutputDirectory}/settings-security.xml</settings.security>
+            <injectedMavenHome>${maven.home}</injectedMavenHome>
           </systemPropertyVariables>
         </configuration>
       </plugin>
diff --git a/maven-release-manager/src/main/components-fragment.xml b/maven-release-manager/src/main/components-fragment.xml
index 368ae03..f1cb219 100644
--- a/maven-release-manager/src/main/components-fragment.xml
+++ b/maven-release-manager/src/main/components-fragment.xml
@@ -267,6 +267,7 @@
       <implementation>org.apache.maven.shared.release.phase.CheckPomPhase</implementation>
       <configuration>
         <scmRequired>true</scmRequired>
+        <snapshotsRequired>true</snapshotsRequired>
       </configuration>
       <requirements>
         <requirement>
@@ -280,6 +281,7 @@
       <implementation>org.apache.maven.shared.release.phase.CheckPomPhase</implementation>
       <configuration>
         <scmRequired>false</scmRequired>
+        <snapshotsRequired>false</snapshotsRequired>
       </configuration>
       <requirements>
         <requirement>
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
index a2d5292..3c035dc 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/DefaultReleaseManager.java
@@ -540,7 +540,7 @@
         updateListener( updateVersionsRequest.getReleaseManagerListener(), "updateVersions", GOAL_START );
 
         ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( updateVersionsRequest.getReleaseDescriptor(), 
-                                                                     updateVersionsRequest.getReleaseManagerListener() );
+                                                                   updateVersionsRequest.getReleaseManagerListener() );
 
         for ( String name : updateVersionsPhases )
         {
@@ -747,7 +747,8 @@
                          ReleaseManagerListener listener )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        perform( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, listener );
+        perform( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects,
+                 listener );
     }
 
     /** {@inheritDoc} */
@@ -803,7 +804,8 @@
                           ReleaseManagerListener listener )
         throws ReleaseExecutionException, ReleaseFailureException
     {
-        rollback( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, listener );
+        rollback( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects,
+                  listener );
     }
 
     /** {@inheritDoc} */
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
index 4f35f77..e9bc078 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/ReleaseManager.java
@@ -91,7 +91,8 @@
      * @throws ReleaseExecutionException if there is a problem performing the release
      * @throws ReleaseFailureException   if there is a problem performing the release
      *
-     * @deprecated Use {@link ReleaseManager#prepare(ReleaseDescriptor, ReleaseEnvironment, List, boolean, boolean)} instead.
+     * @deprecated Use {@link ReleaseManager#prepare(ReleaseDescriptor, ReleaseEnvironment, List, boolean, boolean)}
+     * instead.
      */
     void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects,
                   boolean resume, boolean dryRun )
@@ -135,7 +136,8 @@
      * @throws ReleaseExecutionException if there is a problem performing the release
      * @throws ReleaseFailureException   if there is a problem performing the release
      *
-     * @deprecated Use {@link ReleaseManager#prepare(ReleaseDescriptor, ReleaseEnvironment, List, boolean, boolean, ReleaseManagerListener)} instead.
+     * @deprecated Use {@link ReleaseManager#prepare(ReleaseDescriptor, ReleaseEnvironment, List, boolean, boolean,
+     * ReleaseManagerListener)} instead.
      */
     void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects,
                   boolean resume, boolean dryRun, ReleaseManagerListener listener )
@@ -146,7 +148,8 @@
                                      ReleaseManagerListener listener );
 
     /**
-     * @deprecated Use {@link ReleaseManager#prepareWithResult(ReleaseDescriptor, ReleaseEnvironment, List, boolean, boolean, ReleaseManagerListener)} instead.
+     * @deprecated Use {@link ReleaseManager#prepareWithResult(ReleaseDescriptor, ReleaseEnvironment, List, boolean,
+     * boolean, ReleaseManagerListener)} instead.
      */
     ReleaseResult prepareWithResult( ReleaseDescriptor releaseDescriptor, Settings settings,
                                      List<MavenProject> reactorProjects, boolean resume, boolean dryRun,
@@ -203,7 +206,8 @@
      * @throws ReleaseExecutionException if there is a problem performing the release
      * @throws ReleaseFailureException   if there is a problem performing the release
      *
-     * @deprecated Use {@link ReleaseManager#perform(ReleaseDescriptor, ReleaseEnvironment, List, ReleaseManagerListener)} instead.
+     * @deprecated Use {@link ReleaseManager#perform(ReleaseDescriptor, ReleaseEnvironment, List,
+     * ReleaseManagerListener)} instead.
      */
     void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects,
                   ReleaseManagerListener listener )
@@ -213,7 +217,8 @@
                                      List<MavenProject> reactorProjects, ReleaseManagerListener listener );
 
     /**
-     * @deprecated Use {@link ReleaseManager#performWithResult(ReleaseDescriptor, ReleaseEnvironment, List, ReleaseManagerListener)} instead.
+     * @deprecated Use {@link ReleaseManager#performWithResult(ReleaseDescriptor, ReleaseEnvironment, List,
+     * ReleaseManagerListener)} instead.
      */
     ReleaseResult performWithResult( ReleaseDescriptor releaseDescriptor, Settings settings,
                                      List<MavenProject> reactorProjects, ReleaseManagerListener listener );
@@ -265,7 +270,8 @@
      * @param releaseDescriptor the configuration to use for release
      * @param reactorProjects   the reactor projects
      */
-    void clean( ReleaseDescriptor releaseDescriptor, ReleaseManagerListener listener, List<MavenProject> reactorProjects );
+    void clean( ReleaseDescriptor releaseDescriptor, ReleaseManagerListener listener,
+                List<MavenProject> reactorProjects );
 
     /**
      * Clean a release.
@@ -326,7 +332,8 @@
      * @throws ReleaseExecutionException if there is a problem during release rollback
      * @throws ReleaseFailureException   if there is a problem during release rollback
      *
-     * @deprecated Use {@link ReleaseManager#rollback(ReleaseDescriptor, ReleaseEnvironment, List, ReleaseManagerListener)} instead.
+     * @deprecated Use {@link ReleaseManager#rollback(ReleaseDescriptor, ReleaseEnvironment, List,
+     * ReleaseManagerListener)} instead.
      */
     void rollback( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects,
                    ReleaseManagerListener listener )
@@ -399,7 +406,8 @@
      * @throws ReleaseExecutionException if there is a problem during release branch
      * @throws ReleaseFailureException   if there is a problem during release branch
      *
-     * @deprecated Use {@link ReleaseManager#branch(ReleaseDescriptor, ReleaseEnvironment, List, boolean, ReleaseManagerListener)} instead.
+     * @deprecated Use {@link ReleaseManager#branch(ReleaseDescriptor, ReleaseEnvironment, List, boolean,
+     * ReleaseManagerListener)} instead.
      */
     void branch( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects,
                  boolean dryRun, ReleaseManagerListener listener )
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 b4685ef..02890d7 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
@@ -342,7 +342,8 @@
     }
 
     // From org.apache.maven.cli.MavenCli.encryption(CliRequest)
-    private String encryptAndDecorate( String passwd ) throws IllegalStateException, SecDispatcherException, PlexusCipherException
+    private String encryptAndDecorate( String passwd )
+        throws IllegalStateException, SecDispatcherException, PlexusCipherException
     {
         String configurationFile = secDispatcher.getConfigurationFile();
 
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 0c9621a..522fef4 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
@@ -56,7 +56,8 @@
         mergeInto.setScmSourceUrl( mergeOverride( mergeInto.getScmSourceUrl(), toBeMerged.getScmSourceUrl() ) );
         mergeInto.setScmCommentPrefix(
             mergeOverride( mergeInto.getScmCommentPrefix(), toBeMerged.getScmCommentPrefix() ) );
-        mergeInto.setScmReleaseLabel( mergeOverride( mergeInto.getScmReleaseLabel(), toBeMerged.getScmReleaseLabel() ) );
+        mergeInto.setScmReleaseLabel( mergeOverride( mergeInto.getScmReleaseLabel(),
+                                                     toBeMerged.getScmReleaseLabel() ) );
         mergeInto.setScmTagBase( mergeOverride( mergeInto.getScmTagBase(), toBeMerged.getScmTagBase() ) );
         mergeInto.setScmTagNameFormat(
             mergeOverride( mergeInto.getScmTagNameFormat(), toBeMerged.getScmTagNameFormat() ) );
@@ -251,11 +252,16 @@
                     endIndex = propertyName.lastIndexOf( ".development" );
                     versionType = ReleaseDescriptor.DEVELOPMENT_KEY;
                 }
-                else
+                else if ( propertyName.indexOf( ".release" ) != -1 )
                 {
                     endIndex = propertyName.lastIndexOf( ".release" );
                     versionType = ReleaseDescriptor.RELEASE_KEY;
                 }
+                else
+                {
+                    // MRELEASE-834, probably a maven-dependency-plugin property
+                    continue;
+                }
 
                 artifactVersionlessKey = propertyName.substring( startIndex, endIndex );
 
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/env/DefaultReleaseEnvironment.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/env/DefaultReleaseEnvironment.java
index 4fd07f2..e0f67f4 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/env/DefaultReleaseEnvironment.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/env/DefaultReleaseEnvironment.java
@@ -24,6 +24,9 @@
 
 import org.apache.maven.settings.Settings;
 
+/**
+ * 
+ */
 public class DefaultReleaseEnvironment
     implements ReleaseEnvironment
 {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/env/ReleaseEnvironment.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/env/ReleaseEnvironment.java
index 42aacec..1d5a4ea 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/env/ReleaseEnvironment.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/env/ReleaseEnvironment.java
@@ -24,6 +24,9 @@
 
 import org.apache.maven.settings.Settings;
 
+/**
+ * 
+ */
 public interface ReleaseEnvironment
 {
 
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java
index e1b5a4f..63298b8 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/AbstractMavenExecutor.java
@@ -42,6 +42,9 @@
 import org.sonatype.plexus.components.sec.dispatcher.SecUtil;
 import org.sonatype.plexus.components.sec.dispatcher.model.SettingsSecurity;
 
+/**
+ * 
+ */
 public abstract class AbstractMavenExecutor
     implements MavenExecutor, LogEnabled
 {
@@ -70,7 +73,8 @@
                               String pomFileName, ReleaseResult result )
         throws MavenExecutorException
     {
-        executeGoals( workingDirectory, goals, new DefaultReleaseEnvironment(), interactive, additionalArguments, pomFileName, result );
+        executeGoals( workingDirectory, goals, new DefaultReleaseEnvironment(), interactive, additionalArguments,
+                      pomFileName, result );
     }
 
     /** {@inheritDoc} */
@@ -78,7 +82,8 @@
                               ReleaseResult result )
         throws MavenExecutorException
     {
-        executeGoals( workingDirectory, goals, new DefaultReleaseEnvironment(), interactive, additionalArguments, result );
+        executeGoals( workingDirectory, goals, new DefaultReleaseEnvironment(), interactive, additionalArguments,
+                      result );
     }
 
     /** {@inheritDoc} */
@@ -91,7 +96,8 @@
 
     /** {@inheritDoc} */
     public void executeGoals( File workingDirectory, String goals, ReleaseEnvironment releaseEnvironment,
-                              boolean interactive, String additionalArguments, String pomFileName, ReleaseResult result )
+                              boolean interactive, String additionalArguments, String pomFileName,
+                              ReleaseResult result )
         throws MavenExecutorException
     {
         List<String> goalsList = new ArrayList<String>();
@@ -100,21 +106,20 @@
             // accept both space and comma, so the old way still work
             // also accept line separators, so that goal lists can be spread
             // across multiple lines in the POM.
-            String[] tokens = StringUtils.split( goals, ", \n\r\t" );
-
-            for ( int i = 0; i < tokens.length; ++i )
+            for ( String token : StringUtils.split( goals, ", \n\r\t" ) )
             {
-                goalsList.add( tokens[i] );
+                goalsList.add( token );
             }
         }
-        executeGoals( workingDirectory, goalsList, releaseEnvironment, interactive, additionalArguments, pomFileName, result );
+        executeGoals( workingDirectory, goalsList, releaseEnvironment, interactive, additionalArguments, pomFileName,
+                      result );
     }
 
-    protected abstract void executeGoals( File workingDirectory, List<String> goals, ReleaseEnvironment releaseEnvironment,
-                              boolean interactive, String additionalArguments, String pomFileName, ReleaseResult result )
+    protected abstract void executeGoals( File workingDirectory, List<String> goals,
+                                          ReleaseEnvironment releaseEnvironment, boolean interactive,
+                                          String additionalArguments, String pomFileName, ReleaseResult result )
         throws MavenExecutorException;
 
-
     protected final Logger getLogger()
     {
         return logger;
@@ -204,7 +209,8 @@
     }
     
     // From org.apache.maven.cli.MavenCli.encryption(CliRequest)
-    private final String encryptAndDecorate( String passwd ) throws IllegalStateException, SecDispatcherException, PlexusCipherException
+    private String encryptAndDecorate( String passwd )
+        throws IllegalStateException, SecDispatcherException, PlexusCipherException
     {
         String configurationFile = secDispatcher.getConfigurationFile();
 
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java
index 432df76..beab1ff 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/InvokerMavenExecutor.java
@@ -101,6 +101,9 @@
     
     private static final String THREADS = "T";
 
+    private static final String BATCH_MODE = "B";
+    
+    public static final char ALTERNATE_USER_TOOLCHAINS = 't';
     
     static
     {
@@ -172,6 +175,12 @@
         
         OPTIONS.addOption( OptionBuilder.withLongOpt( "threads" ).withDescription( 
             "Thread count, for instance 2.0C where C is core multiplied" ).hasArg().create( THREADS ) );
+        
+        OPTIONS.addOption( OptionBuilder.withLongOpt( "batch-mode" ).withDescription( 
+            "Run in non-interactive (batch) mode" ).create( BATCH_MODE ) );
+        
+        OPTIONS.addOption( OptionBuilder.withLongOpt( "toolchains" ).withDescription( 
+            "Alternate path for the user toolchains file" ).hasArg().create( ALTERNATE_USER_TOOLCHAINS ) );
     }
 
     // TODO: Configuring an invocation request from a command line could as well be part of the Invoker API
@@ -314,6 +323,17 @@
             {
                 req.setThreads( cli.getOptionValue( THREADS ) );
             }
+            
+            if ( cli.hasOption( BATCH_MODE ) )
+            {
+                req.setInteractive( false );
+            }
+            
+            if ( cli.hasOption( ALTERNATE_USER_TOOLCHAINS ) )
+            {
+                req.setToolchainsFile( new File( cli.getOptionValue( ALTERNATE_USER_TOOLCHAINS ) ) );
+            }
+            
         }
         catch ( Exception e )
         {
@@ -341,21 +361,21 @@
             String mavenHome = System.getProperty( "maven.home" );
             if ( mavenHome == null )
             {
-                mavenHome = System.getenv("MAVEN_HOME");
+                mavenHome = System.getenv( "MAVEN_HOME" );
             }
             if ( mavenHome == null )
             {
-                mavenHome = System.getenv("M2_HOME");
+                mavenHome = System.getenv( "M2_HOME" );
             }
             mavenPath = mavenHome == null ? null : new File( mavenHome );
         }
         Invoker invoker =
-            new DefaultInvoker().setMavenHome( mavenPath ).setLogger( bridge ).setOutputHandler(
-                handler ).setErrorHandler( handler );
+            new DefaultInvoker().setMavenHome( mavenPath ).setLogger( bridge )
+                .setOutputHandler( handler ).setErrorHandler( handler );
 
         InvocationRequest req =
-            new DefaultInvocationRequest().setDebug( getLogger().isDebugEnabled() ).setBaseDirectory(
-                workingDirectory ).setInteractive( interactive );
+            new DefaultInvocationRequest().setDebug( getLogger().isDebugEnabled() )
+                .setBaseDirectory( workingDirectory ).setInteractive( interactive );
 
         if ( pomFileName != null )
         {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/MavenExecutor.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/MavenExecutor.java
index 522bad1..f2e6470 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/MavenExecutor.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/MavenExecutor.java
@@ -78,7 +78,8 @@
      * @param result              holds all results of the execution
      * @throws MavenExecutorException if an error occurred executing Maven
      *
-     * @deprecated Use {@link MavenExecutor#executeGoals(File, String, ReleaseEnvironment, boolean, String, String, ReleaseResult)} instead
+     * @deprecated Use {@link MavenExecutor#executeGoals(File, String, ReleaseEnvironment, boolean, String, String,
+     * ReleaseResult)} instead
      */
     void executeGoals( File workingDirectory, String goals, boolean interactive, String additionalArguments,
                        String pomFileName, ReleaseResult result )
@@ -94,7 +95,8 @@
      * @param result              holds all results of the execution
      * @throws MavenExecutorException if an error occurred executing Maven
      *
-     * @deprecated Use {@link MavenExecutor#executeGoals(File, String, ReleaseEnvironment, boolean, String, ReleaseResult)} instead
+     * @deprecated Use {@link MavenExecutor#executeGoals(File, String, ReleaseEnvironment, boolean, String,
+     * ReleaseResult)} instead
      */
     void executeGoals( File workingDirectory, String goals, boolean interactive, String additionalArguments,
                        ReleaseResult result )
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/RawStreamPumper.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/RawStreamPumper.java
index 9ef6804..63c645d 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/RawStreamPumper.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/RawStreamPumper.java
@@ -23,6 +23,9 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 
+/**
+ * 
+ */
 public class RawStreamPumper
     extends Thread 
 {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/TeeOutputStream.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/TeeOutputStream.java
index 8ace507..bb75a51 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/TeeOutputStream.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/exec/TeeOutputStream.java
@@ -24,6 +24,9 @@
 import java.io.IOException;
 import java.io.OutputStream;
 
+/**
+ * 
+ */
 public class TeeOutputStream 
     extends FilterOutputStream 
 {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePomsPhase.java
index b1d7c8d..f7dbf54 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractReleasePomsPhase.java
@@ -44,12 +44,14 @@
      */
     private ScmRepositoryConfigurator scmRepositoryConfigurator;
 
-    protected ScmRepository getScmRepository( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment )
+    protected ScmRepository getScmRepository( ReleaseDescriptor releaseDescriptor,
+                                              ReleaseEnvironment releaseEnvironment )
         throws ReleaseFailureException, ReleaseExecutionException
     {
         try
         {
-            return scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );
+            return scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor,
+                                                                      releaseEnvironment.getSettings() );
         }
         catch ( ScmRepositoryException exception )
         {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
index 903b159..f4d19c9 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
@@ -174,6 +174,7 @@
                  * fail. So let's try harder. Maybe some day, when JDOM offers a StaxBuilder and this builder employes
                  * XMLInputFactory2.P_REPORT_PROLOG_WHITESPACE, this whole mess can be avoided.
                  */
+                // CHECKSTYLE_OFF: LocalFinalVariableName
                 final String SPACE = "\\s++";
                 final String XML = "<\\?(?:(?:[^\"'>]++)|(?:\"[^\"]*+\")|(?:'[^\']*+'))*+>";
                 final String INTSUB = "\\[(?:(?:[^\"'\\]]++)|(?:\"[^\"]*+\")|(?:'[^\']*+'))*+\\]";
@@ -186,6 +187,7 @@
                     "(?:(?:" + SPACE + ")|(?:" + XML + ")|(?:" + DOCTYPE + ")|(?:" + COMMENT + ")|(?:" + PI + "))*";
                 final String OUTRO = "(?:(?:" + SPACE + ")|(?:" + COMMENT + ")|(?:" + PI + "))*";
                 final String POM = "(?s)(" + INTRO + ")(.*?)(" + OUTRO + ")";
+                // CHECKSTYLE_ON: LocalFinalVariableName
 
                 Matcher matcher = Pattern.compile( POM ).matcher( content );
                 if ( matcher.matches() )
@@ -258,8 +260,8 @@
     }
 
     private void transformDocument( MavenProject project, Element rootElement, ReleaseDescriptor releaseDescriptor,
-                                    List<MavenProject> reactorProjects, ScmRepository scmRepository, ReleaseResult result,
-                                    boolean simulate )
+                                    List<MavenProject> reactorProjects, ScmRepository scmRepository,
+                                    ReleaseResult result, boolean simulate )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         Namespace namespace = rootElement.getNamespace();
@@ -394,8 +396,8 @@
         }
     }
 
-    private void rewriteVersion( Element rootElement, Namespace namespace, Map<String, String> mappedVersions, String projectId,
-                                 MavenProject project, String parentVersion )
+    private void rewriteVersion( Element rootElement, Namespace namespace, Map<String, String> mappedVersions,
+                                 String projectId, MavenProject project, String parentVersion )
         throws ReleaseFailureException
     {
         Element versionElement = rootElement.getChild( "version", namespace );
@@ -425,8 +427,10 @@
         }
     }
 
-    private String rewriteParent( MavenProject project, Element rootElement, Namespace namespace, Map<String, String> mappedVersions,
-                                  Map<String, Map<String, String>> resolvedSnapshotDependencies, Map<String, String> originalVersions )
+    private String rewriteParent( MavenProject project, Element rootElement, Namespace namespace,
+                                  Map<String, String> mappedVersions,
+                                  Map<String, Map<String, String>> resolvedSnapshotDependencies,
+                                  Map<String, String> originalVersions )
         throws ReleaseFailureException
     {
         String parentVersion = null;
@@ -458,9 +462,9 @@
     }
 
     private void rewriteArtifactVersions( Collection<Element> elements, Map<String, String> mappedVersions,
-                                          Map<String, Map<String, String>> resolvedSnapshotDependencies, Map<String, String> originalVersions,
-                                          Model projectModel, Element properties, ReleaseResult result,
-                                          ReleaseDescriptor releaseDescriptor )
+                                          Map<String, Map<String, String>> resolvedSnapshotDependencies,
+                                          Map<String, String> originalVersions, Model projectModel, Element properties,
+                                          ReleaseResult result, ReleaseDescriptor releaseDescriptor )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         if ( elements == null )
@@ -565,7 +569,8 @@
                             else if ( !mappedVersion.equals( rawVersion ) )
                             {
                                 if ( mappedVersion.matches( "\\$\\{project.+\\}" )
-                                    || mappedVersion.matches( "\\$\\{pom.+\\}" ) || "${version}".equals( mappedVersion ) )
+                                    || mappedVersion.matches( "\\$\\{pom.+\\}" )
+                                    || "${version}".equals( mappedVersion ) )
                                 {
                                     logInfo( result, "  Ignoring artifact version update for expression "
                                         + mappedVersion );
@@ -735,9 +740,10 @@
                                                           Map<String, Map<String, String>> resolvedSnapshots );
 
     protected abstract Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
-                                                                  List<MavenProject> reactorProjects, boolean simulate );
+                                                                  List<MavenProject> reactorProjects,
+                                                                  boolean simulate );
 
-    protected abstract Map<String,String> getNextVersionMap( ReleaseDescriptor releaseDescriptor );
+    protected abstract Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor );
 
     protected abstract void transformScm( MavenProject project, Element rootElement, Namespace namespace,
                                           ReleaseDescriptor releaseDescriptor, String projectId,
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java
index 78f6605..7a55bf1 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRunGoalsPhase.java
@@ -48,7 +48,8 @@
     private Map<String, MavenExecutor> mavenExecutors;
 
     /**
-     * @deprecated Use {@link AbstractRunGoalsPhase#execute(ReleaseDescriptor, ReleaseEnvironment, File, String)} instead.
+     * @deprecated Use {@link AbstractRunGoalsPhase#execute(ReleaseDescriptor, ReleaseEnvironment, File, String)}
+     * instead.
      */
     public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, File workingDirectory,
                                   String additionalArguments )
@@ -78,9 +79,10 @@
                         "Cannot find Maven executor with id: " + releaseEnvironment.getMavenExecutorId() );
                 }
 
-                mavenExecutor.executeGoals( determineWorkingDirectory( workingDirectory,
-                                                                       releaseDescriptor.getScmRelativePathProjectDirectory() ),
-                                            goals, releaseEnvironment, releaseDescriptor.isInteractive(),
+                File wd =
+                    determineWorkingDirectory( workingDirectory,
+                                               releaseDescriptor.getScmRelativePathProjectDirectory() );
+                mavenExecutor.executeGoals( wd, goals, releaseEnvironment, releaseDescriptor.isInteractive(),
                                             additionalArguments, releaseDescriptor.getPomFileName(), result );
             }
         }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java
index 65800ae..990060d 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java
@@ -170,8 +170,8 @@
         }
     }
 
-    protected void simulateCheckins( ReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects, ReleaseResult result,
-                                     String message )
+    protected void simulateCheckins( ReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects,
+                                     ReleaseResult result, String message )
     {
         Collection<File> pomFiles = createPomFiles( releaseDescriptor, reactorProjects );
         logInfo( result, "Full run would be commit " + pomFiles.size() + " files with message: '" + message + "'" );
@@ -206,7 +206,8 @@
         return pomFiles;
     }
 
-    protected static List<File> createPomFiles( ReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects )
+    protected static List<File> createPomFiles( ReleaseDescriptor releaseDescriptor,
+                                                List<MavenProject> reactorProjects )
     {
         List<File> pomFiles = new ArrayList<File>();
         for ( MavenProject project : reactorProjects )
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckCompletedPreparePhasesPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckCompletedPreparePhasesPhase.java
index eb99b35..1d06095 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckCompletedPreparePhasesPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckCompletedPreparePhasesPhase.java
@@ -31,7 +31,8 @@
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  * @version $Id$
- * @plexus.component role="org.apache.maven.shared.release.phase.ReleasePhase" role-hint="verify-completed-prepare-phases"
+ * @plexus.component role="org.apache.maven.shared.release.phase.ReleasePhase"
+ *                   role-hint="verify-completed-prepare-phases"
  */
 public class CheckCompletedPreparePhasesPhase
     extends AbstractReleasePhase
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
index a643733..dd3c85f 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckDependencySnapshotsPhase.java
@@ -91,7 +91,8 @@
     private Set<Artifact> usedSnapshotExtensions = new HashSet<Artifact>();
     private Set<Artifact> usedSnapshotPlugins = new HashSet<Artifact>();
 
-    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                                  List<MavenProject> reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         ReleaseResult result = new ReleaseResult();
@@ -116,7 +117,8 @@
         return result;
     }
 
-    private void checkProject( MavenProject project, Map<String, String> originalVersions, ReleaseDescriptor releaseDescriptor )
+    private void checkProject( MavenProject project, Map<String, String> originalVersions,
+                               ReleaseDescriptor releaseDescriptor )
         throws ReleaseFailureException, ReleaseExecutionException
     {
         @SuppressWarnings( "unchecked" )
@@ -289,7 +291,9 @@
         }
     }
 
-    private static boolean checkArtifact( Artifact artifact, Map<String, String> originalVersions, Map<String, Artifact> artifactMapByVersionlessId, ReleaseDescriptor releaseDescriptor )
+    private static boolean checkArtifact( Artifact artifact, Map<String, String> originalVersions,
+                                          Map<String, Artifact> artifactMapByVersionlessId,
+                                          ReleaseDescriptor releaseDescriptor )
     {
         Artifact checkArtifact = getArtifactFromMap( artifact, artifactMapByVersionlessId );
 
@@ -308,14 +312,16 @@
         return checkArtifact;
     }
 
-    private static boolean checkArtifact( Artifact artifact, Map<String, String> originalVersions, ReleaseDescriptor releaseDescriptor )
+    private static boolean checkArtifact( Artifact artifact, Map<String, String> originalVersions,
+                                          ReleaseDescriptor releaseDescriptor )
     {
         String versionlessArtifactKey = ArtifactUtils.versionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
 
         // We are only looking at dependencies external to the project - ignore anything found in the reactor as
         // it's version will be updated
         boolean result =
-            artifact.isSnapshot() && !artifact.getBaseVersion().equals( originalVersions.get( versionlessArtifactKey ) );
+            artifact.isSnapshot()
+            && !artifact.getBaseVersion().equals( originalVersions.get( versionlessArtifactKey ) );
 
         // If we have a snapshot but allowTimestampedSnapshots is true, accept the artifact if the version
         // indicates that it is a timestamped snapshot.
@@ -327,7 +333,8 @@
         return result;
     }
 
-    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                                   List<MavenProject> reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         // It makes no modifications, so simulate is the same as execute
@@ -357,8 +364,9 @@
         return message;
     }
 
-    private void resolveSnapshots( Set<Artifact> projectDependencies, Set<Artifact> reportDependencies, Set<Artifact> extensionDependencies,
-                                   Set<Artifact> pluginDependencies, ReleaseDescriptor releaseDescriptor )
+    private void resolveSnapshots( Set<Artifact> projectDependencies, Set<Artifact> reportDependencies,
+                                   Set<Artifact> extensionDependencies, Set<Artifact> pluginDependencies,
+                                   ReleaseDescriptor releaseDescriptor )
         throws ReleaseExecutionException
     {
         try
@@ -403,6 +411,8 @@
                     case 4:
                         resolvedSnapshots = processSnapshot( extensionDependencies );
                         break;
+
+                    default:
                 }
 
                 releaseDescriptor.getResolvedSnapshotDependencies().putAll( resolvedSnapshots );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckPomPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckPomPhase.java
index 282b63b..e8008cb 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckPomPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/CheckPomPhase.java
@@ -49,9 +49,15 @@
      */
     private boolean scmRequired = true;
     
+    /**
+     * @since 2.5.2
+     */
+    private boolean snapshotsRequired = true;
+
     private ScmRepositoryConfigurator scmRepositoryConfigurator;
 
-    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                                  List<MavenProject> reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         ReleaseResult result = new ReleaseResult();
@@ -83,7 +89,8 @@
 
             try
             {
-                scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );
+                scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor,
+                                                                   releaseEnvironment.getSettings() );
             }
             catch ( ScmRepositoryException e )
             {
@@ -103,10 +110,12 @@
             if ( ArtifactUtils.isSnapshot( project.getVersion() ) )
             {
                 containsSnapshotProjects = true;
+
+                break;
             }
         }
 
-        if ( !containsSnapshotProjects && !releaseDescriptor.isBranchCreation() )
+        if ( snapshotsRequired && !containsSnapshotProjects && !releaseDescriptor.isBranchCreation() )
         {
             throw new ReleaseFailureException( "You don't have a SNAPSHOT project in the reactor projects list." );
         }
@@ -116,7 +125,8 @@
         return result;
     }
 
-    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                                   List<MavenProject> reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         // It makes no modifications, so simulate is the same as execute
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/EndReleasePhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/EndReleasePhase.java
index 0ae2376..f5de4f6 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/EndReleasePhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/EndReleasePhase.java
@@ -37,7 +37,8 @@
 public class EndReleasePhase
     extends AbstractReleasePhase
 {
-    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
+    public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                                  List<MavenProject> reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         ReleaseResult result = new ReleaseResult();
@@ -49,7 +50,8 @@
         return result;
     }
 
-    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
+    public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                                   List<MavenProject> reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException
     {
         ReleaseResult result = new ReleaseResult();
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
index dd3781e..d289b72 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
@@ -141,7 +141,8 @@
     {
         // create release pom
 
-        Model releasePom = createReleaseModel( project, releaseDescriptor, releaseEnvironment, reactorProjects, result );
+        Model releasePom = createReleaseModel( project, releaseDescriptor, releaseEnvironment, reactorProjects,
+                                               result );
 
         // write release pom to file
 
@@ -332,7 +333,8 @@
         return releaseDescriptor.getReleaseVersions();
     }
 
-    private String getNextVersion( Map<String, String> mappedVersions, String groupId, String artifactId, String version )
+    private String getNextVersion( Map<String, String> mappedVersions, String groupId, String artifactId,
+                                   String version )
         throws ReleaseFailureException
     {
         // TODO: share with RewritePomsForReleasePhase.rewriteVersion
@@ -429,7 +431,8 @@
         return releaseDependencies;
     }
 
-    private String getReleaseVersion( Map<String, String> originalVersions, Map<String, String> mappedVersions, Artifact artifact )
+    private String getReleaseVersion( Map<String, String> originalVersions, Map<String, String> mappedVersions,
+                                      Artifact artifact )
         throws ReleaseFailureException
     {
         String key = ArtifactUtils.versionlessKey( artifact );
@@ -461,7 +464,8 @@
         return version;
     }
 
-    private List<Plugin> createReleasePlugins( Map<String, String> originalVersions, Map<String, String> mappedVersions, MavenProject project )
+    private List<Plugin> createReleasePlugins( Map<String, String> originalVersions,
+                                               Map<String, String> mappedVersions, MavenProject project )
         throws ReleaseFailureException
     {
         List<Plugin> releasePlugins = null;
@@ -505,8 +509,8 @@
         return releasePlugins;
     }
 
-    private List<ReportPlugin> createReleaseReportPlugins( Map<String, String> originalVersions, Map<String, String> mappedVersions,
-                                                           MavenProject project )
+    private List<ReportPlugin> createReleaseReportPlugins( Map<String, String> originalVersions,
+                                                           Map<String, String> mappedVersions, MavenProject project )
         throws ReleaseFailureException
     {
         List<ReportPlugin> releaseReportPlugins = null;
@@ -546,7 +550,8 @@
         return releaseReportPlugins;
     }
 
-    private List<Extension> createReleaseExtensions( Map<String, String> originalVersions, Map<String, String> mappedVersions, MavenProject project )
+    private List<Extension> createReleaseExtensions( Map<String, String> originalVersions,
+                                                     Map<String, String> mappedVersions, MavenProject project )
         throws ReleaseFailureException
     {
         List<Extension> releaseExtensions = null;
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java
index 3f42bbf..5d77028 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/InputVariablesPhase.java
@@ -78,7 +78,8 @@
         try
         {
             ScmRepository repository =
-                scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );
+                scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor,
+                                                                   releaseEnvironment.getSettings() );
 
             return scmRepositoryConfigurator.getRepositoryProvider( repository );
         }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
index 350c762..bc17ed8 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/MapVersionsPhase.java
@@ -52,7 +52,8 @@
  * <p>
  * <table>
  *   <tr>
- *     <th>MapVersionsPhase field</th><th>map-release-versions</th><th>map-branch-versions</th><th>map-development-versions</th>
+ *     <th>MapVersionsPhase field</th><th>map-release-versions</th><th>map-branch-versions</th>
+ *     <th>map-development-versions</th>
  *   </tr>
  *   <tr>
  *     <td>convertToSnapshot</td>     <td>false</td>               <td>true</td>               <td>true</td>
@@ -205,7 +206,8 @@
         {
             // no branch modification
             if ( !( releaseDescriptor.isUpdateBranchVersions()
-                          && ( ArtifactUtils.isSnapshot( project.getVersion() ) || releaseDescriptor.isUpdateVersionsToSnapshot() ) ) )
+                            && ( ArtifactUtils.isSnapshot( project.getVersion() )
+                                            || releaseDescriptor.isUpdateVersionsToSnapshot() ) ) )
             {
                 return project.getVersion();
             }
@@ -263,19 +265,20 @@
                     {
                         try
                         {
-                            suggestedVersion = resolveSuggestedVersion( baseVersion, releaseDescriptor.getProjectVersionPolicyId() );
+                            suggestedVersion =
+                                resolveSuggestedVersion( baseVersion, releaseDescriptor.getProjectVersionPolicyId() );
                         }
                         catch ( VersionParseException e )
                         {
                             if ( releaseDescriptor.isInteractive() )
                             {
-                                suggestedVersion = resolveSuggestedVersion( "1.0", releaseDescriptor.getProjectVersionPolicyId() );
+                                suggestedVersion =
+                                    resolveSuggestedVersion( "1.0", releaseDescriptor.getProjectVersionPolicyId() );
                             }
                             else
                             {
-                                throw new ReleaseExecutionException(
-                                                                     "Error parsing version, cannot determine next version: "
-                                                                         + e.getMessage(), e );
+                                throw new ReleaseExecutionException( "Error parsing version, cannot determine next "
+                                    + "version: " + e.getMessage(), e );
                             }
                         }
                     }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ReleasePhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ReleasePhase.java
index 4fc2b5d..a0af657 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ReleasePhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ReleasePhase.java
@@ -51,7 +51,8 @@
      * @throws ReleaseFailureException   a failure during the execution of the phase
      * @return the release result
      */
-    ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
+    ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                           List<MavenProject> reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException;
 
     /**
@@ -64,7 +65,8 @@
      * @throws ReleaseFailureException   a failure during the execution of the phase
      * @return the release result
      */
-    ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
+    ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
+                            List<MavenProject> reactorProjects )
         throws ReleaseExecutionException, ReleaseFailureException;
 
     /**
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java
index 1913925..c4a644c 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomVersionsPhase.java
@@ -54,12 +54,11 @@
         return false;
     }
 
-    @SuppressWarnings( "unchecked" )
     @Override
-    protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects,
-                                         boolean simulate )
+    protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
+                                                         List<MavenProject> reactorProjects, boolean simulate )
     {
-        return releaseDescriptor.getReleaseVersions();
+        return releaseDescriptor.getOriginalVersions( reactorProjects );
     }
 
     @SuppressWarnings( "unchecked" )
@@ -70,7 +69,8 @@
     }
 
     @Override
-    protected String getResolvedSnapshotVersion( String artifactVersionlessKey, Map<String, Map<String, String>> resolvedSnapshotsMap )
+    protected String getResolvedSnapshotVersion( String artifactVersionlessKey,
+                                                 Map<String, Map<String, String>> resolvedSnapshotsMap )
     {
         // Only update the pom version, not the dependency versions
         return null;
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java
index 6fb6e5b..9397a26 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java
@@ -60,7 +60,8 @@
 
                 try
                 {
-                    translateScm( project, releaseDescriptor, scmRoot, namespace, scmRepository, result, commonBasedir );
+                    translateScm( project, releaseDescriptor, scmRoot, namespace, scmRepository, result,
+                                  commonBasedir );
                 }
                 catch ( IOException e )
                 {
@@ -153,7 +154,8 @@
                 }
                 
                 String value =
-                    translator.translateBranchUrl( scm.getConnection(), branchName + subDirectoryBranch, scmConnectionBranch );
+                    translator.translateBranchUrl( scm.getConnection(), branchName + subDirectoryBranch,
+                                                   scmConnectionBranch );
                 if ( !value.equals( scm.getConnection() ) )
                 {
                     rewriteElement( "connection", value, scmRoot, namespace );
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java
index 8b6b983..fc52404 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java
@@ -61,7 +61,8 @@
 
                 try
                 {
-                    translateScm( project, releaseDescriptor, scmRoot, namespace, scmRepository, result, commonBasedir );
+                    translateScm( project, releaseDescriptor, scmRoot, namespace, scmRepository, result,
+                                  commonBasedir );
                 }
                 catch ( IOException e )
                 {
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java
index 4954fb5..26fb489 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmBranchPhase.java
@@ -77,7 +77,8 @@
         {
             repository =
                 scmRepositoryConfigurator.getConfiguredRepository( basedirAlignedReleaseDescriptor.getScmSourceUrl(),
-                                                                   releaseDescriptor, releaseEnvironment.getSettings() );
+                                                                   releaseDescriptor,
+                                                                   releaseEnvironment.getSettings() );
 
             repository.getProviderRepository().setPushChanges( releaseDescriptor.isPushChanges() );
 
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java
index 9cb5a81..f93d6ca 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmCheckModificationsPhase.java
@@ -94,7 +94,8 @@
             // SelectorUtils expects OS-specific paths and patterns
             for ( String additionalExclude : additionalExcludes )
             {
-                exclusionPatterns.add( additionalExclude.replace( "\\", File.separator ).replace( "/", File.separator ) );
+                exclusionPatterns.add( additionalExclude.replace( "\\", File.separator )
+                                       .replace( "/", File.separator ) );
             }
         }
 
@@ -106,7 +107,8 @@
         try
         {
             repository =
-                scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, releaseEnvironment.getSettings() );
+                scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor,
+                                                                   releaseEnvironment.getSettings() );
 
             provider = scmRepositoryConfigurator.getRepositoryProvider( repository );
         }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/policies/DefaultVersionPolicy.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/policies/DefaultVersionPolicy.java
index 88972fb..931cd42 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/policies/DefaultVersionPolicy.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/policies/DefaultVersionPolicy.java
@@ -32,7 +32,8 @@
  * 

  * @plexus.component role="org.apache.maven.shared.release.policy.version.VersionPolicy" role-hint="default"

  */

-public class DefaultVersionPolicy implements VersionPolicy

+public class DefaultVersionPolicy

+    implements VersionPolicy

 {

 

     public VersionPolicyResult getReleaseVersion( VersionPolicyRequest request )

@@ -45,7 +46,8 @@
     public VersionPolicyResult getDevelopmentVersion( VersionPolicyRequest request )

         throws PolicyException, VersionParseException

     {

-        String developmentVersion = new DefaultVersionInfo( request.getVersion() ).getNextVersion().getSnapshotVersionString();

+        String developmentVersion =

+            new DefaultVersionInfo( request.getVersion() ).getNextVersion().getSnapshotVersionString();

         return new VersionPolicyResult().setVersion( developmentVersion );

     }

 

diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/PomFinder.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/PomFinder.java
index bf52ea9..e41e62b 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/PomFinder.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/PomFinder.java
@@ -307,7 +307,8 @@
             {
                 return false;
             }
-            if ( parentGroupId != null ? !parentGroupId.equals( pomInfo.parentGroupId ) : pomInfo.parentGroupId != null )
+            if ( parentGroupId != null ? !parentGroupId.equals( pomInfo.parentGroupId )
+                                       : pomInfo.parentGroupId != null )
             {
                 return false;
             }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java
index 6180ad7..a179af7 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java
@@ -26,6 +26,7 @@
 import java.util.List;
 import java.util.Locale;
 
+import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.model.Model;
 import org.apache.maven.project.MavenProject;
@@ -47,8 +48,10 @@
  */
 public class ReleaseUtil
 {
+    @SuppressWarnings( "checkstyle:constantname" )
     public static final String RELEASE_POMv4 = "release-pom.xml";
 
+    @SuppressWarnings( "checkstyle:constantname" )
     public static final String POMv4 = "pom.xml";
 
     private static final String FS = File.separator;
@@ -183,7 +186,8 @@
         }
 
         int parentLevels =
-            getBaseWorkingDirectoryParentCount( basedir, FileUtils.normalize( releaseDescriptor.getWorkingDirectory() ) );
+            getBaseWorkingDirectoryParentCount( basedir,
+                                                FileUtils.normalize( releaseDescriptor.getWorkingDirectory() ) );
 
         String url = releaseDescriptor.getScmSourceUrl();
         url = realignScmUrl( parentLevels, url );
@@ -240,8 +244,8 @@
 
         // we can safely assume case-insensitivity as we are just backtracking, not comparing. This helps with issues
         // on Windows with C: vs c:
-        workingDirectory = workingDirectory.toLowerCase( Locale.ENGLISH );
-        basedir = basedir.toLowerCase( Locale.ENGLISH );
+        workingDirectory = FilenameUtils.normalize( workingDirectory.toLowerCase( Locale.ENGLISH ) );
+        basedir = FilenameUtils.normalize( basedir.toLowerCase( Locale.ENGLISH ) );
 
         // MRELEASE-663
         // For Windows is does matter if basedir ends with a file-separator or not to be able to compare.
@@ -265,6 +269,10 @@
     {
         if ( !StringUtils.isEmpty( url ) )
         {
+            // normalize
+            url = url.replaceAll( "/\\./", "/" ).replaceAll( "/\\.$", "" ).
+                            replaceAll( "/[^/]+/\\.\\./", "/" ).replaceAll( "/[^/]+/\\.\\.$", "" );
+
             int index = url.length();
             String suffix = "";
             if ( url.endsWith( "/" ) )
@@ -272,6 +280,7 @@
                 index--;
                 suffix = "/";
             }
+
             for ( int i = 0; i < parentLevels && index > 0; i++ )
             {
                 index = url.lastIndexOf( '/', index - 1 );
@@ -281,6 +290,7 @@
             {
                 url = url.substring( 0, index ) + suffix;
             }
+            
         }
         return url;
     }
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/versions/DefaultVersionInfo.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/versions/DefaultVersionInfo.java
index 97cc64a..b6ec732 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/versions/DefaultVersionInfo.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/versions/DefaultVersionInfo.java
@@ -54,7 +54,8 @@
  * <p/>
  * Leading zeros are significant when performing comparisons.
  * <p/>
- * TODO: this parser is better than DefaultArtifactVersion - replace it with this (but align naming) and then remove this from here.
+ * TODO: this parser is better than DefaultArtifactVersion - replace it with this (but align naming) and then remove
+ * this from here.
  */
 public class DefaultVersionInfo
     implements VersionInfo
@@ -109,9 +110,8 @@
      * branchName-SNAPSHOT
      * SNAPSHOT
      */
-    public static final Pattern ALTERNATE_PATTERN = Pattern.compile(
-        "^(SNAPSHOT|[a-zA-Z]+[_-]SNAPSHOT)"      // for SNAPSHOT releases only (possible versions include: trunk-SNAPSHOT or SNAPSHOT)
-    );
+    // for SNAPSHOT releases only (possible versions include: trunk-SNAPSHOT or SNAPSHOT)
+    public static final Pattern ALTERNATE_PATTERN = Pattern.compile( "^(SNAPSHOT|[a-zA-Z]+[_-]SNAPSHOT)" );
 
     /**
      * Constructs this object and parses the supplied version string.
@@ -214,12 +214,13 @@
     }
 
     /**
-     * Compares this {@link DefaultVersionInfo} to the supplied {@link DefaultVersionInfo}
-     * to determine which version is greater.
+     * Compares this {@link DefaultVersionInfo} to the supplied {@link DefaultVersionInfo} to determine which version is
+     * greater.
      *
      * @param obj the comparison version
      * @return the comparison value
-     * @throws IllegalArgumentException if the components differ between the objects or if either of the annotations can not be determined.
+     * @throws IllegalArgumentException if the components differ between the objects or if either of the annotations can
+     *             not be determined.
      */
     public int compareTo( VersionInfo obj )
     {
@@ -259,6 +260,11 @@
         return compareTo( (VersionInfo) obj ) == 0;
     }
 
+    public int hashCode()
+    {
+        return strVersion.toLowerCase( Locale.ENGLISH ).hashCode();
+    }
+
     /**
      * Takes a string and increments it as an integer.
      * Preserves any lpad of "0" zeros.
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java
index 659b885..b067983 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/config/ReleaseUtilsTest.java
@@ -284,6 +284,14 @@
         assertEquals( "1.3-SNAPSHOT", versionMap.get( ReleaseDescriptor.DEVELOPMENT_KEY) );
     }
 
+    // MRELEASE-834
+    public void testSystemPropertyStartingWithDependency()
+    {
+        Properties properties = new Properties();
+        properties.setProperty( "dependency.locations.enabled", "false" );
+        ReleaseUtils.copyPropertiesToReleaseDescriptor( properties );
+    }
+    
     private static ReleaseDescriptor copyReleaseDescriptor( ReleaseDescriptor originalReleaseDescriptor )
     {
         return createReleaseDescriptor( originalReleaseDescriptor.getWorkingDirectory() );
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/InvokerMavenExecutorTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/InvokerMavenExecutorTest.java
index 0e9520d..1b5d1d6 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/InvokerMavenExecutorTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/exec/InvokerMavenExecutorTest.java
@@ -33,7 +33,6 @@
 import org.apache.maven.settings.Settings;
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
 import org.apache.maven.shared.invoker.DefaultInvocationRequest;
-import org.apache.maven.shared.invoker.InvocationOutputHandler;
 import org.apache.maven.shared.invoker.InvocationRequest;
 import org.apache.maven.shared.release.ReleaseResult;
 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
@@ -83,6 +82,47 @@
     }
 
     @Test
+    public void testBatch()
+                  throws Exception
+    {
+        Logger logger = mock( Logger.class );
+        executor.enableLogging( logger );
+
+        InvocationRequest req = new DefaultInvocationRequest();
+        // bug: assertEquals( true, req.isInteractive() );
+
+        req = new DefaultInvocationRequest();
+        req.setInteractive( true );
+        executor.setupRequest( req, null, "-B" );
+        assertEquals( false, req.isInteractive() );
+
+        req = new DefaultInvocationRequest();
+        req.setInteractive( true );
+        executor.setupRequest( req, null, "\"-B\"" );
+        assertEquals( false, req.isInteractive() );
+    }
+
+    @Test
+    public void testUserToolchains()
+        throws Exception
+    {
+        Logger logger = mock( Logger.class );
+        executor.enableLogging( logger );
+
+        InvocationRequest req = new DefaultInvocationRequest();
+        executor.setupRequest( req, null, "-t mytoolchains.xml" );
+        assertEquals( new File( "mytoolchains.xml" ), req.getToolchainsFile() );
+
+        req = new DefaultInvocationRequest();
+        executor.setupRequest( req, null, "-tmytoolchains.xml" );
+        assertEquals( new File( "mytoolchains.xml" ), req.getToolchainsFile() );
+
+        req = new DefaultInvocationRequest();
+        executor.setupRequest( req, null, "\"-tmytoolchains.xml\"" );
+        assertEquals( new File( "mytoolchains.xml" ), req.getToolchainsFile() );
+    }
+    
+    @Test
     public void testGlobalSettings()
         throws Exception
     {
@@ -117,6 +157,7 @@
 
         ReleaseEnvironment releaseEnvironment = new DefaultReleaseEnvironment();
         releaseEnvironment.setSettings( settings );
+        releaseEnvironment.setMavenHome( new File( System.getProperty( "injectedMavenHome" ) ) );
 
         InvokerMavenExecutor executorSpy = spy( executor );
         SettingsXpp3Writer settingsWriter = mock( SettingsXpp3Writer.class );
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
index 0ef1aa9..93cfeb9 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/util/ReleaseUtilTest.java
@@ -21,6 +21,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.*;
 
 import java.io.File;
@@ -178,6 +179,24 @@
     }
 
     @Test
+    public void testGetBaseScmUrlSingleLevelDotCharacter()
+            throws Exception
+    {
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk",
+                      ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/." ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/",
+                      ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/./" ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/trunk/project",
+                      ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/./project" ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module",
+                      ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/.." ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/",
+                      ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/../" ) );
+        assertEquals( "scm:svn:http://svn.repo.com/flat-multi-module/branches",
+                      ReleaseUtil.realignScmUrl( 0, "scm:svn:http://svn.repo.com/flat-multi-module/trunk/../branches" ) );
+    }
+
+    @Test
     public void testGetBaseScmUrlReturnOriginal()
         throws Exception
     {
@@ -219,34 +238,84 @@
     }
 
     @Test
+    public void testGetBaseWorkingDirectoryParentCountSameDirectoryDotCharacter()
+    {
+        String workingDirectory = new File( "/working/directory/maven/release/." ).getAbsolutePath();
+        assertTrue( workingDirectory.contains( "." ) );
+        String basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
+        assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+
+        // finish with slash
+        workingDirectory = new File( "/working/directory/maven/release/./" ).getAbsolutePath();
+        assertTrue( workingDirectory.contains( "." ) );
+        basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
+        assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+    }
+
+    @Test
     public void testGetBaseWorkingDirectoryParentCountSubdirectory()
     {
-        String workingDirectory = "/working/directory/maven/release";
-        String basedir = "/working/directory/maven/release/maven-release-manager";
+        String workingDirectory = new File( "/working/directory/maven/release" ).getAbsolutePath();
+        String basedir = new File( "/working/directory/maven/release/maven-release-manager" ).getAbsolutePath();
         assertEquals( 0, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
     }
 
     @Test
     public void testGetBaseWorkingDirectoryParentCountParentDirectory()
     {
-        String workingDirectory = "/working/directory/maven/release/maven-release-manager";
-        String basedir = "/working/directory/maven/release";
+        String workingDirectory =
+            new File( "/working/directory/maven/release/maven-release-manager" ).getAbsolutePath();
+        String basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
+        assertEquals( 1, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+    }
+
+    @Test
+    public void testGetBaseWorkingDirectoryParentCountParentDirectoryDotCharacter()
+    {
+        String workingDirectory =
+            new File( "/working/directory/maven/release/maven-release-manager/." ).getAbsolutePath();
+        assertTrue( workingDirectory.contains( "." ) );
+        String basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
+        assertEquals( 1, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+
+        // finish with slash
+        workingDirectory = new File( "/working/directory/maven/release/maven-release-manager/./" ).getAbsolutePath();
+        assertTrue( workingDirectory.contains( "." ) );
+        basedir = new File( "/working/directory/maven/release" ).getAbsolutePath();
         assertEquals( 1, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
     }
 
     @Test
     public void testGetBaseWorkingDirectoryParentCountParentDirectoryMultiple()
     {
-        String workingDirectory = "/working/directory/maven/release/maven-release-manager";
-        String basedir = "/working/directory";
+        String workingDirectory =
+            new File( "/working/directory/maven/release/maven-release-manager" ).getAbsolutePath();
+        String basedir = new File( "/working/directory" ).getAbsolutePath();
+        assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+    }
+
+    @Test
+    public void testGetBaseWorkingDirectoryParentCountParentDirectoryMultipleDotCharacter()
+    {
+        String workingDirectory =
+            new File( "/working/directory/maven/release/maven-release-manager/./." ).getAbsolutePath();
+        assertTrue( workingDirectory.contains( "." ) );
+        String basedir = new File( "/working/directory" ).getAbsolutePath();
+        assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
+
+        // finish with slash
+        workingDirectory = new File( "/working/directory/maven/release/maven-release-manager/././" ).getAbsolutePath();
+        assertTrue( workingDirectory.contains( "." ) );
+        basedir = new File( "/working/directory" ).getAbsolutePath();
         assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
     }
 
     @Test
     public void testGetBaseWorkingDirectoryParentCountDifferentCase()
     {
-        String workingDirectory = "/Working/Directory/maven/release/maven-release-manager";
-        String basedir = "/working/directory";
+        String workingDirectory =
+            new File( "/Working/Directory/maven/release/maven-release-manager" ).getAbsolutePath();
+        String basedir = new File( "/working/directory" ).getAbsolutePath();
         assertEquals( 3, ReleaseUtil.getBaseWorkingDirectoryParentCount( basedir, workingDirectory ) );
     }
 
diff --git a/maven-release-plugin/pom.xml b/maven-release-plugin/pom.xml
index 4085fba..f01877d 100644
--- a/maven-release-plugin/pom.xml
+++ b/maven-release-plugin/pom.xml
@@ -117,6 +117,7 @@
   <build>
     <plugins>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-site-plugin</artifactId>
         <configuration>
           <stagingSiteURL>scp://people.apache.org/www/maven.apache.org/plugins/${project.artifactId}-${project.version}</stagingSiteURL>
@@ -145,6 +146,7 @@
         </executions>
       </plugin>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
         <executions>
           <execution>
@@ -171,7 +173,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-invoker-plugin</artifactId>
-        <version>1.8</version>
+        <version>1.10</version>
         <configuration>
           <projectsDirectory>src/it</projectsDirectory>
           <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
@@ -206,7 +208,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-invoker-plugin</artifactId>
-            <version>1.8</version>
+            <version>1.10</version>
             <executions>
               <execution>
                 <id>integration-test-prepare</id>
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-834/pom.xml b/maven-release-plugin/src/it/projects/prepare/MRELEASE-834/pom.xml
new file mode 100644
index 0000000..c031b78
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-834/pom.xml
@@ -0,0 +1,44 @@
+<?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.its</groupId>

+  <artifactId>mrelease-834</artifactId>

+  <version>1.0-SNAPSHOT</version>

+  <packaging>pom</packaging>

+

+  <scm>

+    <connection>scm:dummy|nul</connection>

+    <developerConnection>scm:dummy|nul</developerConnection>

+  </scm>

+

+  <build>

+    <plugins>

+      <plugin>

+        <groupId>org.apache.maven.plugins</groupId>

+        <artifactId>maven-release-plugin</artifactId>

+        <version>@project.version@</version>

+        <dependencies>

+          <dependency>

+            <groupId>org.apache.maven.its.release</groupId>

+            <artifactId>maven-scm-provider-dummy</artifactId>

+            <version>1.0</version>

+          </dependency>

+        </dependencies>

+      </plugin>

+    </plugins>

+  </build>

+

+</project>
\ No newline at end of file
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-834/test.properties b/maven-release-plugin/src/it/projects/prepare/MRELEASE-834/test.properties
new file mode 100644
index 0000000..3fc1992
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-834/test.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.

+

+dependency.locations.enabled=false
\ No newline at end of file
diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/module-a/pom.xml b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/module-a/pom.xml
new file mode 100644
index 0000000..9df4fde
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/module-a/pom.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>

+<!--

+Licensed to the Apache Software Foundation (ASF) under one

+or more contributor license agreements.  See the NOTICE file

+distributed with this work for additional information

+regarding copyright ownership.  The ASF licenses this file

+to you under the Apache License, Version 2.0 (the

+"License"); you may not use this file except in compliance

+with the License.  You may obtain a copy of the License at

+

+  http://www.apache.org/licenses/LICENSE-2.0

+

+Unless required by applicable law or agreed to in writing,

+software distributed under the License is distributed on an

+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+KIND, either express or implied.  See the License for the

+specific language governing permissions and limitations

+under the License.

+-->

+<project>

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>org.apache.maven.plugin.release.its</groupId>

+    <artifactId>mrelease-555</artifactId>

+    <version>1.0-SNAPSHOT</version>

+  </parent>

+

+  <artifactId>module-a</artifactId>

+</project>

diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/module-b/pom.xml b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/module-b/pom.xml
new file mode 100644
index 0000000..f15f5a2
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/module-b/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>

+<!--

+Licensed to the Apache Software Foundation (ASF) under one

+or more contributor license agreements.  See the NOTICE file

+distributed with this work for additional information

+regarding copyright ownership.  The ASF licenses this file

+to you under the Apache License, Version 2.0 (the

+"License"); you may not use this file except in compliance

+with the License.  You may obtain a copy of the License at

+

+  http://www.apache.org/licenses/LICENSE-2.0

+

+Unless required by applicable law or agreed to in writing,

+software distributed under the License is distributed on an

+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+KIND, either express or implied.  See the License for the

+specific language governing permissions and limitations

+under the License.

+-->

+<project>

+  <modelVersion>4.0.0</modelVersion>

+  <parent>

+    <groupId>org.apache.maven.plugin.release.its</groupId>

+    <artifactId>mrelease-555</artifactId>

+    <version>1.0-SNAPSHOT</version>

+  </parent>

+  <artifactId>module-b</artifactId>

+  <version>1.0-SNAPSHOT</version>

+

+  <dependencies>

+    <dependency>

+      <groupId>org.apache.maven.plugin.release.its</groupId>

+      <artifactId>module-a</artifactId>

+      <version>1.0-SNAPSHOT</version>

+    </dependency>

+  </dependencies>

+</project>

diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/pom.xml b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/pom.xml
new file mode 100644
index 0000000..c659fa2
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/pom.xml
@@ -0,0 +1,33 @@
+<?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.its</groupId>

+  <artifactId>mrelease-555</artifactId>

+  <packaging>pom</packaging>

+  <version>1.0-SNAPSHOT</version>

+

+  <url>http://jira.codehaus.org/browse/MRELEASE-555</url>

+  

+  <modules>

+    <module>module-a</module>

+    <module>module-b</module>

+  </modules>

+</project>

diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/verify.groovy b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/verify.groovy
new file mode 100644
index 0000000..ec16ecd
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/verify.groovy
@@ -0,0 +1,28 @@
+

+/*

+ * 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()

+

+def projectRoot = new XmlSlurper().parse( new File( basedir, "module-b/pom.xml" ) )

+

+assert projectRoot.dependencies.dependency.version.text() == "1.1-SNAPSHOT"  

+

+return true
\ No newline at end of file
diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/pom.xml b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/pom.xml
new file mode 100644
index 0000000..41312c0
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/pom.xml
@@ -0,0 +1,41 @@
+<?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>mrelease-661</artifactId>

+  <version>1.0</version>

+  <packaging>pom</packaging>

+

+  <url>http://jira.codehaus.org/browse/MRELEASE-611</url>

+  

+  <description>Ensure you can update from a non-SNAPSHOT project</description>

+

+  <build>

+    <plugins>

+      <plugin>

+        <groupId>org.apache.maven.plugins</groupId>

+        <artifactId>maven-release-plugin</artifactId>

+        <version>@project.version@</version>

+      </plugin>

+    </plugins>

+  </build>

+</project>

diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/verify.groovy b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/verify.groovy
new file mode 100644
index 0000000..b87eb47
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/verify.groovy
@@ -0,0 +1,28 @@
+

+/*

+ * 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()

+

+def projectRoot = new XmlSlurper().parse( new File( basedir, "pom.xml" ) )

+

+assert projectRoot.version.text() == "1.1-SNAPSHOT"  

+

+return true
\ No newline at end of file
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractScmReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractScmReleaseMojo.java
index 5ca9b40..87aca4a 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractScmReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/AbstractScmReleaseMojo.java
@@ -96,7 +96,8 @@
 
     /**
      * Add a new or overwrite the default implementation per provider. 
-     * The key is the scm prefix and the value is the role hint of the {@link org.apache.maven.scm.provider.ScmProvider}.
+     * The key is the scm prefix and the value is the role hint of the
+     * {@link org.apache.maven.scm.provider.ScmProvider}.
      *
      * @since 2.0-beta-6
      * @see ScmManager#setScmProviderImplementation(String, String)
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 509ab17..0b36716 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
@@ -31,8 +31,9 @@
 import org.apache.maven.shared.release.config.ReleaseUtils;
 
 /**
- * Branch a project in SCM, using the same steps as the <tt>release:prepare</tt> goal, creating a branch instead of a tag.
- * For more info see <a href="http://maven.apache.org/plugins/maven-release-plugin/examples/branch.html">http://maven.apache.org/plugins/maven-release-plugin/examples/branch.html</a>.
+ * Branch a project in SCM, using the same steps as the <tt>release:prepare</tt> goal, creating a branch instead of a
+ * tag. For more info see <a href="http://maven.apache.org/plugins/maven-release-plugin/examples/branch.html"
+ * >http://maven.apache.org/plugins/maven-release-plugin/examples/branch.html</a>.
  *
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  * @version $Id$
@@ -52,9 +53,9 @@
     private String branchName;
 
     /**
-     * The branch base directory in SVN, you must define it if you don't use the standard svn layout (trunk/tags/branches).
-     * For example, <code>http://svn.apache.org/repos/asf/maven/plugins/branches</code>. The URL is an SVN URL and does not
-     * include the SCM provider and protocol.
+     * The branch base directory in SVN, you must define it if you don't use the standard svn layout
+     * (trunk/tags/branches). For example, <code>http://svn.apache.org/repos/asf/maven/plugins/branches</code>. The URL
+     * is an SVN URL and does not include the SCM provider and protocol.
      *
      * @since 2.0
      */
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
index 6ecb582..0dc7b79 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/CleanReleaseMojo.java
@@ -28,7 +28,8 @@
  * Clean up after a release preparation. This is done automatically after a successful <tt>release:perform</tt>,
  * so is best served for cleaning up a failed or abandoned release, or a dry run. Note that only the working copy
  * is cleaned up, no previous steps are rolled back.
- * For more info see <a href="http://maven.apache.org/plugins/maven-release-plugin/examples/clean-release.html">http://maven.apache.org/plugins/maven-release-plugin/examples/clean-release.html</a>.
+ * For more info see <a href="http://maven.apache.org/plugins/maven-release-plugin/examples/clean-release.html"
+ * >http://maven.apache.org/plugins/maven-release-plugin/examples/clean-release.html</a>.
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @version $Id$
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java
index e287b00..4745306 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PerformReleaseMojo.java
@@ -34,7 +34,8 @@
 /**
  * Perform a release from SCM, either from a specified tag, or the tag representing the previous release in
  * the working copy created by <tt>release:prepare</tt>.
- * For more info see <a href="http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html">http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html</a>.
+ * For more info see <a href="http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html"
+ * >http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html</a>.
  *
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
@@ -49,7 +50,7 @@
      * <code>deploy site-deploy</code>, if the project has a &lt;distributionManagement&gt;/&lt;site&gt; element.
      */
     @Parameter( property = "goals" )
-    private String goals;
+    String goals;
 
     /**
      * Comma separated profiles to enable on deployment, in addition to active profiles for project execution.
@@ -79,7 +80,7 @@
      *
      * TODO: we should think about having the defaults for the various SCM providers provided via modello!
      *
-     * @since 2.0
+     * @since 2.0 for release:perform and 2.5.2 for release:stage
      */
     @Parameter( defaultValue = "false", property = "localCheckout" )
     private boolean localCheckout;
@@ -134,6 +135,7 @@
 
         try
         {
+            setDeploymentRepository();
             // Note that the working directory here is not the same as in the release configuration, so don't reuse that
             ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
             if ( connectionUrl != null )
@@ -146,7 +148,7 @@
                 releaseDescriptor.setScmUsername( username );
             }
             
-            if( password != null )
+            if ( password != null )
             {
                 releaseDescriptor.setScmPassword( password );
             }
@@ -156,16 +158,7 @@
             releaseDescriptor.setCheckoutDirectory( workingDirectory.getAbsolutePath() );
             releaseDescriptor.setUseReleaseProfile( useReleaseProfile );
 
-            if ( goals == null )
-            {
-                // set default
-                goals = "deploy";
-                if ( project.getDistributionManagement() != null
-                    && project.getDistributionManagement().getSite() != null )
-                {
-                    goals += " site-deploy";
-                }
-            }
+            createGoals();
             releaseDescriptor.setPerformGoals( goals );
             
             ReleasePerformRequest performRequest  = new ReleasePerformRequest();
@@ -185,4 +178,24 @@
             throw new MojoFailureException( e.getMessage(), e );
         }
     }
+
+    /** Just here so it may be overridden by StageReleaseMojo */
+    void setDeploymentRepository()
+    {
+    }
+
+    /** Just here so it may be overridden by StageReleaseMojo */
+    void createGoals()
+    {
+        if ( goals == null )
+        {
+            // set default
+            goals = "deploy";
+            if ( project.getDistributionManagement() != null
+                && project.getDistributionManagement().getSite() != null )
+            {
+                goals += " site-deploy";
+            }
+        }
+    }
 }
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 ac9a75a..07636b1 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
@@ -233,8 +233,8 @@
     {
         if ( generateReleasePoms )
         {
-            throw new MojoFailureException(
-                                            "Generating release POMs is no longer supported in release:prepare. Please run release:prepare-with-pom instead." );
+            throw new MojoFailureException( "Generating release POMs is no longer supported in release:prepare. "
+                + "Please run release:prepare-with-pom instead." );
         }
 
         prepareRelease( generateReleasePoms );
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/RollbackReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/RollbackReleaseMojo.java
index 39bf555..fd0cad0 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/RollbackReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/RollbackReleaseMojo.java
@@ -27,15 +27,16 @@
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 
 /**
- * Rollback changes made by a previous release. This requires that the previous release descriptor <tt>release.properties</tt>
- * is still available in the local working copy.
- * For more info see <a href="http://maven.apache.org/plugins/maven-release-plugin/examples/rollback-release.html">http://maven.apache.org/plugins/maven-release-plugin/examples/rollback-release.html</a>.
+ * Rollback changes made by a previous release. This requires that the previous release descriptor
+ * <tt>release.properties</tt> is still available in the local working copy. For more info see <a
+ * href="http://maven.apache.org/plugins/maven-release-plugin/examples/rollback-release.html"
+ * >http://maven.apache.org/plugins/maven-release-plugin/examples/rollback-release.html</a>.
  *
  * @since 2.0-beta-5
  * @author Edwin Punzalan
  * @version $Id$
  */
-@Mojo( name="rollback", aggregator = true )
+@Mojo( name = "rollback", aggregator = true )
 public class RollbackReleaseMojo
     extends AbstractScmReleaseMojo
 {
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/StageReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/StageReleaseMojo.java
index 48ae8bf..c0a5a04 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/StageReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/StageReleaseMojo.java
@@ -19,19 +19,18 @@
  * under the License.
  */
 
-import java.io.File;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.shared.release.ReleaseExecutionException;
-import org.apache.maven.shared.release.ReleaseFailureException;
-import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.codehaus.plexus.util.StringUtils;
 
 /**
  * Perform a release from SCM to a staging repository.
+ *
+ * If no goals are given, these default to <code>deploy</code> or <code>deploy site:stage-deploy</code>,
+ * if the project has a &lt;distributionManagement&gt;/&lt;site&gt; element.
+ *
+ * If the goals contain <code>site-deploy</code> or <code>site:deploy</code>, these
+ * are overridden with <code>site:stage-deploy</code>.
  * 
  * @author <a href="mailto:nicolas@apache.org">Nicolas De Loof</a>
  * @version $Id$
@@ -39,51 +38,9 @@
  */
 @Mojo( name = "stage", aggregator = true, requiresProject = false )
 public class StageReleaseMojo
-    extends AbstractScmReleaseMojo
+    extends PerformReleaseMojo
 {
     /**
-     * A comma or space separated list of goals to execute on deployment. Default value is either <code>deploy</code> or
-     * <code>deploy site-deploy</code>, if the project has a &lt;distributionManagement&gt;/&lt;site&gt; element.
-     * 
-     * @since 2.0-beta-8
-     */
-    @Parameter( property = "goals" )
-    private String goals;
-
-    /**
-     * Comma separated profiles to enable on deployment, in addition to active profiles for project execution.
-     * 
-     * @since 2.0-beta-8
-     */
-    @Parameter( property = "releaseProfiles" )
-    private String releaseProfiles;
-
-    /**
-     * The checkout directory.
-     * 
-     * @since 2.0-beta-8
-     */
-    @Parameter( defaultValue = "${project.build.directory}/checkout", property = "workingDirectory", required = true )
-    private File workingDirectory;
-
-    /**
-     * The SCM URL to checkout from. If omitted, the one from the <code>release.properties</code> file is used, followed
-     * by the URL from the current POM.
-     * 
-     * @since 2.0-beta-8
-     */
-    @Parameter( property = "connectionUrl" )
-    private String connectionUrl;
-
-    /**
-     * Whether to use the release profile that adds sources and javadocs to the released artifact, if appropriate.
-     * 
-     * @since 2.0-beta-8
-     */
-    @Parameter( defaultValue = "true", property = "useReleaseProfile" )
-    private boolean useReleaseProfile;
-
-    /**
      * URL of the staging repository to use.
      * 
      * @since 2.0-beta-8
@@ -91,68 +48,27 @@
     @Parameter( property = "stagingRepository", required = true )
     private String stagingRepository;
 
-    /**
-     * {@inheritDoc}
-     */
-    protected String getAdditionalProfiles()
+    @Override
+    void createGoals()
     {
-        return releaseProfiles;
+        if ( goals == null )
+        {
+            // set default
+            goals = "deploy";
+            if ( project.getDistributionManagement() != null
+                && project.getDistributionManagement().getSite() != null )
+            {
+                goals += " site:stage-deploy";
+            }
+        }
+
+        goals = StringUtils.replace( goals, "site-deploy", "site:stage-deploy" );
+        goals = StringUtils.replace( goals, "site:deploy", "site:stage-deploy" );
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public void execute()
-        throws MojoExecutionException, MojoFailureException
+    @Override
+    void setDeploymentRepository()
     {
-        super.execute();
-
-        // goals may be splitted into multiple line in configuration.
-        // Let's build a single line command
-        if ( goals != null )
-        {
-            goals = StringUtils.join( StringUtils.split( goals ), " " );
-        }
-
-        try
-        {
-            addArgument( "-DaltDeploymentRepository=\"" + stagingRepository + "\"" );
-
-            // Note that the working directory here is not the same as in the release configuration, so don't reuse that
-            ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
-            if ( connectionUrl != null )
-            {
-                releaseDescriptor.setScmSourceUrl( connectionUrl );
-            }
-
-            releaseDescriptor.setCheckoutDirectory( workingDirectory.getAbsolutePath() );
-            releaseDescriptor.setUseReleaseProfile( useReleaseProfile );
-
-            if ( goals == null )
-            {
-                // set default
-                goals = "deploy";
-                if ( project.getDistributionManagement() != null
-                    && project.getDistributionManagement().getSite() != null )
-                {
-                    goals += " site:stage-deploy";
-                }
-            }
-
-            goals = StringUtils.replace( goals, "site-deploy", "site:stage-deploy" );
-            goals = StringUtils.replace( goals, "site:deploy", "site:stage-deploy" );
-
-            releaseDescriptor.setPerformGoals( goals );
-
-            releaseManager.perform( releaseDescriptor, getReleaseEnvironment(), getReactorProjects(), false );
-        }
-        catch ( ReleaseExecutionException e )
-        {
-            throw new MojoExecutionException( e.getMessage(), e );
-        }
-        catch ( ReleaseFailureException e )
-        {
-            throw new MojoFailureException( e.getMessage(), e );
-        }
+        addArgument( "-DaltDeploymentRepository=\"" + stagingRepository + "\"" );
     }
 }
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 23680cc..e1c1896 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
@@ -74,6 +74,22 @@
     private String developmentVersion;
 
     /**
+     * Whether to update dependencies version to the next development version.
+     *
+     * @since 2.5.2
+     */
+    @Parameter( defaultValue = "true", property = "updateDependencies" )
+    private boolean updateDependencies;
+
+    /**
+     * Whether to use "edit" mode on the SCM, to lock the file for editing during SCM operations.
+     * 
+     * @since 2.5.2
+     */
+    @Parameter( defaultValue = "false", property = "useEditMode" )
+    private boolean useEditMode;
+    
+    /**
      * {@inheritDoc}
      */
     public void execute()
@@ -83,6 +99,8 @@
         config.setAddSchema( addSchema );
         config.setAutoVersionSubmodules( autoVersionSubmodules );
         config.setDefaultDevelopmentVersion( developmentVersion );
+        config.setScmUseEditMode( useEditMode );
+        config.setUpdateDependencies( updateDependencies );
 
         Map<String, Scm> originalScmInfo = new HashMap<String, Scm>();
         originalScmInfo.put( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ),
diff --git a/maven-release-plugin/src/site/apt/examples/perform-release.apt.vm b/maven-release-plugin/src/site/apt/examples/perform-release.apt.vm
index 19822ee..7bf4033 100644
--- a/maven-release-plugin/src/site/apt/examples/perform-release.apt.vm
+++ b/maven-release-plugin/src/site/apt/examples/perform-release.apt.vm
@@ -45,11 +45,13 @@
   you need to give the goal the URL and an optional tag to perform the release from. For example:
 
 -------
-mvn release:perform -DconnectionUrl=scm:svn:https://svn.apache.org/repos/asf/maven/plugins/tags/maven-release-plugin-2.0
+mvn org.apache.maven.plugins:maven-release-plugin:${project.version}:perform -DconnectionUrl=scm:svn:https://svn.mycompany.com/repos/path/to/myproject/tags/myproject-1.2.3
 -------
 
   <<<release:perform>>> will fork a new Maven instance to build the checked-out project. This new Maven instance will use the
-  same system configuration and Maven profiles used by the one running the <<<release:perform>>> goal.
+  same system configuration and Maven profiles used by the one running the <<<release:perform>>> goal. Since there's no pom.xml, 
+  you should use the fully qualified name of the goal to ensure the right version of the maven-release-plugin is used.
+  
 
   It is possible to
   force some profiles to get enabled during release (for example to enable time-consuming tasks that are only relevant
@@ -58,6 +60,7 @@
 
 -------
   <plugin>
+    <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-release-plugin</artifactId>
     <version>${project.version}</version>
     <configuration>
diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
index a2ea59f..882bffa 100644
--- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
+++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/StageReleaseMojoTest.java
@@ -34,11 +34,13 @@
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.release.ReleaseManager;
+import org.apache.maven.shared.release.ReleasePerformRequest;
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 import org.apache.maven.shared.release.env.ReleaseEnvironment;
+import org.mockito.ArgumentCaptor;
 
 /**
- * Test release:perform.
+ * Test release:stage.
  *
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */
@@ -60,15 +62,38 @@
         releaseDescriptor.setPerformGoals( "deploy site:stage-deploy" );
         releaseDescriptor.setAdditionalArguments( "-DaltDeploymentRepository=\"staging\"" );
 
+        ReleasePerformRequest performRequest = new ReleasePerformRequest();
+        performRequest.setReleaseDescriptor( releaseDescriptor );
+        performRequest.setReleaseEnvironment( mojo.getReleaseEnvironment() );
+        performRequest.setReactorProjects( mojo.getReactorProjects() );
+        performRequest.setDryRun( false );
+
         ReleaseManager mock = mock( ReleaseManager.class );
         mojo.setReleaseManager( mock );
 
         mojo.execute();
 
-        verify( mock ).perform( eq( releaseDescriptor ), isA( ReleaseEnvironment.class ), isNull( List.class ), eq( false ) );
+        // verify
+        ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
+        verify( mock ).perform( argument.capture() );
+        assertEquals( releaseDescriptor, argument.getValue().getReleaseDescriptor() );
+        assertNotNull( argument.getValue().getReleaseEnvironment() );
+        assertNull( argument.getValue().getReactorProjects() );
+        assertEquals( Boolean.FALSE, argument.getValue().getDryRun() );
         verifyNoMoreInteractions( mock );
     }
 
+    public void testCreateGoals()
+        throws Exception
+    {
+        StageReleaseMojo mojo = getMojoWithProjectSite( "stage.xml" );
+        mojo.createGoals();
+        assertEquals( "deploy site:stage-deploy", mojo.goals );
+        mojo.goals = "deploy site:deploy";
+        mojo.createGoals();
+        assertEquals( "deploy site:stage-deploy", mojo.goals );
+    }
+
     private StageReleaseMojo getMojoWithProjectSite( String fileName )
         throws Exception
     {
diff --git a/maven-release-policies/maven-release-oddeven-policy/src/main/java/org/apache/maven/shared/release/policy/oddeven/OddEvenVersionPolicy.java b/maven-release-policies/maven-release-oddeven-policy/src/main/java/org/apache/maven/shared/release/policy/oddeven/OddEvenVersionPolicy.java
index 4bcf967..f22d699 100644
--- a/maven-release-policies/maven-release-oddeven-policy/src/main/java/org/apache/maven/shared/release/policy/oddeven/OddEvenVersionPolicy.java
+++ b/maven-release-policies/maven-release-oddeven-policy/src/main/java/org/apache/maven/shared/release/policy/oddeven/OddEvenVersionPolicy.java
@@ -55,7 +55,8 @@
         return calculateNextVersion( request, true );
     }
 
-    private VersionPolicyResult calculateNextVersion( VersionPolicyRequest request, boolean development ) {
+    private VersionPolicyResult calculateNextVersion( VersionPolicyRequest request, boolean development )
+    {
         DefaultVersionInfo defaultVersionInfo = null;
 
         try
diff --git a/maven-release-policies/maven-release-oddeven-policy/src/main/java/org/apache/maven/shared/release/policy/oddeven/package-info.java b/maven-release-policies/maven-release-oddeven-policy/src/main/java/org/apache/maven/shared/release/policy/oddeven/package-info.java
index fd82cec..4f00635 100644
--- a/maven-release-policies/maven-release-oddeven-policy/src/main/java/org/apache/maven/shared/release/policy/oddeven/package-info.java
+++ b/maven-release-policies/maven-release-oddeven-policy/src/main/java/org/apache/maven/shared/release/policy/oddeven/package-info.java
@@ -1,10 +1,10 @@
+// CHECKSTYLE_OFF: RegexpHeader
 /**
- * A {@link VersionPolicy} implementation that allows release even version numbers only and skips the odd.
+ * A {@link org.apache.maven.shared.release.policy.version.VersionPolicy VersionPolicy} implementation that allows
+ * release even version numbers only and skips the odd.
  */
 package org.apache.maven.shared.release.policy.oddeven;
 
-import org.apache.maven.shared.release.policy.version.VersionPolicy;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
diff --git a/maven-release-policies/maven-release-semver-policy/pom.xml b/maven-release-policies/maven-release-semver-policy/pom.xml
new file mode 100644
index 0000000..17cd27f
--- /dev/null
+++ b/maven-release-policies/maven-release-semver-policy/pom.xml
@@ -0,0 +1,81 @@
+<?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/xsd/maven-4.0.0.xsd">

+  <modelVersion>4.0.0</modelVersion>

+

+  <parent>

+    <groupId>org.apache.maven.release</groupId>

+    <artifactId>maven-release</artifactId>

+    <version>2.5.2-SNAPSHOT</version>

+    <relativePath>../..</relativePath>

+  </parent>

+

+  <artifactId>maven-release-semver-policy</artifactId>

+

+  <name>Maven Release SemVer Policy</name>

+

+  <dependencies>

+    <dependency>

+      <groupId>${project.parent.groupId}</groupId>

+      <artifactId>maven-release-api</artifactId>

+      <version>${project.parent.version}</version>

+    </dependency>

+    <dependency>

+      <groupId>org.semver</groupId>

+      <artifactId>api</artifactId>

+      <version>0.9.33</version>

+    </dependency>

+

+

+    <dependency>

+      <groupId>org.codehaus.plexus</groupId>

+      <artifactId>plexus-component-annotations</artifactId>

+      <scope>provided</scope>

+    </dependency>

+

+    <dependency>

+      <groupId>junit</groupId>

+      <artifactId>junit</artifactId>

+      <version>4.11</version>

+      <scope>test</scope>

+    </dependency>

+  </dependencies>

+

+  <build>

+    <plugins>

+      <plugin>

+        <groupId>org.codehaus.plexus</groupId>

+        <artifactId>plexus-component-metadata</artifactId>

+        <version>1.5.5</version>

+        <executions>

+          <execution>

+            <id>process-classes</id>

+            <goals>

+              <goal>generate-metadata</goal>

+            </goals>

+          </execution>

+        </executions>

+      </plugin>

+    </plugins>

+  </build>

+

+</project>
\ No newline at end of file
diff --git a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
new file mode 100644
index 0000000..4cbfdb1
--- /dev/null
+++ b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
@@ -0,0 +1,75 @@
+package org.apache.maven.shared.release.policy.semver;

+

+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+

+import org.apache.maven.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.policy.version.VersionPolicyResult;

+import org.apache.maven.shared.release.versions.VersionParseException;

+import org.codehaus.plexus.component.annotations.Component;

+import org.semver.Version;

+import org.semver.Version.Element;

+

+@Component(

+           role = VersionPolicy.class,

+           hint = "SemVerVersionPolicy",

+           description = "A VersionPolicy following the SemVer rules"

+       )

+public class SemVerVersionPolicy implements VersionPolicy

+{

+

+    public VersionPolicyResult getReleaseVersion( VersionPolicyRequest request )

+        throws PolicyException, VersionParseException

+    {

+        Version version;

+        try 

+        {

+            version = Version.parse( request.getVersion() );

+        }

+        catch( IllegalArgumentException e )

+        {

+            throw new VersionParseException( e.getMessage() );

+        }

+        

+        VersionPolicyResult result = new VersionPolicyResult();

+        result.setVersion( version.toReleaseVersion().toString() );

+        return result;

+    }

+

+    public VersionPolicyResult getDevelopmentVersion( VersionPolicyRequest request )

+        throws PolicyException, VersionParseException

+    {

+        Version version;

+        try 

+        {

+            version = Version.parse( request.getVersion() );

+        }

+        catch( IllegalArgumentException e )

+        {

+            throw new VersionParseException( e.getMessage() );

+        }

+        

+        version = version.next( Element.MINOR );  

+        VersionPolicyResult result = new VersionPolicyResult();

+        result.setVersion( version.toString() + "-SNAPSHOT" );

+        return result;

+    }

+}

diff --git a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
new file mode 100644
index 0000000..bf37636
--- /dev/null
+++ b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
@@ -0,0 +1,71 @@
+package org.apache.maven.shared.release.policy.semver;

+

+/*

+ * 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 static org.junit.Assert.*;

+

+import org.apache.maven.shared.release.policy.version.VersionPolicy;

+import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;

+import org.junit.After;

+import org.junit.Before;

+import org.junit.Test;

+

+public class SemVerVersionPolicyTest

+{

+

+    private VersionPolicy versionPolicy;

+

+    @Before

+    public void setUp()

+    {

+        versionPolicy = new SemVerVersionPolicy();

+    }

+

+    @After

+    public void tearDown()

+    {

+        versionPolicy = null;

+    }

+

+    @Test

+    public void testConvertToSnapshot()

+        throws Exception

+    {

+        String suggestedVersion = versionPolicy.getDevelopmentVersion( newVersionPolicyRequest( "1.0.0" ) )

+                                               .getVersion();

+

+        assertEquals( "1.1.0-SNAPSHOT", suggestedVersion );

+    }

+

+    @Test

+    public void testConvertToRelease()

+        throws Exception

+    {

+        String suggestedVersion = versionPolicy.getReleaseVersion( newVersionPolicyRequest( "1.0.0-SNAPSHOT" ) )

+                                               .getVersion();

+

+        assertEquals( "1.0.0", suggestedVersion );

+    }

+

+    private static VersionPolicyRequest newVersionPolicyRequest( String version )

+    {

+        return new VersionPolicyRequest().setVersion( version );

+    }

+}

diff --git a/pom.xml b/pom.xml
index b3b8b68..f842ffc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven-parent</artifactId>
-    <version>24</version>
+    <version>26</version>
     <relativePath>../pom/maven/pom.xml</relativePath>
   </parent>
 
@@ -41,6 +41,9 @@
     <module>maven-release-manager</module>
     <module>maven-release-plugin</module>
     <module>maven-release-policies/maven-release-oddeven-policy</module>
+    <!-- org.semver:api:jar:0.9.3 requires JDK 1.6
+    <module>maven-release-policies/maven-release-semver-policy REMOVE apache-rat-plugin</module>
+     -->
   </modules>
 
   <scm>
@@ -50,7 +53,7 @@
   </scm>
   <issueManagement>
     <system>jira</system>
-    <url>http://jira.codehaus.org/browse/MRELEASE</url>
+    <url>https://issues.apache.org/jira/browse/MRELEASE</url>
   </issueManagement>
   <ciManagement>
     <system>Jenkins</system>
@@ -59,7 +62,7 @@
   <distributionManagement>
     <site>
       <id>apache.website</id>
-      <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/content/${maven.site.path}</url>
+      <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/components/${maven.site.path}</url>
     </site>
   </distributionManagement>
   
@@ -67,14 +70,46 @@
     <contributor>
       <name>John R Fallows</name>
     </contributor>
+    <contributor>
+      <name>Gertjan Gaillet</name>
+    </contributor>
+    <contributor>
+      <name>Russ Kociuba</name>
+    </contributor>
   </contributors>
 
   <properties>
-    <scmVersion>1.9.2</scmVersion>
+    <scmVersion>1.9.4</scmVersion>
     <mavenVersion>2.2.1</mavenVersion>
     <maven.site.path>maven-release-archives/maven-release-LATEST</maven.site.path>
   </properties>
 
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <configuration>
+            <excludes combine.children="append">
+              <!--
+                This module is not yet included
+              -->
+              <exclude>maven-release-policies/maven-release-semver-policy/**/*.*</exclude>
+            </excludes>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-release-plugin</artifactId>
+          <configuration>
+            <autoVersionSubmodules>true</autoVersionSubmodules>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+  
   <dependencyManagement>
     <dependencies>
       <dependency>
@@ -104,18 +139,4 @@
       </dependency>
     </dependencies>
   </dependencyManagement>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin><!-- TODO remove when upgrading maven-parent to 25 -->
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-site-plugin</artifactId>
-          <configuration>
-            <topSiteURL>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/content/${maven.site.path}</topSiteURL>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
 </project>