quarkusio/quarkus · error · RuntimeException

The following registries were configured as exclusive provid

Error message

The following registries were configured as exclusive providers of extensions based on Quarkus version ${quarkusCoreVersion}: ${conflictingRegistryIds}

What it means

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.

Source

Thrown at independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/ExtensionCatalogResolver.java:894

                    catalogBuilder.addUpstreamQuarkusVersion(upstreamQuarkusVersion);
                }
            }
        }
    }

    private List<RegistryExtensionResolver> getRegistriesForQuarkusVersion(String quarkusCoreVersion) {
        try {
            return filterRegistries(r -> r.checkQuarkusVersion(quarkusCoreVersion));
        } catch (ExclusiveProviderConflictException e) {
            final StringBuilder buf = new StringBuilder();
            buf.append(
                    "The following registries were configured as exclusive providers of extensions based on Quarkus version ");
            buf.append(quarkusCoreVersion);
            buf.append(": ").append(e.conflictingRegistries.get(0).getId());
            for (int i = 1; i < e.conflictingRegistries.size(); ++i) {
                buf.append(", ").append(e.conflictingRegistries.get(i).getId());
            }
            throw new RuntimeException(buf.toString());
        }
    }

    private List<RegistryExtensionResolver> filterRegistries(Function<RegistryExtensionResolver, Integer> recognizer)
            throws ExclusiveProviderConflictException {
        RegistryExtensionResolver exclusiveProvider = null;
        List<RegistryExtensionResolver> filtered = null;
        List<RegistryExtensionResolver> conflicts = null;
        for (int i = 0; i < registries.size(); ++i) {
            final RegistryExtensionResolver registry = registries.get(i);
            final int versionCheck = recognizer.apply(registry);

            if (versionCheck == RegistryExtensionResolver.VERSION_NOT_RECOGNIZED) {
                if (exclusiveProvider == null && filtered == null) {
                    filtered = new ArrayList<>(registries.size() - 1);
                    for (int j = 0; j < i; ++j) {
                        filtered.add(registries.get(j));
                    }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Fix the registry configuration so only one registry is marked exclusive for the given Quarkus version.
  2. Contact/fix the operator of the offending registry to correct its quarkus-versions exclusivity metadata.
  3. Remove one of the conflicting registries from .quarkus/config.yaml.
  4. Use a quarkusCoreVersion for which only one configured registry is exclusive.

Example fix

// before (.quarkus/config.yaml)
registries:
  - registry.quarkus.io
  - registry.acme.corp # also declares exclusive for 3.2.x
// after
registries:
  - registry.acme.corp # keep only the exclusive provider
  - registry.quarkus.io # or remove the exclusivity claim on the registry side
Defensive patterns

Strategy: try-catch

Validate before calling

// Prefer fixing configuration; before resolving, ensure only one registry claims exclusivity per Quarkus version in your registry descriptors/config.

Try / catch

// Java
try {
    registries = resolver.resolveExtensionCatalog(coreVersion, platforms);
} catch (RuntimeException e) {
    if (e.getMessage().startsWith("The following registries were configured as exclusive providers")) {
        // remove one of the conflicting registries from config and retry once
    }
    throw e;
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


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