quarkusio/quarkus · error · RuntimeException

Failed to resolve extension catalog

Error message

Failed to resolve extension catalog

What it means

MavenProjectBuildFile.getProject resolves the Quarkus extension catalog through the registry catalog resolver for the project's imported platforms (or the current Quarkus version). When the resolver throws RegistryResolutionException, it is wrapped in a RuntimeException with message 'Failed to resolve extension catalog'. This means one or more configured Quarkus registries could not be reached or produced no resolvable platform descriptor.

Source

Thrown at independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/project/buildfile/MavenProjectBuildFile.java:112

        } else {
            final ArtifactDescriptorResult descriptor = describe(artifactResolver, projectPom);
            managedDeps = toArtifactCoords(descriptor.getManagedDependencies());
            deps = () -> toArtifactCoords(descriptor.getDependencies());
            importedPlatforms = collectPlatformDescriptors(managedDeps, log);
            quarkusVersion = getQuarkusVersion(managedDeps);
        }

        final ExtensionCatalog extensionCatalog;
        if (catalogResolver.hasRegistries()) {
            try {
                if (!importedPlatforms.isEmpty()) {
                    extensionCatalog = catalogResolver.resolveExtensionCatalog(importedPlatforms);
                } else {
                    extensionCatalog = quarkusVersion == null ? catalogResolver.resolveExtensionCatalog()
                            : catalogResolver.resolveExtensionCatalog(quarkusVersion);
                }
            } catch (RegistryResolutionException e) {
                throw new RuntimeException("Failed to resolve extension catalog", e);
            }
        } else {
            if (importedPlatforms.isEmpty()) {
                extensionCatalog = ToolsUtils.resolvePlatformDescriptorDirectly(null, null, quarkusVersion, artifactResolver,
                        log);
            } else {
                extensionCatalog = ToolsUtils.mergePlatforms(importedPlatforms, artifactResolver);
            }
        }
        final MavenProjectBuildFile extensionManager = new MavenProjectBuildFile(projectDir, extensionCatalog,
                projectModel, deps, managedDeps, projectProps, projectPom == null ? null : artifactResolver);
        final List<ResourceLoader> codestartResourceLoaders = codestartLoadersBuilder(log).catalog(extensionCatalog)
                .artifactResolver(artifactResolver).build();
        final JavaVersion javaVersion = resolveJavaVersion(projectProps);
        return QuarkusProject.of(projectDir, extensionCatalog,
                codestartResourceLoaders, log, extensionManager, javaVersion);
    }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Check network connectivity to the configured registry and proxy settings (HTTP_PROXY, ~/.m2/settings.xml proxies)
  2. Verify the Quarkus platform version and imported platform coordinates exist and are spelled correctly
  3. Use ToolsUtils-style direct platform resolution or configure a fallback/offline registry mirror
  4. Inspect the wrapped cause (RegistryResolutionException) for the exact failing registry/URL

Example fix

// before
// quarkus.platform.version=999-SNAPSHOT (not published) -> resolve fails
// after
// pin an existing released platform version in pom.xml:
// <quarkus.platform.version>3.2.0.Final</quarkus.platform.version>
// and retry getProject(); optionally catch and fall back:
try {
    extensionCatalog = catalogResolver.resolveExtensionCatalog(importedPlatforms);
} catch (RegistryResolutionException e) {
    extensionCatalog = ToolsUtils.resolvePlatformDescriptorDirectly(null, null, quarkusVersion, artifactResolver, log);
}
Defensive patterns

Strategy: try-catch

Validate before calling

// pre-check reachability of the registry before resolution
HttpURLConnection c = (HttpURLConnection) new URL("https://registry.quarkus.io")
        .openConnection();
c.setConnectTimeout(3000);
if (c.getResponseCode() != 200) throw new IllegalStateException("Quarkus registry unreachable");

Try / catch

try {
    extensionCatalog = projectBuildFile.getProject();
} catch (RuntimeException e) {
    if (e.getCause() instanceof RegistryResolutionException) {
        // fall back to direct platform descriptor resolution or offline catalog
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: Calling MavenProjectBuildFile.getProject() when the configured registry (e.g. registry.quarkus.io / registry.quarkus.redhat.com) is unreachable, a registry artifact version does not exist, network/proxy blocks the request, or imported platform coordinates cannot be resolved.

Common situations: Corporate proxy or firewall blocking registry.quarkus.io; offline/air-gapped environments; typos or unavailable versions in quarkus.platform.version / imported platforms; registry outages; stale local Maven repository state.

Related errors


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