This is an automated email from the ASF dual-hosted git repository. sjaranowski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-wrapper.git
The following commit(s) were added to refs/heads/master by this push: new d9f0b1d [MWRAPPER-68] fix issue with MVNW_REPOURL path resolving d9f0b1d is described below commit d9f0b1db825b5facdc65adf1211e9a4a5e472c29 Author: luschmar <90399580+lusch...@users.noreply.github.com> AuthorDate: Wed Jun 15 13:14:27 2022 +0200 [MWRAPPER-68] fix issue with MVNW_REPOURL path resolving --- .../java/org/apache/maven/wrapper/Installer.java | 9 --- .../org/apache/maven/wrapper/WrapperExecutor.java | 28 ++++++++ .../apache/maven/wrapper/WrapperExecutorTest.java | 75 ++++++++++++++++++++++ 3 files changed, 103 insertions(+), 9 deletions(-) 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 @@ public class Installer { 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.nio.file.Paths; 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 @@ public class WrapperExecutor } } + protected String getEnv( String key ) + { + return System.getenv( key ); + } + private URI prepareDistributionUri() throws URISyntaxException { @@ -105,6 +112,27 @@ public class WrapperExecutor } 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 @@ package org.apache.maven.wrapper; * 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.net.URI; 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 @@ public class WrapperExecutorTest 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 {