{"record":{"id":"d64e19a9f5a6b924","repo":"apache/maven","slug":"could-not-verify-plugin-s-maven-prerequisite-as-an","errorCode":null,"errorMessage":"Could not verify plugin's Maven prerequisite as an invalid version is given in {}","messagePattern":"Could not verify plugin's Maven prerequisite as an invalid version is given in (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"impl/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginMavenPrerequisiteChecker.java","lineNumber":55,"sourceCode":"    @Inject\n    public MavenPluginMavenPrerequisiteChecker(RuntimeInformation runtimeInformation) {\n        super();\n        this.runtimeInformation = runtimeInformation;\n    }\n\n    @Override\n    public void accept(PluginDescriptor pluginDescriptor) {\n        String requiredMavenVersion = pluginDescriptor.getRequiredMavenVersion();\n\n        boolean isBlankVersion =\n                requiredMavenVersion == null || requiredMavenVersion.trim().isEmpty();\n\n        if (!isBlankVersion) {\n            boolean isRequirementMet = false;\n            try {\n                isRequirementMet = runtimeInformation.isMavenVersion(requiredMavenVersion);\n            } catch (IllegalArgumentException e) {\n                logger.warn(\n                        \"Could not verify plugin's Maven prerequisite as an invalid version is given in \"\n                                + requiredMavenVersion,\n                        e);\n                return;\n            }\n            if (!isRequirementMet) {\n                throw new IllegalStateException(\"Required Maven version \" + requiredMavenVersion\n                        + \" is not met by current version \" + runtimeInformation.getMavenVersion());\n            }\n        }\n    }\n}\n","sourceCodeStart":37,"sourceCodeEnd":68,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/impl/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginMavenPrerequisiteChecker.java#L37-L68","documentation":"MavenPluginMavenPrerequisiteChecker.accept() validates a plugin descriptor's requiredMavenVersion (from the plugin's <prerequisites><maven> in plugin.xml) by calling RuntimeInformation.isMavenVersion(requiredMavenVersion), which parses the string as a version/version range. If the value is malformed the parser throws IllegalArgumentException; Maven logs this warning (with the offending string concatenated into the message) and silently skips the prerequisite check - the plugin is accepted without verification. Contrast the non-parseable case with the 'Required Maven version X is not met' IllegalStateException when a valid version simply is not satisfied.","triggerScenarios":"Loading a plugin whose descriptor carries an unparseable prerequisite string - e.g. '[3.0,', '3.9.x-SNAP', 'JDK1.8' or an unresolved property like ${maven.version} baked into plugin.xml. Reached via direct plugin invocation, prefix resolution (DefaultPluginPrefixResolver), or candidate checks during plugin version search.","commonSituations":"Hand-edited plugin POMs with typos in <prerequisites>; old plugin parent POMs writing filtered property placeholders into the descriptor; custom in-house plugins where nobody noticed the prerequisite was never checked.","solutions":["Fix the plugin POM's <prerequisites><maven> to a plain literal version (e.g. 3.6.3) and rebuild/release the plugin","Upgrade to a released version of the third-party plugin where the prerequisite is corrected","Until fixed, remember the check is skipped (warning only): verify manually that the plugin behaves on your Maven, since Maven will not enforce compatibility for it"],"exampleFix":"<!-- before: unparseable value ends up in plugin.xml -->\n<prerequisites>\n  <maven>${maven.min.version}</maven>\n</prerequisites>\n<!-- after -->\n<prerequisites>\n  <maven>3.6.3</maven>\n</prerequisites>","handlingStrategy":"validation","validationCode":"// plugin build check: fail if the prerequisite does not parse\nimport org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;\nimport org.apache.maven.artifact.versioning.VersionRange;\n\nvoid checkPrerequisite(String v) throws InvalidVersionSpecificationException {\n    if (v != null && !v.trim().isEmpty()) VersionRange.createFromVersionSpec(v);\n}","typeGuard":"// returns true when the descriptor prerequisite can be parsed\nstatic boolean isParseablePrerequisite(String v) {\n    if (v == null || v.trim().isEmpty()) return true;\n    try {\n        org.apache.maven.artifact.versioning.VersionRange.createFromVersionSpec(v);\n        return true;\n    } catch (org.apache.maven.artifact.versioning.InvalidVersionSpecificationException e) {\n        return false;\n    }\n}","tryCatchPattern":null,"preventionTips":["Use literal dotted versions (3.6.3) in <prerequisites><maven>; never filtered properties like ${maven.version}","Let maven-plugin-plugin generate plugin.xml rather than hand-editing it","Run mvn plugin:descriptor (or a full package) in CI to validate generated descriptor values"],"tags":["maven","plugin-prerequisites","version-parsing","descriptor"],"backgroundTag":"invalid-version-string","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}