diff --git a/maven-wrapper/src/main/java/org/apache/maven/wrapper/Installer.java b/maven-wrapper/src/main/java/org/apache/maven/wrapper/Installer.java
index 48340ee..29b63e3 100644
--- a/maven-wrapper/src/main/java/org/apache/maven/wrapper/Installer.java
+++ b/maven-wrapper/src/main/java/org/apache/maven/wrapper/Installer.java
@@ -65,15 +65,6 @@
     {
         URI distributionUrl = configuration.getDistribution();
 
-        String mvnwRepoUrl = System.getenv( MavenWrapperMain.MVNW_REPOURL );
-        if ( mvnwRepoUrl != null && !mvnwRepoUrl.isEmpty() )
-        {
-            Logger.info( "Detected MVNW_REPOURL environment variable " + mvnwRepoUrl );
-            String mvnPath = distributionUrl.toURL().toString();
-            mvnPath = mvnPath.substring( mvnPath.indexOf( "org/apache/maven" ) );
-            distributionUrl = new URI( mvnwRepoUrl ).resolve( "/" ).resolve( mvnPath );
-        }
-
         boolean alwaysDownload = configuration.isAlwaysDownload();
         boolean alwaysUnpack = configuration.isAlwaysUnpack();
 
diff --git a/maven-wrapper/src/main/java/org/apache/maven/wrapper/WrapperExecutor.java b/maven-wrapper/src/main/java/org/apache/maven/wrapper/WrapperExecutor.java
index f382b84..f69d7cc 100644
--- a/maven-wrapper/src/main/java/org/apache/maven/wrapper/WrapperExecutor.java
+++ b/maven-wrapper/src/main/java/org/apache/maven/wrapper/WrapperExecutor.java
@@ -29,6 +29,8 @@
 import java.util.Locale;
 import java.util.Properties;
 
+import static org.apache.maven.wrapper.MavenWrapperMain.MVNW_REPOURL;
+
 /**
  * Wrapper executor, running {@link Installer} to get a Maven distribution ready, followed by
  * {@link BootstrapMainStarter} to launch the Maven bootstrap.
@@ -94,6 +96,11 @@
         }
     }
 
+    protected String getEnv( String key )
+    {
+        return System.getenv( key );
+    }
+
     private URI prepareDistributionUri()
         throws URISyntaxException
     {
@@ -105,6 +112,27 @@
         }
         else
         {
+            String mvnwRepoUrl = getEnv( MVNW_REPOURL );
+            if ( mvnwRepoUrl != null && !mvnwRepoUrl.isEmpty() )
+            {
+                Logger.info( "Detected MVNW_REPOURL environment variable " + mvnwRepoUrl );
+                if ( mvnwRepoUrl.endsWith( "/" ) )
+                {
+                    mvnwRepoUrl = mvnwRepoUrl.substring( 0, mvnwRepoUrl.length() - 1 );
+                }
+                String distributionPath = source.getPath();
+                int index = distributionPath.indexOf( "org/apache/maven" );
+                if ( index > 1 )
+                {
+                    distributionPath = "/".concat( distributionPath.substring( index ) );
+                }
+                else
+                {
+                    Logger.warn( "distributionUrl don't contain package name " + source.getPath() );
+                }
+                return new URI( mvnwRepoUrl + distributionPath );
+            }
+
             return source;
         }
     }
diff --git a/maven-wrapper/src/test/java/org/apache/maven/wrapper/WrapperExecutorTest.java b/maven-wrapper/src/test/java/org/apache/maven/wrapper/WrapperExecutorTest.java
index 368f3a0..fb91f2d 100644
--- a/maven-wrapper/src/test/java/org/apache/maven/wrapper/WrapperExecutorTest.java
+++ b/maven-wrapper/src/test/java/org/apache/maven/wrapper/WrapperExecutorTest.java
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import static org.apache.maven.wrapper.MavenWrapperMain.MVNW_REPOURL;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -28,6 +29,8 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Properties;
 
 import org.junit.Assert;
@@ -191,6 +194,78 @@
     Assert.assertTrue( wrapper.getDistribution().getSchemeSpecificPart().endsWith( "some/relative/url/to/bin.zip" ) );
   }
 
+  @Test
+  public void testEnvironmentVariableOverwrite_simpleCase()
+    throws Exception
+  {
+    final Map<String, String> environmentVariables = new HashMap<>();
+    environmentVariables.put( MVNW_REPOURL, "https://repo/test" );
+
+    properties = new Properties();
+    properties.put( "distributionUrl", "https://server/path/to/bin.zip" );
+    writePropertiesFile( properties, propertiesFile, "header" );
+
+    WrapperExecutor wrapper = prepareWrapperExecutorWithEnvironmentVariables(environmentVariables);
+
+    Assert.assertEquals( "https://repo/test/path/to/bin.zip", wrapper.getDistribution().toString() );
+  }
+
+  @Test
+  public void testEnvironmentVariableOverwrite_mvnwRepoUrl_trailingSlash()
+          throws Exception
+  {
+    final Map<String, String> environmentVariables = new HashMap<>();
+    environmentVariables.put( MVNW_REPOURL, "https://repo/test/" );
+    properties = new Properties();
+    properties.put( "distributionUrl", "https://server/path/to/bin.zip" );
+    writePropertiesFile( properties, propertiesFile, "header" );
+
+    WrapperExecutor wrapper = prepareWrapperExecutorWithEnvironmentVariables(environmentVariables);
+
+    Assert.assertEquals( "https://repo/test/path/to/bin.zip", wrapper.getDistribution().toString() );
+  }
+
+  @Test
+  public void testEnvironmentVariableOverwrite_packageName()
+          throws Exception
+  {
+    final Map<String, String> environmentVariables = new HashMap<>();
+    environmentVariables.put( MVNW_REPOURL, "https://repo/test" );
+    properties = new Properties();
+    properties.put( "distributionUrl", "https://server/org/apache/maven/to/bin.zip" );
+    writePropertiesFile( properties, propertiesFile, "header" );
+
+    WrapperExecutor wrapper = prepareWrapperExecutorWithEnvironmentVariables(environmentVariables);
+
+    Assert.assertEquals( "https://repo/test/org/apache/maven/to/bin.zip", wrapper.getDistribution().toString() );
+  }
+
+  @Test
+  public void testEnvironmentVariableOverwrite_packageName_trailingSpace()
+          throws Exception
+  {
+    final Map<String, String> environmentVariables = new HashMap<>();
+    environmentVariables.put( MVNW_REPOURL, "https://repo/test/" );
+    properties = new Properties();
+    properties.put( "distributionUrl", "https://server/whatever/org/apache/maven/to/bin.zip" );
+    writePropertiesFile( properties, propertiesFile, "header" );
+
+    WrapperExecutor wrapper = prepareWrapperExecutorWithEnvironmentVariables(environmentVariables);
+
+    Assert.assertEquals( "https://repo/test/org/apache/maven/to/bin.zip", wrapper.getDistribution().toString() );
+  }
+
+  private WrapperExecutor prepareWrapperExecutorWithEnvironmentVariables(final Map<String, String> environmentVariables )
+  {
+    return new WrapperExecutor( propertiesFile, new Properties() ) {
+      @Override
+      protected String getEnv( String key )
+      {
+        return environmentVariables.get( key );
+      }
+    };
+  }
+
   private void writePropertiesFile( Properties properties, Path propertiesFile, String message )
     throws Exception
   {
