{"record":{"id":"e2b525fe3fdc8c4a","repo":"quarkusio/quarkus","slug":"failed-to-resolve-extension-catalog","errorCode":null,"errorMessage":"Failed to resolve extension catalog","messagePattern":"Failed to resolve extension catalog","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/QuarkusPlatformTask.java","lineNumber":61,"sourceCode":"    // Captured at configuration time so the task actions do not call Task.getProject() at execution time, which is\n    // deprecated and removed in Gradle 10. The platform tasks are not compatible with the configuration cache, so\n    // holding a Project reference is acceptable (it is never serialized).\n    private final transient Project project;\n\n    QuarkusPlatformTask(String description) {\n        super(description);\n        this.project = getProject();\n    }\n\n    private ExtensionCatalog extensionsCatalog(boolean limitExtensionsToImportedPlatforms, MessageWriter log) {\n        final List<ArtifactCoords> platforms = importedPlatforms();\n        ExtensionCatalogResolver catalogResolver;\n        catalogResolver = getExtensionCatalogResolver(log);\n        if (catalogResolver.hasRegistries() && !limitExtensionsToImportedPlatforms) {\n            try {\n                return catalogResolver.resolveExtensionCatalog(platforms);\n            } catch (Exception e) {\n                throw new RuntimeException(\"Failed to resolve extension catalog\", e);\n            }\n        }\n        return ToolsUtils.mergePlatforms(platforms, extension().getAppModelResolver());\n    }\n\n    protected ExtensionCatalogResolver getExtensionCatalogResolver(MessageWriter log) {\n        if (catalogResolver == null) {\n            try {\n                catalogResolver = QuarkusProjectHelper.isRegistryClientEnabled()\n                        ? QuarkusProjectHelper.getCatalogResolver(log)\n                        : ExtensionCatalogResolver.empty();\n            } catch (RegistryResolutionException e) {\n                throw new RuntimeException(\"Failed to initialize Quarkus extension catalog resolver\", e);\n            }\n        }\n        return catalogResolver;\n    }\n","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/QuarkusPlatformTask.java#L43-L79","documentation":"QuarkusPlatformTask.extensionsCatalog resolves the extension catalog via an ExtensionCatalogResolver when registries are configured and the task is not limited to imported platforms. If catalog resolution throws, it wraps the cause in a RuntimeException 'Failed to resolve extension catalog'. When no registries exist, it falls back to merging platforms from the app model resolver.","triggerScenarios":"Running platform-dependent Quarkus Gradle tasks (e.g. addExtension, listExtensions) where catalogResolver.resolveExtensionCatalog(platforms) throws — registry unreachable, unknown platform coordinates, or catalog format errors; raised in extensionsCatalog, called by catalog.","commonSituations":"Network outages or proxy/firewall blocks to registry.quarkus.io; specifying a platform version that does not exist; registry misconfiguration; TLS certificate issues in corporate environments.","solutions":["Inspect the cause chain with --stacktrace to identify the registry failure.","Verify registry connectivity: curl https://registry.quarkus.io and configure proxy/TLS settings if needed.","Confirm requested platform coordinates (groupId:artifactId:version) exist in the registry.","Restrict the task to imported platforms (quarkus.limitExtensionsToImportedPlatforms equivalent) to use the local model instead of registries.","Declare the platform in the build so the ToolsUtils.mergePlatforms fallback path can resolve it without a registry."],"exampleFix":"// before: request unknown platform\n./gradlew addExtension --extensions=rest --platform=io.quarkus.platform:quarkus-bom:0.0\n// after: use a valid platform or rely on the imported one\n./gradlew addExtension --extensions=rest","handlingStrategy":"fallback","validationCode":"// Resolve catalog dependencies up front; fall back to imported-platforms mode on failure\n./gradlew dependencyInsight --dependency quarkus-bom  # platform must resolve locally\ncurl -fsSL https://registry.quarkus.io/ > /dev/null || echo \"fall back to imported platforms\"","typeGuard":null,"tryCatchPattern":"try {\n  ./gradlew addExtension --extensions=rest\n} catch (RuntimeException e) {\n  if (e.getMessage().equals(\"Failed to resolve extension catalog\")) {\n    // inspect cause with --stacktrace; ensure the platform is declared so the\n    // local mergePlatforms fallback can be used, or fix registry access\n  }\n}","preventionTips":["Declare the Quarkus platform in the build so tasks can fall back to the local model.","Validate platform coordinates against the registry before use.","Configure proxies/TLS for registry.quarkus.io in CI images.","Prefer limiting extension queries to imported platforms when operating offline."],"tags":["gradle","network","extension-registry","quarkus-cli"],"backgroundTag":"extension-catalog-resolution-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}