quarkusio/quarkus · error · RegistryResolutionException

The following registries were configured as exclusive provid

Error message

The following registries were configured as exclusive providers of the ${bomCoords} platform: ${conflictingRegistryIds}

What it means

A RegistryResolutionException thrown during resolver initialization when two or more registries are each configured as the exclusive provider of the same platform BOM. Exclusive-provider conflicts are detected per BOM and reported with the ids of all conflicting registries.

Source

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

        final Set<ArtifactCoords> addedPlatformBoms = new HashSet<>();
        String quarkusVersion = null;
        for (ArtifactCoords bom : preferredPlatforms) {
            if (!addedPlatformBoms.add(bom)) {
                continue;
            }
            if (registries == null || registries.isEmpty()) {
                try {
                    registries = filterRegistries(r -> r.checkPlatform(bom));
                } catch (ExclusiveProviderConflictException e) {
                    final StringBuilder buf = new StringBuilder();
                    buf.append(
                            "The following registries were configured as exclusive providers of the ");
                    buf.append(PlatformArtifacts.ensureBomArtifact(bom).toCompactCoords());
                    buf.append(" platform: ").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 RegistryResolutionException(buf.toString());
                }

                if (registries.isEmpty()) {
                    log.warn("None of the configured registries recognizes platform " + bom.toCompactCoords());
                    continue;
                }
            }

            ExtensionCatalog.Mutable catalog = null;
            RegistryExtensionResolver registry = null;
            int registryPreferenceIndex = 0;
            for (int i = 0; i < registries.size(); ++i) {
                registry = registries.get(i);
                try {
                    catalog = registry.resolvePlatformExtensions(bom);
                    registryPreferenceIndex = catalogBuilder.getRegistryPreferenceIndex(registry.getId());
                    break;
                } catch (RegistryResolutionException e) {

View on GitHub (pinned to e1c734241f)

Solutions

  1. Mark exclusive=true for only one registry per platform BOM; remove the exclusive flag from the duplicate
  2. Remove one of the conflicting registries from the configuration for that platform
  3. Split the platforms so each registry exclusively provides a distinct BOM

Example fix

// before: both registries exclusive for the same BOM
<quarkus-registry><url>https://registry.quarkus.io</url><exclusive>true</exclusive></quarkus-registry>
<quarkus-registry><url>https://registry.quarkus.redhat.com</url><exclusive>true</exclusive></quarkus-registry>
// after
<quarkus-registry><url>https://registry.quarkus.io</url></quarkus-registry>
<quarkus-registry><url>https://registry.quarkus.redhat.com</url><exclusive>true</exclusive></quarkus-registry>
Defensive patterns

Strategy: validation

Validate before calling

// Ensure at most one exclusive registry per platform BOM in config
Map<String, Long> counts = registries.stream()
  .filter(r -> r.isExclusive())
  .flatMap(r -> r.getExclusivePlatforms().stream())
  .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
if (counts.values().stream().anyMatch(c -> c > 1)) throw new IllegalStateException("Duplicate exclusive platform");

Try / catch

try { resolver.resolveExtensionCatalog(); } catch (RegistryResolutionException e) { if (e.getMessage().contains("exclusive providers")) { /* fix registry config */ } throw e; }

Prevention

When it happens

Trigger: ExtensionCatalogResolver constructor (config processing) resolves each configured platform BOM via its registries; a ConflictingProviderException carrying conflictingRegistries is caught and rethrown as this message using PlatformArtifacts.ensureBomArtifact(bom).toCompactCoords().

Common situations: settings.xml or registry client config marking two different registries with exclusive=true for the same io.quarkus.platform BOM; mixing corporate and community registries both claiming exclusive ownership of the same platform.

Related errors


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