{"record":{"id":"1fb68b1a0251ed4c","repo":"apache/maven","slug":"unable-to-find-a-version-in-resetartifact-geta","errorCode":null,"errorMessage":"Unable to find a version in \" + resetArtifact.getAvailableVersions() + \" to match the range \" + resetArtifact.getVersionRange()","messagePattern":"Unable to find a version in \" \\+ resetArtifact\\.getAvailableVersions\\(\\) \\+ \" to match the range \" \\+ resetArtifact\\.getVersionRange\\(\\)","errorType":"exception","errorClass":"OverConstrainedVersionException","httpStatus":null,"severity":"error","filePath":"compat/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java","lineNumber":322,"sourceCode":"                                            resetArtifact.setDependencyTrail(node.getDependencyTrail());\n                                            throw new ArtifactResolutionException(\n                                                    \"Unable to get dependency information: \" + e.getMessage(),\n                                                    resetArtifact,\n                                                    request.getRemoteRepositories(),\n                                                    e);\n                                        }\n                                    }\n                                    // end hack\n\n                                    // MNG-2861: match version can return null\n                                    ArtifactVersion selectedVersion = resetArtifact\n                                            .getVersionRange()\n                                            .matchVersion(resetArtifact.getAvailableVersions());\n\n                                    if (selectedVersion != null) {\n                                        resetArtifact.selectVersion(selectedVersion.toString());\n                                    } else {\n                                        throw new OverConstrainedVersionException(\n                                                \"Unable to find a version in \" + resetArtifact.getAvailableVersions()\n                                                        + \" to match the range \" + resetArtifact.getVersionRange(),\n                                                resetArtifact);\n                                    }\n\n                                    fireEvent(ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, resetNodes[j]);\n                                }\n                            }\n                        }\n\n                        // Conflict Resolution\n                        ResolutionNode resolved = null;\n                        for (Iterator<ConflictResolver> j = conflictResolvers.iterator();\n                                resolved == null && j.hasNext(); ) {\n                            ConflictResolver conflictResolver = j.next();\n\n                            resolved = conflictResolver.resolveConflict(previous, node);\n                        }","sourceCodeStart":304,"sourceCodeEnd":340,"githubUrl":"https://github.com/apache/maven/blob/e4093d4e120eac99d6bdce5ba67cace2f3085c97/compat/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java#L304-L340","documentation":"After the legacy resolver re-reads available versions for a ranged dependency during conflict resolution (the 'reset artifact' path), it calls VersionRange.matchVersion(availableVersions). If no listed version satisfies the range, matchVersion returns null (MNG-2861) and this OverConstrainedVersionException is thrown, naming both the available version list and the range. It means metadata was fetched successfully — the versions simply do not intersect the constraint.","triggerScenarios":"A dependency version range that excludes every version actually present in reachable repositories, hit on the conflict-resolution/re-resolution branch of DefaultLegacyArtifactCollector — e.g. range [1.2,1.3) when the repository only contains 1.3.0 and 1.4.1, or a range requiring 2.x when only 1.x was ever published.","commonSituations":"Upper-bound typo ([1.0,1.5) when 1.5.0 is the only release); a range written against a library whose maintainers never published a version inside it; another dependency forcing re-resolution of an already-ranged artifact; local repo containing only stale versions while newer ones exist but are unreachable.","solutions":["Read the message: it lists the available versions — pick one and pin it as a concrete <version> instead of the range","Widen or correct the range so it includes at least one of the listed versions (check for wrong upper bound or wrong groupId/artifactId)","If a newer version exists upstream but is not listed, refresh metadata with mvn -U and verify the repository/mirror actually proxies it","In multi-module builds, use dependencyManagement to pin the conflicting transitive dependency to a version that exists"],"exampleFix":"<!-- before: repo only has 1.3.0 and 1.4.1 -->\n<version>[1.2,1.3)</version>\n\n<!-- after -->\n<version>[1.2,1.5)</version>\n<!-- or simply -->\n<version>1.4.1</version>","handlingStrategy":"validation","validationCode":"import org.apache.maven.artifact.versioning.VersionRange;\nimport org.apache.maven.artifact.versioning.ArtifactVersion;\n\nboolean rangeSatisfiable(VersionRange range, List<ArtifactVersion> available) {\n    return range.matchVersion(available) != null; // exactly the check that throws otherwise\n}\n\nif (!rangeSatisfiable(artifact.getVersionRange(), artifact.getAvailableVersions())) {\n    throw new IllegalStateException(\"Range \" + artifact.getVersionRange()\n            + \" matches none of \" + artifact.getAvailableVersions());\n}","typeGuard":null,"tryCatchPattern":"try {\n    collector.collect(artifacts, ...);\n} catch (OverConstrainedVersionException e) {\n    // message contains available versions + range; surface both to the user\n    report(\"Version range conflict for \" + e.getArtifact()?.getId()\n            + \": \" + e.getMessage() + \" — pin a listed version or widen the range\");\n}","preventionTips":["Avoid version ranges in releases; pin versions via dependencyManagement","When ranges are necessary, prefer soft ranges [1.2,) over fully-bounded ones so newer releases satisfy them","Run dependency:analyze / versions:display-dependency-updates in CI to notice when published versions drift outside your ranges"],"tags":["maven","version-range","dependency-resolution","conflict-resolution","legacy-compat"],"backgroundTag":"no-version-matches-range","analyzedSha":"e4093d4e120eac99d6bdce5ba67cace2f3085c97","analyzedAt":"2026-08-21T22:58:24.034Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}