mirror of https://github.com/apache/maven.git
[MNG-7893] Fix exception loading superpom with invalid modelVersion (#1290)
Even though this should not be supported, Maven 3.x is always using the 4.0.0 superpom. So if the version is not a supported model version, simply use 4.0.0. Any invalid value will be later verified by the model validator and eventually throw a meaninful exception.
This commit is contained in:
parent
2f99c66f86
commit
251a316962
|
@ -87,6 +87,7 @@ import org.apache.maven.model.resolution.ModelResolver;
|
||||||
import org.apache.maven.model.resolution.UnresolvableModelException;
|
import org.apache.maven.model.resolution.UnresolvableModelException;
|
||||||
import org.apache.maven.model.resolution.WorkspaceModelResolver;
|
import org.apache.maven.model.resolution.WorkspaceModelResolver;
|
||||||
import org.apache.maven.model.superpom.SuperPomProvider;
|
import org.apache.maven.model.superpom.SuperPomProvider;
|
||||||
|
import org.apache.maven.model.validation.DefaultModelValidator;
|
||||||
import org.apache.maven.model.validation.ModelValidator;
|
import org.apache.maven.model.validation.ModelValidator;
|
||||||
import org.codehaus.plexus.interpolation.InterpolationException;
|
import org.codehaus.plexus.interpolation.InterpolationException;
|
||||||
import org.codehaus.plexus.interpolation.MapBasedValueSource;
|
import org.codehaus.plexus.interpolation.MapBasedValueSource;
|
||||||
|
@ -747,6 +748,12 @@ public class DefaultModelBuilder implements ModelBuilder {
|
||||||
|
|
||||||
ModelData resultData = new ModelData(request.getModelSource(), inputModel);
|
ModelData resultData = new ModelData(request.getModelSource(), inputModel);
|
||||||
String superModelVersion = inputModel.getModelVersion() != null ? inputModel.getModelVersion() : "4.0.0";
|
String superModelVersion = inputModel.getModelVersion() != null ? inputModel.getModelVersion() : "4.0.0";
|
||||||
|
if (!DefaultModelValidator.VALID_MODEL_VERSIONS.contains(superModelVersion)) {
|
||||||
|
// Maven 3.x is always using 4.0.0 version to load the supermodel, so
|
||||||
|
// do the same when loading a dependency. The model validator will also
|
||||||
|
// check that field later.
|
||||||
|
superModelVersion = "4.0.0";
|
||||||
|
}
|
||||||
ModelData superData = new ModelData(null, getSuperModel(superModelVersion));
|
ModelData superData = new ModelData(null, getSuperModel(superModelVersion));
|
||||||
|
|
||||||
// profile activation
|
// profile activation
|
||||||
|
|
|
@ -24,6 +24,7 @@ import javax.inject.Singleton;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -67,6 +68,9 @@ import org.apache.maven.model.v4.MavenModelVersion;
|
||||||
@Singleton
|
@Singleton
|
||||||
public class DefaultModelValidator implements ModelValidator {
|
public class DefaultModelValidator implements ModelValidator {
|
||||||
|
|
||||||
|
public static final List<String> VALID_MODEL_VERSIONS =
|
||||||
|
Collections.unmodifiableList(Arrays.asList("4.0.0", "4.1.0"));
|
||||||
|
|
||||||
private static final Pattern EXPRESSION_NAME_PATTERN = Pattern.compile("\\$\\{(.+?)}");
|
private static final Pattern EXPRESSION_NAME_PATTERN = Pattern.compile("\\$\\{(.+?)}");
|
||||||
private static final Pattern EXPRESSION_PROJECT_NAME_PATTERN = Pattern.compile("\\$\\{(project.+?)}");
|
private static final Pattern EXPRESSION_PROJECT_NAME_PATTERN = Pattern.compile("\\$\\{(project.+?)}");
|
||||||
|
|
||||||
|
@ -147,7 +151,7 @@ public class DefaultModelValidator implements ModelValidator {
|
||||||
// The file pom may not contain the modelVersion yet, as it may be set later by the
|
// The file pom may not contain the modelVersion yet, as it may be set later by the
|
||||||
// ModelVersionXMLFilter.
|
// ModelVersionXMLFilter.
|
||||||
if (m.getModelVersion() != null && !m.getModelVersion().isEmpty()) {
|
if (m.getModelVersion() != null && !m.getModelVersion().isEmpty()) {
|
||||||
validateModelVersion(problems, m.getModelVersion(), m, "4.0.0", "4.1.0");
|
validateModelVersion(problems, m.getModelVersion(), m, VALID_MODEL_VERSIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
validateStringNoExpression("groupId", problems, Severity.WARNING, Version.V20, m.getGroupId(), m);
|
validateStringNoExpression("groupId", problems, Severity.WARNING, Version.V20, m.getGroupId(), m);
|
||||||
|
@ -261,7 +265,7 @@ public class DefaultModelValidator implements ModelValidator {
|
||||||
// models without a version starting with 3.4.
|
// models without a version starting with 3.4.
|
||||||
validateStringNotEmpty("modelVersion", problems, Severity.ERROR, Version.V20, m.getModelVersion(), m);
|
validateStringNotEmpty("modelVersion", problems, Severity.ERROR, Version.V20, m.getModelVersion(), m);
|
||||||
|
|
||||||
validateModelVersion(problems, m.getModelVersion(), m, "4.0.0", "4.1.0");
|
validateModelVersion(problems, m.getModelVersion(), m, VALID_MODEL_VERSIONS);
|
||||||
|
|
||||||
String minVersion = new MavenModelVersion().getModelVersion(m);
|
String minVersion = new MavenModelVersion().getModelVersion(m);
|
||||||
if (m.getModelVersion() != null && compareModelVersions(minVersion, m.getModelVersion()) > 0) {
|
if (m.getModelVersion() != null && compareModelVersions(minVersion, m.getModelVersion()) > 0) {
|
||||||
|
@ -1478,14 +1482,12 @@ public class DefaultModelValidator implements ModelValidator {
|
||||||
|
|
||||||
@SuppressWarnings("checkstyle:parameternumber")
|
@SuppressWarnings("checkstyle:parameternumber")
|
||||||
private boolean validateModelVersion(
|
private boolean validateModelVersion(
|
||||||
ModelProblemCollector problems, String string, InputLocationTracker tracker, String... validVersions) {
|
ModelProblemCollector problems, String string, InputLocationTracker tracker, List<String> validVersions) {
|
||||||
if (string == null || string.length() <= 0) {
|
if (string == null || string.length() <= 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> values = Arrays.asList(validVersions);
|
if (validVersions.contains(string)) {
|
||||||
|
|
||||||
if (values.contains(string)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1504,8 +1506,8 @@ public class DefaultModelValidator implements ModelValidator {
|
||||||
Version.V20,
|
Version.V20,
|
||||||
"modelVersion",
|
"modelVersion",
|
||||||
null,
|
null,
|
||||||
"of '" + string + "' is newer than the versions supported by this version of Maven: " + values
|
"of '" + string + "' is newer than the versions supported by this version of Maven: "
|
||||||
+ ". Building this project requires a newer version of Maven.",
|
+ validVersions + ". Building this project requires a newer version of Maven.",
|
||||||
tracker);
|
tracker);
|
||||||
|
|
||||||
} else if (olderThanAll) {
|
} else if (olderThanAll) {
|
||||||
|
@ -1516,8 +1518,8 @@ public class DefaultModelValidator implements ModelValidator {
|
||||||
Version.V20,
|
Version.V20,
|
||||||
"modelVersion",
|
"modelVersion",
|
||||||
null,
|
null,
|
||||||
"of '" + string + "' is older than the versions supported by this version of Maven: " + values
|
"of '" + string + "' is older than the versions supported by this version of Maven: "
|
||||||
+ ". Building this project requires an older version of Maven.",
|
+ validVersions + ". Building this project requires an older version of Maven.",
|
||||||
tracker);
|
tracker);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -1527,7 +1529,7 @@ public class DefaultModelValidator implements ModelValidator {
|
||||||
Version.V20,
|
Version.V20,
|
||||||
"modelVersion",
|
"modelVersion",
|
||||||
null,
|
null,
|
||||||
"must be one of " + values + " but is '" + string + "'.",
|
"must be one of " + validVersions + " but is '" + string + "'.",
|
||||||
tracker);
|
tracker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue