Skip to content

Commit 7a50bb3

Browse files
committed
Improve model validator wrt modelVersion which is now set in the file model
1 parent 8f34ea4 commit 7a50bb3

File tree

1 file changed

+6
-24
lines changed

1 file changed

+6
-24
lines changed

maven-api-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultModelValidator.java

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,6 @@
7474
import org.apache.maven.model.v4.MavenModelVersion;
7575
import org.apache.maven.model.v4.MavenTransformer;
7676

77-
import static org.apache.maven.internal.impl.model.DefaultModelBuilder.NAMESPACE_PREFIX;
78-
7977
/**
8078
*/
8179
@Named
@@ -350,6 +348,10 @@ public void validateFileModel(
350348
}
351349
}
352350
} else if (validationLevel >= ModelValidator.VALIDATION_LEVEL_MAVEN_2_0) {
351+
validateStringNotEmpty("modelVersion", problems, Severity.ERROR, Version.V20, m.getModelVersion(), m);
352+
353+
validateModelVersion(problems, m.getModelVersion(), m, VALID_MODEL_VERSIONS);
354+
353355
Set<String> modules = new HashSet<>();
354356
for (int i = 0, n = m.getModules().size(); i < n; i++) {
355357
String module = m.getModules().get(i);
@@ -365,12 +367,6 @@ public void validateFileModel(
365367
}
366368
}
367369
String modelVersion = m.getModelVersion();
368-
if (modelVersion == null) {
369-
String namespace = m.getNamespaceUri();
370-
if (namespace != null && namespace.startsWith(NAMESPACE_PREFIX)) {
371-
modelVersion = namespace.substring(NAMESPACE_PREFIX.length());
372-
}
373-
}
374370
if (Objects.equals(modelVersion, ModelBuilder.MODEL_VERSION_4_0_0)) {
375371
if (!m.getSubprojects().isEmpty()) {
376372
addViolation(
@@ -422,12 +418,6 @@ public void validateFileModel(
422418

423419
Severity errOn30 = getSeverity(validationLevel, ModelValidator.VALIDATION_LEVEL_MAVEN_3_0);
424420

425-
// The file pom may not contain the modelVersion yet, as it may be set later by the
426-
// ModelVersionXMLFilter.
427-
if (m.getModelVersion() != null && !m.getModelVersion().isEmpty()) {
428-
validateModelVersion(problems, m.getModelVersion(), m, VALID_MODEL_VERSIONS);
429-
}
430-
431421
validateStringNoExpression("groupId", problems, Severity.WARNING, Version.V20, m.getGroupId(), m);
432422
if (parent == null) {
433423
validateStringNotEmpty("groupId", problems, Severity.FATAL, Version.V20, m.getGroupId(), m);
@@ -562,16 +552,8 @@ public void validateFileModel(
562552
@Override
563553
public void validateRawModel(
564554
Model m, int validationLevel, ModelBuilderRequest request, ModelProblemCollector problems) {
565-
// [MNG-6074] Maven should produce an error if no model version has been set in a POM file used to build an
566-
// effective model.
567-
//
568-
// As of 3.4, the model version is mandatory even in raw models. The XML element still is optional in the
569-
// XML schema and this will not change anytime soon. We do not want to build effective models based on
570-
// models without a version starting with 3.4.
571-
validateStringNotEmpty("modelVersion", problems, Severity.ERROR, Version.V20, m.getModelVersion(), m);
572-
573-
validateModelVersion(problems, m.getModelVersion(), m, VALID_MODEL_VERSIONS);
574-
555+
// Check that the model version is correctly set wrt the model definition, i.e., that the
556+
// user does not use an attribute or element that is not available in the modelVersion used.
575557
String minVersion = new MavenModelVersion().getModelVersion(m);
576558
if (m.getModelVersion() != null && compareModelVersions(minVersion, m.getModelVersion()) > 0) {
577559
addViolation(

0 commit comments

Comments
 (0)