7474import org .apache .maven .model .v4 .MavenModelVersion ;
7575import 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