{"record":{"id":"797801cd15075153","repo":"quarkusio/quarkus","slug":"the-following-registries-were-configured-as-exclus-797801","errorCode":null,"errorMessage":"The following registries were configured as exclusive providers of extensions based on Quarkus version ${quarkusCoreVersion}: ${conflictingRegistryIds}","messagePattern":"The following registries were configured as exclusive providers of extensions based on Quarkus version (.+?): (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/ExtensionCatalogResolver.java","lineNumber":894,"sourceCode":"                    catalogBuilder.addUpstreamQuarkusVersion(upstreamQuarkusVersion);\n                }\n            }\n        }\n    }\n\n    private List<RegistryExtensionResolver> getRegistriesForQuarkusVersion(String quarkusCoreVersion) {\n        try {\n            return filterRegistries(r -> r.checkQuarkusVersion(quarkusCoreVersion));\n        } catch (ExclusiveProviderConflictException e) {\n            final StringBuilder buf = new StringBuilder();\n            buf.append(\n                    \"The following registries were configured as exclusive providers of extensions based on Quarkus version \");\n            buf.append(quarkusCoreVersion);\n            buf.append(\": \").append(e.conflictingRegistries.get(0).getId());\n            for (int i = 1; i < e.conflictingRegistries.size(); ++i) {\n                buf.append(\", \").append(e.conflictingRegistries.get(i).getId());\n            }\n            throw new RuntimeException(buf.toString());\n        }\n    }\n\n    private List<RegistryExtensionResolver> filterRegistries(Function<RegistryExtensionResolver, Integer> recognizer)\n            throws ExclusiveProviderConflictException {\n        RegistryExtensionResolver exclusiveProvider = null;\n        List<RegistryExtensionResolver> filtered = null;\n        List<RegistryExtensionResolver> conflicts = null;\n        for (int i = 0; i < registries.size(); ++i) {\n            final RegistryExtensionResolver registry = registries.get(i);\n            final int versionCheck = recognizer.apply(registry);\n\n            if (versionCheck == RegistryExtensionResolver.VERSION_NOT_RECOGNIZED) {\n                if (exclusiveProvider == null && filtered == null) {\n                    filtered = new ArrayList<>(registries.size() - 1);\n                    for (int j = 0; j < i; ++j) {\n                        filtered.add(registries.get(j));\n                    }","sourceCodeStart":876,"sourceCodeEnd":912,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/ExtensionCatalogResolver.java#L876-L912","documentation":"When resolving which registries serve a given Quarkus core version, more than one registry declared itself an exclusive provider for that version. Exclusive-provider contracts cannot both hold, so the resolver throws a RuntimeException listing all conflicting registry IDs. It signals a registry configuration/metadata inconsistency, not a network problem.","triggerScenarios":"getRegistriesForQuarkusVersion() -> filterRegistries() raises ExclusiveProviderConflictException because two configured registries' version catalogs both mark themselves exclusive for the same quarkusCoreVersion; happens during resolveExtensionCatalog() with registries whose quarkus-versions descriptors overlap exclusivity.","commonSituations":"Misconfigured private registry mirroring Quarkus while keeping the exclusive flag; a registry published with bad/overlapping exclusivity metadata; mixing registry.quarkus.io with a corporate registry that both claim exclusivity for the same version line.","solutions":["Fix the registry configuration so only one registry is marked exclusive for the given Quarkus version.","Contact/fix the operator of the offending registry to correct its quarkus-versions exclusivity metadata.","Remove one of the conflicting registries from .quarkus/config.yaml.","Use a quarkusCoreVersion for which only one configured registry is exclusive."],"exampleFix":"// before (.quarkus/config.yaml)\nregistries:\n  - registry.quarkus.io\n  - registry.acme.corp # also declares exclusive for 3.2.x\n// after\nregistries:\n  - registry.acme.corp # keep only the exclusive provider\n  - registry.quarkus.io # or remove the exclusivity claim on the registry side","handlingStrategy":"try-catch","validationCode":"// Prefer fixing configuration; before resolving, ensure only one registry claims exclusivity per Quarkus version in your registry descriptors/config.","typeGuard":null,"tryCatchPattern":"// Java\ntry {\n    registries = resolver.resolveExtensionCatalog(coreVersion, platforms);\n} catch (RuntimeException e) {\n    if (e.getMessage().startsWith(\"The following registries were configured as exclusive providers\")) {\n        // remove one of the conflicting registries from config and retry once\n    }\n    throw e;\n}","preventionTips":["Never enable the exclusive-provider flag on a mirror/corporate registry alongside registry.quarkus.io for the same version line.","Keep per-version exclusivity documented in your registry operations runbook.","Pin one registry per Quarkus version in .quarkus/config.yaml.","Validate registry metadata before publishing exclusivity changes."],"tags":["registry","configuration","conflict"],"backgroundTag":"exclusive-provider-conflict","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}