{"record":{"id":"15729b6da18cdda8","repo":"apache/maven","slug":"unable-to-resolve-version-range","errorCode":null,"errorMessage":"Unable to resolve version range","messagePattern":"Unable to resolve version range","errorType":"exception","errorClass":"VersionRangeResolverException","httpStatus":null,"severity":"error","filePath":"impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultVersionRangeResolver.java","lineNumber":114,"sourceCode":"                @Override\n                public List<Version> getVersions() {\n                    return map(res.getVersions(), v -> session.parseVersion(v.toString()));\n                }\n\n                @Override\n                public Optional<Repository> getRepository(Version version) {\n                    ArtifactRepository repo = repos.get(version.toString());\n                    if (repo instanceof org.eclipse.aether.repository.LocalRepository localRepository) {\n                        return Optional.of(new DefaultLocalRepository(localRepository));\n                    } else if (repo instanceof org.eclipse.aether.repository.RemoteRepository remoteRepository) {\n                        return Optional.of(new DefaultRemoteRepository(remoteRepository));\n                    } else {\n                        return Optional.empty();\n                    }\n                }\n            };\n        } catch (VersionRangeResolutionException e) {\n            throw new VersionRangeResolverException(\"Unable to resolve version range\", e);\n        } finally {\n            RequestTraceHelper.exit(trace);\n        }\n    }\n\n    private Metadata.Nature toResolver(VersionRangeResolverRequest.Nature nature) {\n        return switch (nature) {\n            case RELEASE_OR_SNAPSHOT -> Metadata.Nature.RELEASE_OR_SNAPSHOT;\n            case SNAPSHOT -> Metadata.Nature.SNAPSHOT;\n            case RELEASE -> Metadata.Nature.RELEASE;\n        };\n    }\n}\n","sourceCodeStart":96,"sourceCodeEnd":128,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultVersionRangeResolver.java#L96-L128","documentation":"DefaultVersionRangeResolver delegates to the resolver's version range resolution and wraps any VersionRangeResolutionException in VersionRangeResolverException(\"Unable to resolve version range\"). The failure means the range expression itself could not be evaluated against the available version metadata: unsatisfiable or malformed bounds (e.g. inverted ranges, unbounded '[1.0)'), or repository metadata (maven-metadata.xml) that could not be read.","triggerScenarios":"versionRangeResolver.resolve(session, request) with a range like '[1.5,1.0)' (lower bound above upper), '[1.0)' (missing upper bound the resolver refuses), or when maven-metadata.xml listing available versions is missing/unreachable in every repository of the request.","commonSituations":"Dependency or plugin version ranges referencing versions absent from all reachable repositories; mirrors/proxies serving stale or partial metadata; range syntax typos in pom.xml; air-gapped environments where metadata cannot be fetched.","solutions":["Unwrap the cause (VersionRangeResolutionException) — its message names the exact range problem","Verify the range syntax: well-formed '[1.0,2.0)', '(,1.0]', and a resolvable upper bound","Check that at least one version inside the range actually exists in the configured repositories (browse the remote maven-metadata.xml)","Refresh metadata (delete the stale local copy under ~/.m2/repository/.../maven-metadata-*.xml) and confirm mirrors are reachable"],"exampleFix":"<!-- before: inverted / unsatisfiable range -->\n<dependency>\n  <groupId>com.acme</groupId>\n  <artifactId>core</artifactId>\n  <version>[2.0,1.0)</version>\n</dependency>\n\n<!-- after: satisfiable range backed by real versions -->\n<dependency>\n  <groupId>com.acme</groupId>\n  <artifactId>core</artifactId>\n  <version>[1.0,2.0)</version>\n</dependency>","handlingStrategy":"try-catch","validationCode":"// sanity-check the range expression before resolving it\ntry {\n    org.eclipse.aether.version.VersionRange.parse(\"[1.0,2.0)\"); // or Maven's VersionConstraint parser\n} catch (InvalidVersionSpecificationException e) {\n    throw new IllegalArgumentException(\"Bad version range: \" + e.getMessage(), e);\n}","typeGuard":null,"tryCatchPattern":"try {\n    VersionRangeResult r = versionRangeResolver.resolve(session, request);\n} catch (VersionRangeResolverException e) {\n    if (e.getCause() instanceof org.eclipse.aether.resolution.VersionRangeResolutionException vr) {\n        log.warn(\"Range {} unresolvable: {}\", range, vr.getMessage());\n        return fallbackVersion(); // e.g. pin a known-good version\n    }\n    throw e;\n}","preventionTips":["Prefer pinned versions; treat ranges as opt-in and document them","Verify a resolvable version inside the range exists before shipping the range","Validate range syntax in a unit test so typos fail at build time, not resolution time"],"tags":["maven","resolver","versioning","version-range","metadata"],"backgroundTag":"version-range-resolution-failed","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}