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 0dee2323a6df..863bfcf898db 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 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 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 000000000000..fd93eabf47d5 --- /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 @@ + + 4.0.0 + org.test + parent-pom + 1.0 + pom + + + + staging + https://repository.example.org/staging + + + + + + nightly + + + nightly + + + + + ${uninterpolatedRepoId} + file://${SNAPSHOTS_PATH} + + + + + 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 000000000000..d3c99a4c88dd --- /dev/null +++ b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote-multimodule/child/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + + org.test + parent-pom + 1.0 + + + org.different.group + child-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 000000000000..80cfd216d32d --- /dev/null +++ b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote-multimodule/pom.xml @@ -0,0 +1,10 @@ + + 4.0.0 + org.test.aggregator + aggregator + 1.0 + pom + + child + + 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 000000000000..96a5d7325fe4 --- /dev/null +++ b/impl/maven-core/src/test/resources/projects/parent-version-inherited-from-remote/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + + org.test + parent-pom + 1.0 + + + org.different.group + child-project + +