diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java index 79840fd52a11..37db33b4e465 100644 --- a/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java +++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java @@ -647,14 +647,14 @@ public void validateRawModel(Session s, Model m, int validationLevel, ModelProbl DistributionManagement distMgmt = m.getDistributionManagement(); if (distMgmt != null) { validateRawRepository( - problems, distMgmt.getRepository(), "distributionManagement.repository.", "", true, false); + problems, distMgmt.getRepository(), "distributionManagement.repository.", "", true, true); validateRawRepository( problems, distMgmt.getSnapshotRepository(), "distributionManagement.snapshotRepository.", "", true, - false); + true); } } } diff --git a/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelValidatorTest.java b/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelValidatorTest.java index 1624fd3cb074..6e6f1d7b4970 100644 --- a/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelValidatorTest.java +++ b/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelValidatorTest.java @@ -896,18 +896,23 @@ void repositoryWithUnsupportedExpression() throws Exception { void repositoryWithUninterpolatedId() throws Exception { SimpleProblemCollector result = validateRaw("raw-model/repository-with-uninterpolated-id.xml"); // Uninterpolated expressions in repository IDs should cause validation errors - assertViolations(result, 0, 3, 0); + // distributionManagement repositories skip expression check since parent properties + // may not be available at file model validation stage + assertViolations(result, 0, 2, 0); - // Check that all three repository ID validation errors are present + // Check that repository ID validation errors are present for repositories and pluginRepositories assertTrue(result.getErrors().stream() .anyMatch(error -> error.contains("repositories.repository.[${repository.id}].id") && error.contains("contains an uninterpolated expression"))); assertTrue(result.getErrors().stream() .anyMatch(error -> error.contains("pluginRepositories.pluginRepository.[${plugin.repository.id}].id") && error.contains("contains an uninterpolated expression"))); - assertTrue(result.getErrors().stream() - .anyMatch(error -> error.contains("distributionManagement.repository.[${staging.repository.id}].id") - && error.contains("contains an uninterpolated expression"))); + } + + @Test + void distributionManagementWithChainedPropertyInId() throws Exception { + SimpleProblemCollector result = validateRaw("raw-model/dm-with-chained-property-in-id.xml"); + assertViolations(result, 0, 0, 0); } @Test diff --git a/impl/maven-impl/src/test/resources/poms/validation/raw-model/dm-with-chained-property-in-id.xml b/impl/maven-impl/src/test/resources/poms/validation/raw-model/dm-with-chained-property-in-id.xml new file mode 100644 index 000000000000..845da0a7c4bc --- /dev/null +++ b/impl/maven-impl/src/test/resources/poms/validation/raw-model/dm-with-chained-property-in-id.xml @@ -0,0 +1,46 @@ + + + + + 4.0.0 + + org.apache.maven.validation + project + 1.0.0-SNAPSHOT + + + ${distMgmtReleasesId} + ${distMgmtReleasesId} + + + + + ${distMgmtStagingId} + https://repository.apache.org/service/local/staging/deploy/maven2 + + + ${distMgmtSnapshotsId} + https://repository.apache.org/content/repositories/snapshots + + + +