badges/shields · error · NotFound

no matching versions found

Error message

no matching versions found

What it means

Thrown as NotFound when strategy 'highestVersion' found versions in the metadata, but the user-supplied filter excluded every one of them, leaving the filtered list empty. This is not a server/metadata problem — it means the version list is fine but no version matches the requested filter (e.g. a version range or regex).

Source

Thrown at services/maven-metadata/maven-metadata.service.js:119

          prettyMessage: "property 'release' not found",
        })
      }
      return data.metadata.versioning.release
    } else if (strategy === 'highestVersion') {
      if (
        data.metadata.versioning.versions?.version === undefined ||
        data.metadata.versioning.versions?.version?.length === 0
      ) {
        throw new InvalidResponse({
          prettyMessage: 'no versions found',
        })
      }
      const versions = this.applyFilter({
        versions: data.metadata.versioning.versions.version,
        filter,
      })
      if (versions.length === 0) {
        throw new NotFound({ prettyMessage: 'no matching versions found' })
      }
      return versions.sort(compare).reverse()[0]
    }
    throw new InvalidParameter({ prettyMessage: 'unknown strategy' })
  }

  async handle(
    _namedParams,
    { metadataUrl, versionPrefix, versionSuffix, strategy, filter },
  ) {
    if (
      (versionPrefix !== undefined ||
        versionSuffix !== undefined ||
        filter !== undefined) &&
      strategy !== 'highestVersion'
    ) {
      throw new InvalidParameter({
        prettyMessage: `filter is not valid with strategy ${strategy}`,

View on GitHub (pinned to 766fd8bc89)

Solutions

  1. Widen or correct the version filter/range so it can match existing versions of the artifact.
  2. Log or inspect the unfiltered version list and test the filter against it (this.applyFilter) to see why nothing matches.
  3. Drop the filter entirely to confirm the artifact has resolvable versions, then tighten it incrementally.
  4. Catch the NotFound and return a sensible default or null in your calling code instead of failing.

Example fix

// before
const v = await service.getLatestVersion({ data, strategy: 'highestVersion', filter: '2.0.x' })
// after
const v = await service.getLatestVersion({ data, strategy: 'highestVersion', filter: '2.x' }) // or omit filter
Defensive patterns

Strategy: try-catch

Validate before calling

const filtered = versions.filter(v => matchFilter(v, filter)) // pre-check filter against known versions
if (filtered.length === 0) {
  console.warn(`filter ${filter} matches none of`, versions)
}

Try / catch

try {
  return await service.getLatestVersion({ data, strategy: 'highestVersion', filter })
} catch (err) {
  if (err && err.prettyMessage === 'no matching versions found') {
    return null // or retry with a broader filter
  }
  throw err
}

Prevention

When it happens

Trigger: Calling getLatestVersion/handle with a filter (version range/pattern) that matches zero of the versions in data.metadata.versioning.versions.version, e.g. filter '1.2.x' against an artifact that only publishes 2.x versions.

Common situations: Overly restrictive range specifications, typo'd version prefixes, artifacts whose versions jumped major versions, or expecting snapshot/milestone versions that a filter excludes.

Related errors


AI-assisted analysis of badges/shields@766fd8bc89 (2026-08-30). Data as JSON: /api/errors/53b806b9593bc9ef. Report an issue: GitHub.