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
- Check network access to the configured Maven repository (curl the repository URL / maven-metadata.xml) and retry.
- 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.
- If using a corporate repository manager, verify it proxies and caches the Quarkus platform group metadata correctly.
- Run Maven with -e/-X or debug logging to see the wrapped cause and the exact repository that failed.
- 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
- Pin concrete Quarkus BOM versions instead of open-ended version ranges.
- Ensure CI has network access (or an internal mirror) to Maven Central / Quarkus registry.
- Validate maven-metadata.xml availability on corporate proxies for the Quarkus platform group.
- Wrap resolution with bounded retries for transient network failures.
- Keep the registry-client and platform versions aligned.
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
- Failed to initialize Maven artifact resolver
- Failed to resolve Quarkus extension catalog
- Failed to resolve the extension catalog for stream '${stream
- Failed to resolve application model <appArtifact> dependenci
- Failed to resolve the available updates
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/e158fe75ab9a2037.
Report an issue: GitHub.