{"record":{"id":"5908fb96db9c7043","repo":"quarkusio/quarkus","slug":"detected-maven-version-is-not-supported-it-must","errorCode":null,"errorMessage":"<detected Maven version> is not supported, it must be in <requiredMavenVersionRange>.","messagePattern":"<detected Maven version> is not supported, it must be in <requiredMavenVersionRange>\\.","errorType":"exception","errorClass":"MojoExecutionException","httpStatus":null,"severity":"error","filePath":"devtools/maven/src/main/java/io/quarkus/maven/components/MavenVersionEnforcer.java","lineNumber":72,"sourceCode":"    /**\n     * Compares the specified Maven version to see if it is allowed by the defined version range.\n     *\n     * @param log the log\n     * @param requiredMavenVersionRange range of allowed versions for Maven.\n     * @param actualMavenVersion the version to be checked.\n     * @throws MojoExecutionException the given version fails the enforcement rule\n     */\n    private void enforce(Log log,\n            String requiredMavenVersionRange, ArtifactVersion actualMavenVersion)\n            throws MojoExecutionException {\n        if (StringUtils.isBlank(requiredMavenVersionRange)) {\n            throw new MojoExecutionException(\"Maven version can't be empty.\");\n        }\n        if (!actualMavenVersion.toString().equals(requiredMavenVersionRange)) {\n            try {\n                final VersionRange vr = VersionRange.createFromVersionSpec(requiredMavenVersionRange);\n                if (!containsVersion(vr, actualMavenVersion)) {\n                    throw new MojoExecutionException(getDetectedVersionStr(actualMavenVersion.toString())\n                            + \" is not supported, it must be in \" + vr + \".\");\n                }\n            } catch (InvalidVersionSpecificationException e) {\n                throw new MojoExecutionException(\"The requested Maven version \"\n                        + requiredMavenVersionRange + \" is invalid.\", e);\n            }\n        }\n        if (log.isDebugEnabled()) {\n            log.debug(\n                    getDetectedVersionStr(actualMavenVersion.toString()) + \" is allowed in \" + requiredMavenVersionRange + \".\");\n        }\n    }\n\n    /**\n     * Copied from Artifact.VersionRange. This is tweaked to handle singular ranges properly. Currently, the default\n     * <code>containsVersion</code> method assumes a singular version means allow everything.\n     *\n     * @param allowedRange range of allowed versions.","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/maven/src/main/java/io/quarkus/maven/components/MavenVersionEnforcer.java#L54-L90","documentation":"This MojoExecutionException is thrown by enforce when the detected Maven runtime version does not fall inside the required version range declared by Quarkus (e.g. [3.6.2,)). It is the actual 'your Maven is too old/new' failure of the compatibility gate. The message interpolates the detected version and the required range.","triggerScenarios":"ensureMavenVersion → enforce is called; actualMavenVersion is outside VersionRange.createFromVersionSpec(requiredMavenVersionRange); note the check is skipped entirely if the actual version string exactly equals the range spec.","commonSituations":"Using a system Maven older than the Quarkus minimum (e.g. Maven 3.5 with Quarkus requiring 3.6.2+); using a very new Maven the range excludes; CI images pinned to outdated Maven; wrapper not used and developer's local Maven differs.","solutions":["Upgrade Maven to a version within the range (use ./mvnw — the Quarkus Maven wrapper — or install Maven >= the minimum stated in the message)","Set toolchains/CI image to a supported Maven version (e.g. actions/setup-java with maven 3.9.x)","If a brand-new Maven is wrongly excluded, check for a newer Quarkus release that widened the range and upgrade quarkus-maven-plugin","Avoid overriding maven.version via -Dmaven.version=... which misreports the detected version"],"exampleFix":"// before (CI uses old Maven)\n- run: mvn quarkus:dev   // Maven 3.5.4 -> not supported\n// after\n- run: ./mvnw quarkus:dev   # project wrapper, supported Maven version","handlingStrategy":"validation","validationCode":"import org.apache.maven.artifact.versioning.*;\nString required = \"[3.6.2,)\";\nString actual = System.getProperty(\"maven.version\");\nif (!VersionRange.createFromVersionSpec(required)\n        .containsVersion(new DefaultArtifactVersion(actual))) {\n    throw new IllegalStateException(\"Maven \" + actual + \" unsupported; use ./mvnw or upgrade Maven to \" + required);\n}","typeGuard":null,"tryCatchPattern":"try {\n    enforcer.ensureMavenVersion(log, session);\n} catch (MojoExecutionException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"is not supported\")) {\n        log.error(\"Switch to ./mvnw or install a Maven version within the required range.\");\n    }\n    throw e;\n}","preventionTips":["Use ./mvnw everywhere (local and CI)","Pin Maven versions in CI images/toolchains","Avoid -Dmaven.version overrides","Check quarkus.properties range before changing Maven versions"],"tags":["maven","quarkus","version-compatibility","build"],"backgroundTag":"maven-version-unsupported","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}