{"record":{"id":"a795a736bcecc4e6","repo":"apache/maven","slug":"unable-to-parse-version-range","errorCode":null,"errorMessage":"Unable to parse version range: ","messagePattern":"Unable to parse version range: ","errorType":"validation","errorClass":"VersionParserException","httpStatus":null,"severity":"error","filePath":"impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultModelVersionParser.java","lineNumber":141,"sourceCode":"            return delegate.toString();\n        }\n    }\n\n    static class DefaultVersionRange implements VersionRange {\n        private final VersionScheme versionScheme;\n        private final org.eclipse.aether.version.VersionRange delegate;\n\n        DefaultVersionRange(VersionScheme versionScheme, org.eclipse.aether.version.VersionRange delegate) {\n            this.versionScheme = versionScheme;\n            this.delegate = delegate;\n        }\n\n        DefaultVersionRange(VersionScheme versionScheme, String delegateValue) {\n            this.versionScheme = versionScheme;\n            try {\n                this.delegate = versionScheme.parseVersionRange(delegateValue);\n            } catch (InvalidVersionSpecificationException e) {\n                throw new VersionParserException(\"Unable to parse version range: \" + delegateValue, e);\n            }\n        }\n\n        @Override\n        public boolean contains(Version version) {\n            if (version instanceof DefaultVersion defaultVersion) {\n                return delegate.containsVersion(defaultVersion.delegate);\n            } else {\n                return contains(new DefaultVersion(versionScheme, version.toString()));\n            }\n        }\n\n        @Override\n        public Boundary getUpperBoundary() {\n            org.eclipse.aether.version.VersionRange.Bound bound = delegate.getUpperBound();\n            if (bound == null) {\n                return null;\n            }","sourceCodeStart":123,"sourceCodeEnd":159,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultModelVersionParser.java#L123-L159","documentation":"DefaultModelVersionParser.DefaultVersionRange parses range expressions like [1.0,2.0), (,1.5], [1.1] through the resolver VersionScheme. Malformed range syntax throws VersionParserException('Unable to parse version range: <input>'). The input must be a range specification, not a plain version — a bare '1.0' is invalid here (use parseVersion) and unbalanced or misordered brackets/commas are rejected.","triggerScenarios":"session.getService(VersionParser.class).parseVersionRange('1.0') (plain version instead of range), '[1.0,2.0' (missing bracket), '[2.0,1.0)' (lower bound above upper), or an uninterpolated '${range}' property.","commonSituations":"Version ranges in dependencyManagement or plugin configuration with typos; copy-pasting a range missing the closing parenthesis; forgetting Maven requires hard ([...]) or soft ((...)) bounds on at least one side; properties for ranges left unexpanded.","solutions":["Use proper range syntax with balanced brackets and a comma between bounds, e.g. '[1.0,2.0)' or '[1.0]'","If the value is a single version, call parseVersion instead of parseVersionRange","Validate user-supplied ranges with a regex like ^[\\[(].*[\\])] before passing them in"],"exampleFix":"<!-- before -->\n<version>[1.0,2.0</version>\n\n<!-- after -->\n<version>[1.0,2.0)</version>","handlingStrategy":"try-catch","validationCode":"private static final Pattern RANGE = Pattern.compile('^[\\\\[(].*,.*[\\\\])]$');\nif (!RANGE.matcher(range.trim()).matches()) {\n    throw new IllegalArgumentException('Not a valid version range: ' + range);\n}","typeGuard":null,"tryCatchPattern":"try {\n    VersionRange r = parser.parseVersionRange(range);\n} catch (VersionParserException e) {\n    throw new IllegalArgumentException('Bad range \"' + range + '\"; expected e.g. [1.0,2.0)', e);\n}","preventionTips":["Require balanced brackets and a comma in every range expression","Use parseVersion for single versions, parseVersionRange only for ranges","Validate ranges at configuration-load time, not deep in dependency resolution"],"tags":["maven","version-range","pom","validation"],"backgroundTag":"invalid-version-range","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}