This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch reuse-not-redo in repository https://gitbox.apache.org/repos/asf/maven-wrapper.git
commit fc93c10006e3394d301e30490a626ab49b4cc4c0 Author: Tamas Cservenak <[email protected]> AuthorDate: Sat Jan 31 15:09:08 2026 +0100 Proposal to fix support for mirrors This change relies on reusing existing API that can return proper URL (as set by user by ANY means in Maven config) to resolve from. Moreover, if repo ID is made configurable as well, it could be used to pull (needs more code) reposes like ID "my-corpo-repo" from settings and use that instead. --- maven-wrapper-plugin/pom.xml | 6 +++ .../apache/maven/plugins/wrapper/WrapperMojo.java | 57 ++++++++++++---------- .../maven/plugins/wrapper/WrapperMojoTest.java | 42 +++++++++------- 3 files changed, 61 insertions(+), 44 deletions(-) diff --git a/maven-wrapper-plugin/pom.xml b/maven-wrapper-plugin/pom.xml index cb25fe7..9b6f065 100644 --- a/maven-wrapper-plugin/pom.xml +++ b/maven-wrapper-plugin/pom.xml @@ -109,6 +109,12 @@ under the License. <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>4.11.0</version> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/maven-wrapper-plugin/src/main/java/org/apache/maven/plugins/wrapper/WrapperMojo.java b/maven-wrapper-plugin/src/main/java/org/apache/maven/plugins/wrapper/WrapperMojo.java index 6146ff8..225998f 100644 --- a/maven-wrapper-plugin/src/main/java/org/apache/maven/plugins/wrapper/WrapperMojo.java +++ b/maven-wrapper-plugin/src/main/java/org/apache/maven/plugins/wrapper/WrapperMojo.java @@ -28,6 +28,7 @@ import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Collections; import java.util.Map; import java.util.Properties; @@ -37,13 +38,13 @@ import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.settings.Mirror; -import org.apache.maven.settings.Settings; import org.codehaus.plexus.archiver.UnArchiver; import org.codehaus.plexus.components.io.fileselectors.FileSelector; import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.resolution.ArtifactRequest; import org.eclipse.aether.resolution.ArtifactResolutionException; import org.eclipse.aether.resolution.ArtifactResult; @@ -59,7 +60,8 @@ import static org.apache.maven.shared.utils.logging.MessageUtils.buffer; public class WrapperMojo extends AbstractMojo { private static final String MVNW_REPOURL = "MVNW_REPOURL"; - protected static final String DEFAULT_REPOURL = "https://repo.maven.apache.org/maven2"; + protected static final String DEFAULT_REPO_ID = "central"; + protected static final String DEFAULT_REPO_URL = "https://repo.maven.apache.org/maven2"; // CONFIGURATION PARAMETERS @@ -161,11 +163,6 @@ public class WrapperMojo extends AbstractMojo { @Parameter(property = "distributionUrl") private String distributionUrl; - // READONLY PARAMETERS - - @Inject - private MavenSession session; - // CONSTANTS private static final String WRAPPER_DISTRIBUTION_GROUP_ID = "org.apache.maven.wrapper"; @@ -186,12 +183,28 @@ public class WrapperMojo extends AbstractMojo { // COMPONENTS + @Parameter(readonly = true, defaultValue = "${repositorySystemSession}") + private RepositorySystemSession repositorySystemSession; + + @Inject + private MavenSession session; + @Inject private RepositorySystem repositorySystem; @Inject private Map<String, UnArchiver> unarchivers; + public WrapperMojo() {} + + /** + * Ctor for UT. + */ + public WrapperMojo(RepositorySystem system, RepositorySystemSession session) { + this.repositorySystem = system; + this.repositorySystemSession = session; + } + @Override public void execute() throws MojoExecutionException { final Path baseDir = Paths.get(session.getRequest().getBaseDirectory()); @@ -371,37 +384,27 @@ public class WrapperMojo extends AbstractMojo { private String getRepoUrl() { // adapt to also support MVNW_REPOURL as supported by mvnw scripts from maven-wrapper String envRepoUrl = System.getenv(MVNW_REPOURL); - final String repoUrl = determineRepoUrl(envRepoUrl, session.getSettings()); - + final String repoUrl = determineRepoUrl(envRepoUrl); getLog().debug("Determined repo URL to use as " + repoUrl); - return repoUrl; } - protected String determineRepoUrl(String envRepoUrl, Settings settings) { - + protected String determineRepoUrl(String envRepoUrl) { if (envRepoUrl != null && !envRepoUrl.trim().isEmpty() && envRepoUrl.length() > 4) { String repoUrl = envRepoUrl.trim(); - if (repoUrl.endsWith("/")) { repoUrl = repoUrl.substring(0, repoUrl.length() - 1); } - getLog().debug("Using repo URL from " + MVNW_REPOURL + " environment variable."); - return repoUrl; } - // otherwise mirror from settings - if (settings.getMirrors() != null && !settings.getMirrors().isEmpty()) { - for (Mirror current : settings.getMirrors()) { - if ("*".equals(current.getMirrorOf())) { - getLog().debug("Using repo URL from * mirror in settings file."); - return current.getUrl(); - } - } - } - - return DEFAULT_REPOURL; + return repositorySystem + .newResolutionRepositories( + repositorySystemSession, + Collections.singletonList( + new RemoteRepository.Builder(DEFAULT_REPO_ID, "default", DEFAULT_REPO_URL).build())) + .get(0) + .getUrl(); } } diff --git a/maven-wrapper-plugin/src/test/java/org/apache/maven/plugins/wrapper/WrapperMojoTest.java b/maven-wrapper-plugin/src/test/java/org/apache/maven/plugins/wrapper/WrapperMojoTest.java index 5289e09..2798a3a 100644 --- a/maven-wrapper-plugin/src/test/java/org/apache/maven/plugins/wrapper/WrapperMojoTest.java +++ b/maven-wrapper-plugin/src/test/java/org/apache/maven/plugins/wrapper/WrapperMojoTest.java @@ -18,62 +18,70 @@ */ package org.apache.maven.plugins.wrapper; -import org.apache.maven.settings.Settings; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; class WrapperMojoTest { + private final RepositorySystem mockRepositorySystem = mock(RepositorySystem.class); + private final RepositorySystemSession mockSession = mock(RepositorySystemSession.class); + + WrapperMojoTest() { + when(mockRepositorySystem.newResolutionRepositories(any(RepositorySystemSession.class), anyList())) + .then(i -> i.getArguments()[1]); + } @Test void userSuppliedRepoUrlGetsTrailingSlashTrimmed() { // given - Settings settings = new Settings(); - WrapperMojo wrapperMojo = new WrapperMojo(); + WrapperMojo wrapperMojo = new WrapperMojo(mockRepositorySystem, mockSession); // when - String determinedRepoUrl = wrapperMojo.determineRepoUrl(WrapperMojo.DEFAULT_REPOURL + "/", settings); + String determinedRepoUrl = wrapperMojo.determineRepoUrl(WrapperMojo.DEFAULT_REPO_URL + "/"); // then - assertEquals(WrapperMojo.DEFAULT_REPOURL, determinedRepoUrl); + assertEquals(WrapperMojo.DEFAULT_REPO_URL, determinedRepoUrl); } @Test void nullRepoUrlNotUsed() { // given - Settings settings = new Settings(); - WrapperMojo wrapperMojo = new WrapperMojo(); + WrapperMojo wrapperMojo = new WrapperMojo(mockRepositorySystem, mockSession); // when - String determinedRepoUrl = wrapperMojo.determineRepoUrl(null, settings); + String determinedRepoUrl = wrapperMojo.determineRepoUrl(null); // then - assertEquals(WrapperMojo.DEFAULT_REPOURL, determinedRepoUrl); + assertEquals(WrapperMojo.DEFAULT_REPO_URL, determinedRepoUrl); } @Test void emptyRepoUrlNotUsed() { // given - Settings settings = new Settings(); - WrapperMojo wrapperMojo = new WrapperMojo(); + WrapperMojo wrapperMojo = new WrapperMojo(mockRepositorySystem, mockSession); // when - String determinedRepoUrl = wrapperMojo.determineRepoUrl("", settings); + String determinedRepoUrl = wrapperMojo.determineRepoUrl(""); // then - assertEquals(WrapperMojo.DEFAULT_REPOURL, determinedRepoUrl); + assertEquals(WrapperMojo.DEFAULT_REPO_URL, determinedRepoUrl); } @Test void slashRepoUrlNotUsed() { // given - Settings settings = new Settings(); - WrapperMojo wrapperMojo = new WrapperMojo(); + WrapperMojo wrapperMojo = new WrapperMojo(mockRepositorySystem, mockSession); // when - String determinedRepoUrl = wrapperMojo.determineRepoUrl("/", settings); + String determinedRepoUrl = wrapperMojo.determineRepoUrl("/"); // then - assertEquals(WrapperMojo.DEFAULT_REPOURL, determinedRepoUrl); + assertEquals(WrapperMojo.DEFAULT_REPO_URL, determinedRepoUrl); } }
