From dd7ef4710f446ab38eff749c0d3c5acbcf47ad83 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 23 Jun 2026 15:04:33 +0200 Subject: [PATCH 1/2] [#12303] Fix CI-friendly ${revision} not interpolated for non-build POM reads Port of #12322 to master. In doReadFileModel(), the CI-friendly version interpolation was only performed inside the isBuildRequest() block. When plugins like maven-remote-resources-plugin resolve the project's own POM through the non-build code path, ${revision} was left uninterpolated, causing "Invalid Version Range Request" errors. Add an else branch that performs CI-friendly version interpolation for non-build requests as well. Co-Authored-By: Claude Opus 4.6 --- .../maven/impl/model/DefaultModelBuilder.java | 24 +++++++++ ...CIFriendlyRevisionRemoteResourcesTest.java | 51 ++++++++++++++++++ .../child-b/pom.xml | 21 ++++++++ .../child/pom.xml | 13 +++++ .../pom.xml | 41 ++++++++++++++ .../1.0/resource-bundle-1.0.jar | Bin 0 -> 833 bytes .../1.0/resource-bundle-1.0.pom | 9 ++++ .../resource-bundle/pom.xml | 9 ++++ .../META-INF/maven/remote-resources.xml | 6 +++ .../src/main/resources/NOTICE.txt | 1 + .../settings-template.xml | 33 ++++++++++++ 11 files changed, 208 insertions(+) create mode 100644 its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child-b/pom.xml create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child/pom.xml create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/pom.xml create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/resource-bundle/1.0/resource-bundle-1.0.jar create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/resource-bundle/1.0/resource-bundle-1.0.pom create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/pom.xml create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/src/main/resources/META-INF/maven/remote-resources.xml create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/src/main/resources/NOTICE.txt create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/settings-template.xml diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java index 28a917c94852..f89f9d4f92fa 100644 --- a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java +++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java @@ -1741,6 +1741,30 @@ Model doReadFileModel(Set activeModelReads) throws ModelBuilderException { model = model.withProperties(newProps); } model = model.withProfiles(merge(model.getProfiles(), userProps)); + } else { + if (modelSource.getPath() != null) { + model = model.withPomFile(modelSource.getPath()); + } + if (rootDirectory != null) { + try { + Map properties = + getEnhancedProperties(model, rootDirectory, activeModelReads); + model = model.with() + .version(replaceCiFriendlyVersion(properties, model.getVersion())) + .parent( + model.getParent() != null + ? model.getParent() + .withVersion(replaceCiFriendlyVersion( + properties, + model.getParent() + .getVersion())) + : null) + .build(); + } catch (ModelBuilderException e) { + logger.debug("Could not read root model properties for CI-friendly" + + " version interpolation: " + e.getMessage()); + } + } } for (var transformer : transformers) { diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java new file mode 100644 index 000000000000..b1ab171af6a8 --- /dev/null +++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.maven.it; + +import java.io.File; + +import org.junit.jupiter.api.Test; + +/** + * Verify that CI-friendly {@code ${revision}} versions are properly interpolated + * when the {@code maven-remote-resources-plugin} resolves the project's own artifact + * through the legacy resolver path. + * + * @see gh-12303 + */ +class MavenITgh12303CIFriendlyRevisionRemoteResourcesTest extends AbstractMavenIntegrationTestCase { + + MavenITgh12303CIFriendlyRevisionRemoteResourcesTest() { + super("[4.0.0-rc-3,)"); + } + + @Test + void testCiFriendlyRevisionWithRemoteResources() throws Exception { + File testDir = extractResources("/gh-12303-ci-friendly-revision-remote-resources"); + + Verifier verifier = newVerifier(testDir.getAbsolutePath()); + verifier.deleteArtifacts("org.apache.maven.its.gh12303"); + verifier.filterFile("settings-template.xml", "settings.xml"); + verifier.addCliArgument("--settings"); + verifier.addCliArgument("settings.xml"); + verifier.addCliArgument("process-resources"); + verifier.execute(); + verifier.verifyErrorFreeLog(); + } +} diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child-b/pom.xml b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child-b/pom.xml new file mode 100644 index 000000000000..bcf2f609a273 --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child-b/pom.xml @@ -0,0 +1,21 @@ + + 4.0.0 + + + org.apache.maven.its.gh12303 + parent + ${revision} + + + child-b + + + + org.apache.maven.its.gh12303 + child + ${revision} + + + diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child/pom.xml b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child/pom.xml new file mode 100644 index 000000000000..892c520eb650 --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child/pom.xml @@ -0,0 +1,13 @@ + + 4.0.0 + + + org.apache.maven.its.gh12303 + parent + ${revision} + + + child + diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/pom.xml b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/pom.xml new file mode 100644 index 000000000000..8ac1c1b6fade --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/pom.xml @@ -0,0 +1,41 @@ + + 4.0.0 + + org.apache.maven.its.gh12303 + parent + ${revision} + pom + + + child + child-b + + + + 1.0.0-SNAPSHOT + + + + + + org.apache.maven.plugins + maven-remote-resources-plugin + 1.7.0 + + + + process + + + + org.apache.maven.its.gh12303:resource-bundle:1.0 + + + + + + + + diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/resource-bundle/1.0/resource-bundle-1.0.jar b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/resource-bundle/1.0/resource-bundle-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..6f1b5c08982e80c23d9b858f3ae6a7062d8d7e23 GIT binary patch literal 833 zcmWIWW@h1HVBlb2@W{Co!+-=h8CV#6T|*poJ^kGD|D9rB2mmS-Vc_84z)&gz)CO1T z>*(j{<{BKL=j-;__snS@Z(Y5MyxzK6=gyqp9At3C_`%a6JuhD!Pv48BtF{CgFm=6< z)XexHuB!HYiI&B4anUE@s?!)mvp*GmEMf%O$<7h}$f3¯j?+yHT|Bbsyhk=>A+ zSeBZnk8m)$Vr5LlMX9;@C8@easm1xFMaikfdKI}jn>VgMaW+r`>iAHjE5-pq9%sGJ z`JX)Fy*-qRxA5}TfKA&UZ_@NSdsg3**Gu=DzOI*_Zkg6u?~|Te9|r|EOlRy&?6~#w zXM2U!?pISorrdb3*t7A>h2sV+&KzmVVDH&6P7z83x@RNQdypV@Lh~Nb(+qz8A)d~z zdLWswtBL`etk1dAP6?Le;j~pMMm`4C@AQP??DIFkNjvf`Dcte2oKqlM-SS%u} z2WdtQFHk%pz#SkHO*6Jw1-S<1A5btO2NNim5ulF|InV>VS=m5xtU%}tlz9Qf3=9AU CYr=N` literal 0 HcmV?d00001 diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/resource-bundle/1.0/resource-bundle-1.0.pom b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/resource-bundle/1.0/resource-bundle-1.0.pom new file mode 100644 index 000000000000..c3199b259826 --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/resource-bundle/1.0/resource-bundle-1.0.pom @@ -0,0 +1,9 @@ + + 4.0.0 + + org.apache.maven.its.gh12303 + resource-bundle + 1.0 + diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/pom.xml b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/pom.xml new file mode 100644 index 000000000000..c3199b259826 --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/pom.xml @@ -0,0 +1,9 @@ + + 4.0.0 + + org.apache.maven.its.gh12303 + resource-bundle + 1.0 + diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/src/main/resources/META-INF/maven/remote-resources.xml b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/src/main/resources/META-INF/maven/remote-resources.xml new file mode 100644 index 000000000000..45c118bebdc6 --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/src/main/resources/META-INF/maven/remote-resources.xml @@ -0,0 +1,6 @@ + + + + NOTICE.txt + + diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/src/main/resources/NOTICE.txt b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/src/main/resources/NOTICE.txt new file mode 100644 index 000000000000..a2e56e1ac45d --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/resource-bundle/src/main/resources/NOTICE.txt @@ -0,0 +1 @@ +Test notice file for IT gh-12303. diff --git a/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/settings-template.xml b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/settings-template.xml new file mode 100644 index 000000000000..7e5ab0f680d7 --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/settings-template.xml @@ -0,0 +1,33 @@ + + + + + it-repo + + true + + + + local-repo + @baseurl@/repo + + true + ignore + + + false + + + + + + central-plugins + https://repo.maven.apache.org/maven2 + + true + + + + + + From ad5c02d9645986cf10c19d2655dd5d64b641b02f Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 23 Jun 2026 15:27:07 +0200 Subject: [PATCH 2/2] Fix IT compilation: adapt to master's NIO2 Path API The IT was copied from maven-4.0.x but master's AbstractMavenIntegrationTestCase was migrated to NIO2 (no version range constructor, extractResources returns Path). Co-Authored-By: Claude Opus 4.6 --- .../apache/maven/impl/model/DefaultModelBuilder.java | 6 ++++-- ...ITgh12303CIFriendlyRevisionRemoteResourcesTest.java | 10 +++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java index f89f9d4f92fa..f212b38dd3f5 100644 --- a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java +++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java @@ -1761,8 +1761,10 @@ Model doReadFileModel(Set activeModelReads) throws ModelBuilderException { : null) .build(); } catch (ModelBuilderException e) { - logger.debug("Could not read root model properties for CI-friendly" - + " version interpolation: " + e.getMessage()); + logger.debug( + "Could not read root model properties for CI-friendly" + + " version interpolation", + e); } } } diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java index b1ab171af6a8..3d02d183dd7d 100644 --- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java +++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java @@ -18,7 +18,7 @@ */ package org.apache.maven.it; -import java.io.File; +import java.nio.file.Path; import org.junit.jupiter.api.Test; @@ -31,15 +31,11 @@ */ class MavenITgh12303CIFriendlyRevisionRemoteResourcesTest extends AbstractMavenIntegrationTestCase { - MavenITgh12303CIFriendlyRevisionRemoteResourcesTest() { - super("[4.0.0-rc-3,)"); - } - @Test void testCiFriendlyRevisionWithRemoteResources() throws Exception { - File testDir = extractResources("/gh-12303-ci-friendly-revision-remote-resources"); + Path testDir = extractResources("/gh-12303-ci-friendly-revision-remote-resources"); - Verifier verifier = newVerifier(testDir.getAbsolutePath()); + Verifier verifier = newVerifier(testDir.toAbsolutePath()); verifier.deleteArtifacts("org.apache.maven.its.gh12303"); verifier.filterFile("settings-template.xml", "settings.xml"); verifier.addCliArgument("--settings");