quarkusio/quarkus · error · RegistryResolutionException

Failed to resolve the latest version of ${groupId}:${artifac

Error message

Failed to resolve the latest version of ${groupId}:${artifactId}:${classifier}:${type}:${versionRange}

What it means

Thrown by MavenPlatformExtensionsResolver.resolveLatestBomVersion when the underlying Maven artifact resolver cannot determine the latest version of a platform BOM artifact within the requested version range. Any exception from artifactResolver.getLatestVersionFromRange (network failure, missing metadata, unparseable range) is wrapped into this RegistryResolutionException with the full GAV:classifier:type plus the version range in the message.

Source

Thrown at independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenPlatformExtensionsResolver.java:95

        }
        try {
            return ExtensionCatalog.mutableFromFile(jsonPath);
        } catch (IOException e) {
            throw new RegistryResolutionException("Failed to parse Quarkus extension catalog " + jsonPath, e);
        }
    }

    private String resolveLatestBomVersion(ArtifactCoords bom, String versionRange)
            throws RegistryResolutionException {
        final Artifact bomArtifact = new DefaultArtifact(bom.getGroupId(),
                PlatformArtifacts.ensureBomArtifactId(bom.getArtifactId()),
                "", "pom", bom.getVersion());
        log.debug("Resolving the latest version of %s:%s:%s:%s in the range %s", bom.getGroupId(), bom.getArtifactId(),
                bom.getClassifier(), bom.getType(), versionRange);
        try {
            return artifactResolver.getLatestVersionFromRange(bomArtifact, versionRange);
        } catch (Exception e) {
            throw new RegistryResolutionException("Failed to resolve the latest version of " + bomArtifact.getGroupId()
                    + ":" + bom.getArtifactId() + ":" + bom.getClassifier() + ":" + bom.getType() + ":" + versionRange, e);
        }
    }

    private static boolean isVersionRange(String versionStr) {
        if (versionStr == null || versionStr.isEmpty()) {
            return false;
        }
        char c = versionStr.charAt(0);
        if (c == '[' || c == '(') {
            return true;
        }
        c = versionStr.charAt(versionStr.length() - 1);
        if (c == ']' || c == ')') {
            return true;
        }
        return versionStr.indexOf(',') >= 0;
    }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Check network access to the configured Maven repository (curl the repository URL / maven-metadata.xml) and retry.
  2. Replace the version range with a concrete, published platform version (e.g. 3.2.5.Final instead of [3.0,4.0)) in your configuration.
  3. If using a corporate repository manager, verify it proxies and caches the Quarkus platform group metadata correctly.
  4. Run Maven with -e/-X or debug logging to see the wrapped cause and the exact repository that failed.
  5. Pin the Quarkus BOM version in dependencyManagement to avoid range resolution entirely.

Example fix

// before: version range that fails to resolve
<quarkus.platform.version>[999.0,)</quarkus.platform.version>
// after: pinned version known to exist
<quarkus.platform.version>3.2.5.Final</quarkus.platform.version>
Defensive patterns

Strategy: retry

Validate before calling

String range = quarkusPlatformVersion;
// pre-check: only pass ranges you know are satisfiable; verify metadata locally
if (range.startsWith("[") || range.startsWith("(")) {
    URL meta = URI.create(repoUrl + "/io/quarkus/platform/quarkus-bom/maven-metadata.xml").toURL();
    try (InputStream in = meta.openStream()) { // throws if repo unreachable
        if (in.read() == -1) throw new IllegalStateException("Empty maven-metadata.xml");
    }
} else {
    // concrete version: check it is published
    URL pom = URI.create(repoUrl + "/io/quarkus/platform/quarkus-bom/" + range + "/quarkus-bom-" + range + ".pom").toURL();
    ((HttpURLConnection) pom.openConnection()).setConnectTimeout(5000);
}

Type guard

static boolean isSaneVersionRange(String v) {
    return v != null && !v.isEmpty()
        && (v.matches("\\d+\\.\\d+\\.\\d+.*")          // concrete version
            || v.matches("[\\[(].*[\\])]"));          // well-formed range

Try / catch

try {
    String latest = resolver.resolvePlatformExtensions(bom, versionRange).getQuarkusCoreVersion();
} catch (RegistryResolutionException e) {
    if (e.getMessage().startsWith("Failed to resolve the latest version of")) {
        // network/metadata issue: exponential backoff retry, then fall back to pinned version
        latest = retryWithBackoff(() -> resolver.resolvePlatformExtensions(bom, versionRange), 3)
                     .getQuarkusCoreVersion();
    } else throw e;
}

Prevention

When it happens

Trigger: Calling resolvePlatformExtensions with a BOM whose version is a version range (isVersionRange check) and artifactResolver.getLatestVersionFromRange throws — e.g. the remote repository is unreachable, maven-metadata.xml is missing or malformed for the BOM, or no version in the range satisfies it.

Common situations: Offline/behind-firewall CI environments that cannot reach Maven Central or the Quarkus registry; a custom version range in quarkus.platform.version that matches no published versions (typo, wrong major range); corporate Nexus/Artifactory not proxying the quarkus platform group; a removed or relocated BOM version.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/e158fe75ab9a2037. Report an issue: GitHub.