quarkusio/quarkus · error · QuarkusCommandException

Failed to locate quarkus-core in the extension catalog

Error message

Failed to locate quarkus-core in the extension catalog

What it means

findQuarkusCore scans the resolved ExtensionCatalog for an extension whose artifactId equals QUARKUS_CORE ('quarkus-core'). If the catalog contains no such entry, the handler cannot anchor version resolution and throws. This guards the rest of project creation, which assumes the core extension is present in the catalog.

Source

Thrown at independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/handlers/CreateProjectCommandHandler.java:502

            }
        }
        return result;
    }

    private static boolean containsQuarkusCore(List<Extension> extensions) {
        for (Extension e : extensions) {
            if (e.getArtifact().getArtifactId().equals(QUARKUS_CORE)) {
                return true;
            }
        }
        return false;
    }

    private static Extension findQuarkusCore(ExtensionCatalog extensionCatalog) throws QuarkusCommandException {
        final Optional<Extension> quarkusCore = extensionCatalog.getExtensions().stream()
                .filter(e -> e.getArtifact().getArtifactId().equals(QUARKUS_CORE)).findFirst();
        if (quarkusCore.isEmpty()) {
            throw new QuarkusCommandException("Failed to locate quarkus-core in the extension catalog");
        }
        return quarkusCore.get();
    }

    private static void addOriginsWithPreferences(final List<ExtensionOrigins> extOrigins, Extension e) {
        ExtensionOrigins.Builder eoBuilder = null;
        for (ExtensionOrigin c : e.getOrigins()) {
            if (c instanceof ExtensionCatalog catalog) {
                final OriginPreference op = (OriginPreference) c.getMetadata().get(Constants.REGISTRY_CLIENT_ORIGIN_PREFERENCE);
                if (op != null) {
                    if (eoBuilder == null) {
                        eoBuilder = ExtensionOrigins.builder(e.getArtifact().getKey());
                    }
                    eoBuilder.addOrigin(catalog, op);
                }
            }
        }
        if (eoBuilder != null) {

View on GitHub (pinned to e1c734241f)

Solutions

  1. Restore the official Quarkus registry configuration (remove custom quarkus.registry overrides) so the full catalog including quarkus-core is fetched.
  2. If operating a custom registry, publish quarkus-core in the catalog.
  3. Clear the cached registry data under the Quarkus registry cache directory and re-resolve.
  4. Verify the registry descriptor JSON actually contains io.quarkus:quarkus-core.

Example fix

// before (custom registry missing core)
-Dquarkus.registry=https://internal.example.com/quarkus/registry/filtered.json
// after
-Dquarkus.registry=https://registry.quarkus.io (or remove override entirely)
Defensive patterns

Strategy: validation

Validate before calling

ExtensionCatalog catalog = /* resolved catalog */;
boolean corePresent = catalog.getExtensions().stream()
    .anyMatch(e -> "quarkus-core".equals(e.getArtifact().getArtifactId()));
if (!corePresent) {
    throw new IllegalStateException("Selected registry does not publish quarkus-core");
}

Try / catch

try {
    createProject(...);
} catch (QuarkusCommandException e) {
    if (e.getMessage().equals("Failed to locate quarkus-core in the extension catalog")) {
        // switch to the default registry and retry
    } else throw e;
}

Prevention

When it happens

Trigger: An ExtensionCatalog resolved via quarkusCore(...) that lacks any extension with artifactId 'quarkus-core' — typically a custom, filtered, or corrupted registry descriptor passed to the project creation API.

Common situations: Using a self-hosted/filtered registry mirror that strips core; hand-crafted catalog JSON missing quarkus-core; registry misconfiguration pointing at a platform that doesn't publish core.

Related errors


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