You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by el...@apache.org on 2026/08/02 13:21:32 UTC

(maven-remote-resources-plugin) 01/01: Avoid mutating project artifact versions when building $projects (#268)

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

elharo pushed a commit to branch fix/issue-268-no-mutation-of-artifacts
in repository https://gitbox.apache.org/repos/asf/maven-remote-resources-plugin.git

commit d08891f44d08aeddffdb78a3d1f5463a40f9b2b8
Author: Elliotte Rusty Harold <el...@ibiblio.org>
AuthorDate: Sun Aug 2 13:21:25 2026 +0000

    Avoid mutating project artifact versions when building $projects (#268)
---
 .../remote/AbstractProcessRemoteResourcesMojo.java | 15 +++++++++++++-
 .../resources/remote/RemoteResourcesMojoTest.java  | 23 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java b/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java
index f57f6d1..5e38bb1 100644
--- a/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java
+++ b/src/main/java/org/apache/maven/plugin/resources/remote/AbstractProcessRemoteResourcesMojo.java
@@ -532,7 +532,20 @@ public abstract class AbstractProcessRemoteResourcesMojo extends AbstractMojo {
 
         for (Artifact artifact : artifacts) {
             if (artifact.isSnapshot()) {
-                artifact.setVersion(artifact.getBaseVersion());
+                // build a new artifact from the base version instead of mutating the shared
+                // artifact instances (e.g. the ones from project.getArtifacts())
+                org.apache.maven.artifact.DefaultArtifact snapshotArtifact =
+                        new org.apache.maven.artifact.DefaultArtifact(
+                                artifact.getGroupId(),
+                                artifact.getArtifactId(),
+                                artifact.getBaseVersion(),
+                                artifact.getScope(),
+                                artifact.getType(),
+                                artifact.getClassifier(),
+                                artifact.getArtifactHandler());
+                snapshotArtifact.setFile(artifact.getFile());
+                snapshotArtifact.setResolved(artifact.isResolved());
+                artifact = snapshotArtifact;
             }
 
             getLog().debug("Building project for " + artifact);
diff --git a/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java b/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
index 583732b..00a18cb 100644
--- a/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
+++ b/src/test/java/org/apache/maven/plugin/resources/remote/RemoteResourcesMojoTest.java
@@ -28,6 +28,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.jar.JarOutputStream;
 import java.util.zip.ZipEntry;
@@ -41,6 +42,7 @@ import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.DefaultMavenExecutionRequest;
 import org.apache.maven.execution.DefaultMavenExecutionResult;
 import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.resources.remote.stub.ArtifactStub;
 import org.apache.maven.plugin.resources.remote.stub.MavenProjectBuildStub;
 import org.apache.maven.plugin.resources.remote.stub.MavenProjectResourcesStub;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
@@ -165,6 +167,27 @@ public class RemoteResourcesMojoTest extends AbstractMojoTestCase {
         assertTrue(file.exists());
     }
 
+    public void testProjectsDoesNotMutateProjectArtifactVersions() throws Exception {
+        final MavenProjectResourcesStub project = createTestProject("default-nomutate");
+        final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithDefaultSettings(project);
+
+        setupDefaultProject(project);
+
+        setVariableValueToObject(mojo, "supplementModels", new HashMap<>());
+
+        ArtifactStub snapshotArtifact = new ArtifactStub();
+        snapshotArtifact.setGroupId("org.example");
+        snapshotArtifact.setArtifactId("snapshot-dep");
+        snapshotArtifact.setVersion("1.0-SNAPSHOT");
+
+        project.setArtifacts(Collections.singleton(snapshotArtifact));
+
+        mojo.getProjects();
+
+        assertEquals("1.0-SNAPSHOT", snapshotArtifact.getVersion());
+        assertSame(snapshotArtifact, project.getArtifacts().iterator().next());
+    }
+
     public void testVelocityUTF8() throws Exception {
         final MavenProjectResourcesStub project = createTestProject("default-utf8");
         final ProcessRemoteResourcesMojo mojo = lookupProcessMojoWithSettings(project, new String[] {"test:test:1.2"});