quarkusio/quarkus · error · QuarkusCommandException

Failed to determine a compatible Quarkus version for the req

Error message

Failed to determine a compatible Quarkus version for the requested extensions: ${extensionKeys}

What it means

Thrown by getRecommendedOrigins when OriginSelector.calculateRecommendedCombination() returns null, meaning no combination of the requested extensions' origin catalogs shares a Quarkus core version compatible with all of them. The devtools registry resolves each requested extension's available catalogs, and if no single recommended combination exists, project creation/addition cannot proceed. The message lists the requested extension keys so the user can identify the conflicting set.

Source

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

        // fallback to the best guess
        final Map<String, ExtensionCatalog> catalogMap = new LinkedHashMap<>();
        for (var e : extensionsToAdd) {
            final List<ExtensionOrigin> origins = e.getOrigins();
            if (!origins.isEmpty()) {
                if (origins.get(0) instanceof ExtensionCatalog originCatalog) {
                    catalogMap.putIfAbsent(originCatalog.getId(), originCatalog);
                }
            }
        }
        return List.copyOf(catalogMap.values());
    }

    private static List<ExtensionCatalog> getRecommendedOrigins(List<Extension> extensionsToAdd,
            Extension quarkusCore, List<ExtensionOrigins> extOrigins) throws QuarkusCommandException {
        final OriginCombination recommendedCombination = OriginSelector.of(extOrigins).calculateRecommendedCombination();
        if (recommendedCombination == null) {
            throw new QuarkusCommandException(noCompatibleQuarkusCoreVersion(extensionsToAdd));
        }
        // get the recommended catalogs in the right order according to the preferences
        List<ExtensionCatalog> sortedCatalogs = recommendedCombination.getUniqueSortedCatalogs();

        sortedCatalogs = normalizeCatalogs(extensionsToAdd, sortedCatalogs);

        if (!containsQuarkusCore(extensionsToAdd)) {
            sortedCatalogs = ensureQuarkusCorePresent(sortedCatalogs, quarkusCore);
            if (sortedCatalogs.isEmpty()) {
                throw new QuarkusCommandException(noCompatibleQuarkusCoreVersion(extensionsToAdd));
            }
        }
        return sortedCatalogs;
    }

    /**
     * With the introduction of offering-based filtering, some extensions may appear to be picked
     * from a catalog with a lower preference while still having their version managed in a catalog

View on GitHub (pinned to e1c734241f)

Solutions

  1. Update the Quarkus platform/BOM so all requested extensions exist in one compatible registry snapshot (mvn versions:update or update quarkus.platform.version).
  2. Remove or replace the extension(s) pinned to an incompatible old version and retry.
  3. Refresh the extension registry cache (delete ~/.quarkus/registry cache or set the registry quarkus.registry to a current URL).
  4. If using a custom registry, verify it actually publishes quarkus-core for the requested version line.

Example fix

// before
QuarkusCommandException: Failed to determine a compatible Quarkus version ...
// after
<!-- align versions in pom.xml -->
<quarkus.platform.version>3.15.1</quarkus.platform.version> <!-- was mixing 2.x-pinned extensions -->
Defensive patterns

Strategy: validation

Validate before calling

// Validate extension compatibility before adding
List<Extension> requested = /* resolve each extension from the catalog */;
Set<String> streams = requested.stream()
    .map(e -> e.getOrigins().stream().map(o -> o.getPlatformKey() + ":" + o.getStreamKey()).distinct())
    .flatMap(s -> s)
    .collect(Collectors.toSet());
if (streams.size() > 1) {
    throw new IllegalStateException("Extensions span multiple platform streams: " + streams);
}

Try / catch

try {
    project.createExtensionManager(...);
} catch (QuarkusCommandException e) {
    if (e.getMessage().contains("Failed to determine a compatible Quarkus version")) {
        // split the extension set per platform stream and retry per stream
    } else throw e;
}

Prevention

When it happens

Trigger: Calling CreateProject via QuarkusProjectHelper/CreateProjectCommandHandler with a set of extensions whose resolved ExtensionOrigins have no mutually compatible Quarkus core version (OriginSelector returns null).

Common situations: Mixing extensions pinned to very old Quarkus versions with current ones; using a stale or custom extension registry; typos or snapshot versions of extensions that only exist in an outdated catalog; registry connectivity returning a cached old catalog for one extension but a new one for another.

Related errors


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