From 88d031de908422dc9380abe2b52a0e8d5e417007 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 19 Jun 2026 11:08:57 +0200 Subject: [PATCH] [#12303] Fix CI-friendly ${revision} not interpolated for dependency POMs In DefaultModelBuilder.doReadFileModel(), the CI-friendly version interpolation for non-build requests (dependency/parent POM reads) was guarded by `else if (modelSource.getPath() != null)`. Since ResolvedPathSource.getPath() always returns null for repository-resolved POMs, the ${revision} replacement never executed. Changed to unconditional else so getEnhancedProperties() and replaceCiFriendlyVersion() always run for non-build requests. --- .../maven/impl/model/DefaultModelBuilder.java | 24 +++++++ ...CIFriendlyRevisionRemoteResourcesTest.java | 65 ++++++++++++++++++ .../child-b/pom.xml | 27 ++++++++ .../child/pom.xml | 13 ++++ .../pom.xml | 41 +++++++++++ .../ci-lib-parent/1.0/ci-lib-parent-1.0.pom | 14 ++++ .../its/gh12303/ci-lib/1.0/ci-lib-1.0.pom | 14 ++++ .../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 +++++++++ 13 files changed, 256 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/ci-lib-parent/1.0/ci-lib-parent-1.0.pom create mode 100644 its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/ci-lib/1.0/ci-lib-1.0.pom 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 a877ba7cc961..660558edc6db 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 @@ -1692,6 +1692,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 (Exception e) { + // Best-effort: if we cannot read root model properties + // (e.g. root POM has validation errors), skip CI-friendly interpolation + } + } } 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..b241caec6a28 --- /dev/null +++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITgh12303CIFriendlyRevisionRemoteResourcesTest.java @@ -0,0 +1,65 @@ +/* + * 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 resolving a dependency whose parent POM uses {@code ${revision}} in its + * version. This exercises the non-build-request code path in + * {@code DefaultModelBuilder.doReadFileModel()}. + * + * @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"); + + // Pre-install the resource-bundle into the local repo so the + // maven-remote-resources-plugin can find it. + File repoDir = new File(testDir, "repo"); + File rbDir = new File(repoDir, "org/apache/maven/its/gh12303/resource-bundle/1.0"); + verifier.addCliArguments( + "install:install-file", + "-Dfile=" + new File(rbDir, "resource-bundle-1.0.jar").getAbsolutePath(), + "-DpomFile=" + new File(rbDir, "resource-bundle-1.0.pom").getAbsolutePath()); + verifier.execute(); + verifier.verifyErrorFreeLog(); + + verifier = newVerifier(testDir.getAbsolutePath()); + verifier.filterFile("settings-template.xml", "settings.xml"); + verifier.addCliArgument("--settings"); + verifier.addCliArgument("settings.xml"); + verifier.addCliArgument("compile"); + 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..9ef689549097 --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/child-b/pom.xml @@ -0,0 +1,27 @@ + + 4.0.0 + + + org.apache.maven.its.gh12303 + parent + ${revision} + + + child-b + + + + org.apache.maven.its.gh12303 + child + ${revision} + + + org.apache.maven.its.gh12303 + ci-lib + 1.0 + pom + + + 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..c032a1a734e8 --- /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 + + + + + + org.apache.maven.plugins + maven-remote-resources-plugin + 3.0.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/ci-lib-parent/1.0/ci-lib-parent-1.0.pom b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/ci-lib-parent/1.0/ci-lib-parent-1.0.pom new file mode 100644 index 000000000000..5977b1dc1b3e --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/ci-lib-parent/1.0/ci-lib-parent-1.0.pom @@ -0,0 +1,14 @@ + + 4.0.0 + + org.apache.maven.its.gh12303 + ci-lib-parent + 1.0 + pom + + + 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/ci-lib/1.0/ci-lib-1.0.pom b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/ci-lib/1.0/ci-lib-1.0.pom new file mode 100644 index 000000000000..468a7795592c --- /dev/null +++ b/its/core-it-suite/src/test/resources/gh-12303-ci-friendly-revision-remote-resources/repo/org/apache/maven/its/gh12303/ci-lib/1.0/ci-lib-1.0.pom @@ -0,0 +1,14 @@ + + 4.0.0 + + + org.apache.maven.its.gh12303 + ci-lib-parent + ${revision} + + + ci-lib + pom + 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 + + + + + +