This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push:
new de639c15ec Add Maven version to error message when rejecting model
versions (#10921)
de639c15ec is described below
commit de639c15ecf3b71632c0a6b7aec2a295c2805364
Author: Guillaume Nodet <[email protected]>
AuthorDate: Wed Jul 16 18:01:41 2025 +0200
Add Maven version to error message when rejecting model versions (#10921)
Port https://github.com/apache/maven/pull/10899 to master, using
Session.getMavenVersion() instead of reading properties file.
- Modified validateModelVersion() to accept Session parameter and include
Maven version in error messages
- Updated error messages to be single-line and consistent with Maven's style
- Enhanced error messages show which Maven version is rejecting the model
version
- Added test coverage to verify Maven version is included in error messages
This helps users (especially IDE users like NetBeans) understand version
compatibility issues more clearly.
---
.../maven/impl/model/DefaultModelValidator.java | 37 ++++++++++++++++------
.../impl/model/DefaultModelValidatorTest.java | 21 ++++++++++++
2 files changed, 48 insertions(+), 10 deletions(-)
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 576ef1bf23..986a330e0d 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
@@ -372,7 +372,7 @@ public void validateFileModel(Session s, Model m, int
validationLevel, ModelProb
} else if (validationLevel >=
ModelValidator.VALIDATION_LEVEL_MAVEN_2_0) {
validateStringNotEmpty("modelVersion", problems, Severity.ERROR,
Version.V20, m.getModelVersion(), m);
- validateModelVersion(problems, m.getModelVersion(), m,
ModelBuilder.KNOWN_MODEL_VERSIONS);
+ validateModelVersion(s, problems, m.getModelVersion(), m,
ModelBuilder.KNOWN_MODEL_VERSIONS);
Set<String> modules = new HashSet<>();
for (int i = 0, n = m.getModules().size(); i < n; i++) {
@@ -1956,19 +1956,23 @@ private boolean validateEnum(
@SuppressWarnings("checkstyle:parameternumber")
private boolean validateModelVersion(
- ModelProblemCollector problems, String string,
InputLocationTracker tracker, List<String> validVersions) {
- if (string == null || string.isEmpty()) {
+ Session session,
+ ModelProblemCollector problems,
+ String requestedModel,
+ InputLocationTracker tracker,
+ List<String> validVersions) {
+ if (requestedModel == null || requestedModel.isEmpty()) {
return true;
}
- if (validVersions.contains(string)) {
+ if (validVersions.contains(requestedModel)) {
return true;
}
boolean newerThanAll = true;
boolean olderThanAll = true;
for (String validValue : validVersions) {
- final int comparison = compareModelVersions(validValue, string);
+ final int comparison = compareModelVersions(validValue,
requestedModel);
newerThanAll = newerThanAll && comparison < 0;
olderThanAll = olderThanAll && comparison > 0;
}
@@ -1980,8 +1984,10 @@ private boolean validateModelVersion(
Version.V20,
"modelVersion",
null,
- "of '" + string + "' is newer than the versions supported
by this version of Maven: "
- + validVersions + ". Building this project
requires a newer version of Maven.",
+ "of '" + requestedModel + "' is newer than the versions
supported by this Maven version ("
+ + getMavenVersionString(session)
+ + "). Supported modelVersions are: " +
validVersions
+ + ". Building this project requires a newer
version of Maven.",
tracker);
} else if (olderThanAll) {
@@ -1992,8 +1998,10 @@ private boolean validateModelVersion(
Version.V20,
"modelVersion",
null,
- "of '" + string + "' is older than the versions supported
by this version of Maven: "
- + validVersions + ". Building this project
requires an older version of Maven.",
+ "of '" + requestedModel + "' is older than the versions
supported by this Maven version ("
+ + getMavenVersionString(session)
+ + "). Supported modelVersions are: " +
validVersions
+ + ". Building this project requires an older
version of Maven.",
tracker);
} else {
@@ -2003,13 +2011,22 @@ private boolean validateModelVersion(
Version.V20,
"modelVersion",
null,
- "must be one of " + validVersions + " but is '" + string +
"'.",
+ "must be one of " + validVersions + " but is '" +
requestedModel + "'.",
tracker);
}
return false;
}
+ private String getMavenVersionString(Session session) {
+ try {
+ return session.getMavenVersion().toString();
+ } catch (Exception e) {
+ // Fallback for test contexts where RuntimeInformation might not
be available
+ return "unknown";
+ }
+ }
+
/**
* Compares two model versions.
*
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 6dc7a05851..70e12c6689 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
@@ -23,6 +23,7 @@
import java.util.Collection;
import java.util.List;
+import org.apache.maven.api.Version;
import org.apache.maven.api.model.Model;
import org.apache.maven.api.services.model.ModelValidator;
import org.apache.maven.impl.InternalSession;
@@ -130,6 +131,11 @@ void setUp() throws Exception {
when(repoSession.getScopeManager()).thenReturn(scopeManager);
session = mock(InternalSession.class);
when(session.getSession()).thenReturn(repoSession);
+
+ // Mock Maven version for error message testing
+ Version mavenVersion = mock(Version.class);
+ when(mavenVersion.toString()).thenReturn("4.0.0-test");
+ when(session.getMavenVersion()).thenReturn(mavenVersion);
}
@AfterEach
@@ -170,6 +176,21 @@ void testModelVersionMessage() throws Exception {
assertTrue(result.getErrors().get(0).contains("'modelVersion' must be
one of"));
}
+ @Test
+ void testModelVersionMessageIncludesMavenVersion() throws Exception {
+ SimpleProblemCollector result = validateFile("bad-modelVersion.xml");
+
+ assertViolations(result, 1, 0, 0);
+
+ String errorMessage = result.getFatals().get(0);
+ assertTrue(errorMessage.contains("modelVersion"));
+ // Should include Maven version (either "4.0.0-test" from mock or
"unknown" as fallback)
+ assertTrue(
+ errorMessage.contains("4.0.0-test") ||
errorMessage.contains("unknown"),
+ "Error message should include Maven version: " + errorMessage);
+ assertTrue(errorMessage.contains("newer than the versions supported by
this Maven version"));
+ }
+
@Test
void testMissingArtifactId() throws Exception {
SimpleProblemCollector result = validate("missing-artifactId-pom.xml");