This is an automated email from the ASF dual-hosted git repository. slachiewicz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-remote-resources-plugin.git
commit 52662dc138a86f54525407046f7535cdc1436cf1 Author: Elliotte Rusty Harold <[email protected]> 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 571ab49..e4192e3 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 @@ -570,7 +570,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 60ddac8..ef101de 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 @@ -32,6 +32,7 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.EnumSet; +import java.util.HashMap; import java.util.List; import java.util.jar.JarOutputStream; import java.util.zip.ZipEntry; @@ -46,6 +47,7 @@ import org.apache.maven.execution.DefaultMavenExecutionRequest; import org.apache.maven.execution.DefaultMavenExecutionResult; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecutionException; +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; @@ -349,6 +351,27 @@ public class RemoteResourcesMojoTest extends AbstractMojoTestCase { assertNull(classLoader.getResource("SIMPLE.txt")); } + 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"});
