This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push:
new 9450f6e494 Fix #12085: add regression tests for version inheritance
from remote parent (#12090)
9450f6e494 is described below
commit 9450f6e49472454af201af6ae7276d3b2f9f3c1f
Author: Guillaume Nodet <[email protected]>
AuthorDate: Tue May 19 15:32:57 2026 +0200
Fix #12085: add regression tests for version inheritance from remote parent
(#12090)
The issue reported a null root artifact error when building projects
that inherit version from a remote parent POM. Investigation showed
the actual cause was uninterpolated repository expressions leaking
through to the CollectRequest validator, which was already fixed by
commits 9332ad3d55 and cee3c33c74.
Add regression tests covering both single-project and multi-module
builds with version inherited from a remote parent POM (different
groupId, empty relativePath).
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
.../project/DefaultMavenProjectBuilderTest.java | 39 ++++++++++++++++++++++
.../org/test/parent-pom/1.0/parent-pom-1.0.pom | 31 +++++++++++++++++
.../child/pom.xml | 12 +++++++
.../pom.xml | 10 ++++++
.../parent-version-inherited-from-remote/pom.xml | 12 +++++++
5 files changed, 104 insertions(+)
diff --git
a/impl/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
b/impl/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
index 0dee2323a6..863bfcf898 100644
---
a/impl/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
+++
b/impl/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
@@ -700,4 +700,43 @@ public void testEmptyModulesElementPreventsDiscovery()
throws Exception {
// The modules list should be empty since we explicitly defined an
empty <modules /> element
assertTrue(parent.getModel().getDelegate().getModules().isEmpty());
}
+
+ @Test
+ void testVersionInheritedFromRemoteParent() throws Exception {
+ File f1 =
getTestFile("src/test/resources/projects/parent-version-inherited-from-remote/pom.xml");
+ MavenProject project = getProject(f1);
+
+ assertNotNull(project, "project should not be null");
+ assertEquals("1.0", project.getVersion(), "version should be inherited
from remote parent");
+ assertNotNull(project.getArtifact(), "project artifact should not be
null");
+ assertEquals("1.0", project.getArtifact().getVersion(), "artifact
version should match inherited version");
+ assertEquals("org.different.group", project.getGroupId(), "groupId
should be from child POM");
+ assertEquals("child-project", project.getArtifactId(), "artifactId
should be from child POM");
+ }
+
+ @Test
+ void testVersionInheritedFromRemoteParentMultiModule() throws Exception {
+ File pom =
getTestFile("src/test/resources/projects/parent-version-inherited-from-remote-multimodule/pom.xml");
+ ProjectBuildingRequest configuration = newBuildingRequest();
+ InternalSession internalSession =
InternalSession.from(configuration.getRepositorySession());
+ InternalMavenSession mavenSession =
InternalMavenSession.from(internalSession);
+ mavenSession
+ .getMavenSession()
+ .getRequest()
+ .setRootDirectory(pom.toPath().getParent());
+
+ List<ProjectBuildingResult> results =
projectBuilder.build(List.of(pom), true, configuration);
+ assertEquals(2, results.size());
+
+ MavenProject child = results.stream()
+ .map(ProjectBuildingResult::getProject)
+ .filter(p -> "child-project".equals(p.getArtifactId()))
+ .findFirst()
+ .orElse(null);
+ assertNotNull(child, "child project should be found");
+ assertEquals("1.0", child.getVersion(), "version should be inherited
from remote parent");
+ assertNotNull(child.getArtifact(), "child project artifact should not
be null");
+ assertEquals("1.0", child.getArtifact().getVersion(), "artifact
version should match inherited version");
+ assertEquals("org.different.group", child.getGroupId(), "groupId
should be from child POM");
+ }
}
diff --git
a/impl/maven-core/src/test/remote-repo/org/test/parent-pom/1.0/parent-pom-1.0.pom
b/impl/maven-core/src/test/remote-repo/org/test/parent-pom/1.0/parent-pom-1.0.pom
new file mode 100644
index 0000000000..fd93eabf47
--- /dev/null
+++
b/impl/maven-core/src/test/remote-repo/org/test/parent-pom/1.0/parent-pom-1.0.pom
@@ -0,0 +1,31 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.test</groupId>
+ <artifactId>parent-pom</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <repositories>
+ <repository>
+ <id>staging</id>
+ <url>https://repository.example.org/staging</url>
+ </repository>
+ </repositories>
+
+ <profiles>
+ <profile>
+ <id>nightly</id>
+ <activation>
+ <property>
+ <name>nightly</name>
+ </property>
+ </activation>
+ <repositories>
+ <repository>
+ <id>${uninterpolatedRepoId}</id>
+ <url>file://${SNAPSHOTS_PATH}</url>
+ </repository>
+ </repositories>
+ </profile>
+ </profiles>
+</project>
diff --git
a/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote-multimodule/child/pom.xml
b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote-multimodule/child/pom.xml
new file mode 100644
index 0000000000..d3c99a4c88
--- /dev/null
+++
b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote-multimodule/child/pom.xml
@@ -0,0 +1,12 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.test</groupId>
+ <artifactId>parent-pom</artifactId>
+ <version>1.0</version>
+ <relativePath/>
+ </parent>
+ <groupId>org.different.group</groupId>
+ <artifactId>child-project</artifactId>
+ <!-- no version - inherited from remote parent -->
+</project>
diff --git
a/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote-multimodule/pom.xml
b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote-multimodule/pom.xml
new file mode 100644
index 0000000000..80cfd216d3
--- /dev/null
+++
b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote-multimodule/pom.xml
@@ -0,0 +1,10 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.test.aggregator</groupId>
+ <artifactId>aggregator</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+ <modules>
+ <module>child</module>
+ </modules>
+</project>
diff --git
a/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote/pom.xml
b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote/pom.xml
new file mode 100644
index 0000000000..96a5d7325f
--- /dev/null
+++
b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote/pom.xml
@@ -0,0 +1,12 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.test</groupId>
+ <artifactId>parent-pom</artifactId>
+ <version>1.0</version>
+ <relativePath/>
+ </parent>
+ <groupId>org.different.group</groupId>
+ <artifactId>child-project</artifactId>
+ <!-- no version - inherited from parent -->
+</project>